Как определить конечные точки для аналогичных действий в соответствии с REST

#c# #asp.net #rest #asp.net-core #endpoint

Вопрос:

У меня есть сервис, с помощью которого клиенты могут подписаться на получение событий через WebSocket. Клиенты могут получать события двумя способами:

  • Клиент может вызвать сервер WebSocket и передать ссылку на сервер WS службе. Служба будет подключаться и отправлять события на сервер.
  • Служба может генерировать ссылки для доступа к своему серверу WS. Клиент сможет получать события, подключившись к серверу WebSocket по предоставленной ссылке.

В каждом из вариантов клиенту необходимо подписаться на события, которые он хочет получать.

  • Запрос: { "Events": [ "1", "2" ], "Url": "wss://some.url" } . Ответ: 201.
  • Запрос: { "Events": [ "1", "3" ] } . Ответ: 201 { "Url": "wss://some.url" } .

Пример конечной точки для первого варианта:

 [HttpPost("subscriptions")]
[ProducesResponseType(StatusCodes.Status201Created)]
public async Task<IActionResult> Subscribe([FromBody] IEnumerable<string> events, [FromBody] string url)
{
    \...
    return StatusCode(StatusCodes.Status201Created);
}
 
  1. Как правильно спроектировать конечные точки, если есть два варианта подписки на запрос и ответ?
  2. Какое название и маршрут были бы правильными в этом случае?
  3. Если есть возможность объединить их в одну конечную точку, как это сделать правильно?

Комментарии:

1. Привет @Александр, ваш код неверен. Вы не можете применять [FromBody] более одного параметра для каждого метода действия.

2. Привет, @Рена, спасибо за комментарий, ты права. Однако это всего лишь пример, который не имеет ничего общего с реальным проектом.