XAKEPEHOK
@XAKEPEHOK

Как правильно добавить действие в rest api отличное от CRUD?

Не совсем понимаю, как правильно будет с точки зрения архитектуры/дизайна добавить действие в rest api на примере встроенного в Yii2 набора инструментов для создания restful сервиса

Пример: есть контроллер, в котором есть CRUD для создания посылок. С ним все понятно: http get (parcel/index) - список посылок; http post (parcel/create) - создание новой; put (parcel/123) - редактирование существующей и т.д.

Но у меня еще есть метод, который возвращает стоимость посылки на примере заданных параметров не создавая саму посылку. Как быть с ним? Какой тип http запроса к нему отправлять (я думаю post)? На какой url корректно будет слать запрос, если контроллер называется parcel?
  • Вопрос задан
  • 725 просмотров
Решения вопроса 2
nazarpc
@nazarpc
Open Source enthusiast
Заведите отдельный метод, например, calculate. Он не стандартный, но вполне может использоваться и хорошо описывает своё назначение.
Ответ написан
talgatbaltasov
@talgatbaltasov
Freelancer
http get запросом отправляете, сколько бы не было данных
get - всегда для получения данных
put - всегда для замены
post - всегда для добавления
delete - для удаления
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
Почему бы не так:

GET /prices?from="efaef&to=aeaef&foo=bar

Если делать как предлагает Назар Мокринский, то это RPC, это тоже нормальный подход, когда имена ресурсов не очень ложатся (например я так делаю с методами апишки для восстановления пароля). В этом случае лучше использовать POST, но опять же в вашем случае все все еще нормально ложится на rest, так что....
Ответ написан
Комментировать
vyachin
@vyachin
Ищу работу
я присоединяюсь к ответу Талгат Балтасов немного дополнив. Если в результате запроса состояние вашей системы не меняется - однозначно метод GET. Возможно потребуется добавить новый объект (читай контроллер), калькулятор расчета стоимости посылки и спрашивать у него.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы