Как метод / функция должна быть представлена ​​с помощью REST? - PullRequest
0 голосов
/ 18 апреля 2020

В бэкэнде у меня есть метод (функция), который принимает необязательный ввод типа date и находит неделю, к которой относится этот день, и возвращает начальный и конечный день этой недели. Например, если input равен 2020/04/14 , он вернет:

{
  "start" : "2020/04/13",
  "end": "2020/04/19"
}

Я хотел бы представить это как конечную точку REST . Я думал об этих двух вариантах:

GET /week?date=2020/04/14

2.
POST /week?date=2020/04/14

Однако я хотел бы знать, как должна реализовываться такая конечная точка на основе архитектуры REST и общего соглашения? он вызывает метод в бэкэнде и не работает с ресурсом.

Ответы [ 3 ]

3 голосов
/ 18 апреля 2020

POST-запрос обычно используется для изменения данных на сервере, фактически для создания новой записи (например, для вставки новой строки базы данных или сохранения определенного объекта).

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

Так что в этом случае следует использовать GET.

1 голос
/ 19 апреля 2020

в этом примере мы не имеем дело с каким-либо ресурсом

Resource в контексте REST означает что-то определенное c. Вот как Филдинг описывает ресурс :

Ключевая абстракция информации в REST - это ресурс. Любая информация, которая может быть названа, может быть ресурсом: документ или изображение, временная служба (например, «сегодняшняя погода в Лос-Анджелесе»), набор других ресурсов, не виртуальный объект (например, человек) и т. Д. , Другими словами, любая концепция, которая может быть целью гипертекстовой ссылки автора, должна вписываться в определение ресурса.

Таким образом, в рамках REST совершенно разумно сказать, что /week?date=2020/04/14 идентифицирует ресурс, представление которого описывает календарную неделю.

Поскольку HTTP-запрос в этом случае фактически имеет семантику только для чтения (иначе говоря, "безопасную" семантику) - мы не ожидаем, что сервер каким-либо образом изменится - естественным соответствием для этого запроса будет использование GET.

GET /week?date=2020/04/14

Как правило, все, что просто возвращает результат вычисления, должно использовать GET с параметрами, предоставленными клиент, закодированный в идентификатор ресурса (как мы это делали с формами GET в сети).

Исключением из этого являются те случаи, когда параметры настолько велики / многочисленны, что ваши запросы ограничиваются фактическими ограничениями по длине URI. В этих случаях вы используете POST, жертвуя простым кэшированием для выполнения работы.

0 голосов
/ 18 апреля 2020

POST используется, когда вы хотите поместить туда тело с некоторой «тяжелой» нагрузкой. Так что в этом случае я думаю, что GET хорошо подходит для ваших нужд.

...