Rest Api: когда использовать Post, PUT, PATCH и Delete - PullRequest
0 голосов
/ 25 февраля 2019

Я работаю над API-интерфейсом restful, и мне нужно обновить ресурс (т. Е. Подробную информацию о клиенте с 10 полями).

При добавлении запроса я отправляю запрос Post с полной записью.По запросу на обновление я отправляю запрос PUT с полной записью из 10 полей.На запрос проверки я отправляю запрос PUT только с двумя полями, т.е. recordId и versionNo.По запросу Удалить я отправляю запрос DELETE с двумя полями в HttpOptions.

У меня есть несколько вопросов, которые:

  • Хотя, это спокойный API, но конкретное приложение, которое будетиспользоваться угловым приложением, поэтому я должен возвращать данные в ответ на запросы POST / PUT.

  • Должен ли я использовать PATCH в случае проверки (или любого другого действия, когда отправляются только recordId и versionNo)на сервер, чтобы изменить некоторые поля) или можно использовать PUT.

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

Ответы [ 2 ]

0 голосов
/ 25 февраля 2019

Должен ли я использовать PATCH в случае проверки (или любого другого действия, когда только recordId и versionNo отправляются на сервер для изменения некоторых полей) или можно использовать PUT.

В RESTfulКонструкции API, запросы PUT обычно используются для добавления или замены всего ресурса, тогда как PATCH следует использовать только для обновления существующего ресурса.Запрос PUT называется «идемпотентным» - независимо от того, сколько раз вы отправляете ответ PUT, вы должны получать один и тот же результат.PATCH не идемпотентен.

пример:

PATCH / Cars / vauxhall-astra / engine -> Этот запрос будет использоваться только для обновления движка моего уже существующего vauxhall astra

PUT / Cars / renault-clio -> Этот запрос создаст новый Renault Clio или, если он уже существует, заменит весь Clio, используя данные, указанные в моем запросе.Тогда Clio будет гарантированно существовать после того, как мой запрос будет успешным, независимо от того, существовал он или нет раньше.

Хотя это спокойное API, но конкретное приложение, которое будет использоваться угловым приложением,Поэтому я должен возвращать данные в ответ на запросы POST / PUT.

Полностью на ваше усмотрение, возврат данных из POST / PUT - это хорошо, особенно если это избавляет вас от необходимости делать дополнительные запросы GET API.Просто всегда убедитесь, что вы когда-либо возвращаете нужные данные из ответа.

Чтобы сделать единообразие, я должен отправлять данные в теле запроса на удаление, так как мне нужны recordId и versionNo для удаления записи.

Опять все зависит от вас.Используете ли вы параметры запроса (например, DELETE cars? Id = 123) или тело запроса - это только ваши предпочтения, в REST нет ничего, что бы имело правила для этого.

0 голосов
/ 25 февраля 2019

REST Response

RESTful API ДОЛЖЕН всегда отвечать HTTP-кодами на запросы клиентов:

Успешные и ошибочные ответы являются важной частью для определения того, какAPI используется правильно.

Обратитесь к этому руководству, чтобы решить все ваши вопросы, связанные с RESTful.


PATCH /PUT

From Wikipedia :

Основное различие между методом PUT и PATCH состоит в том, что метод PUT использует URI запроса для предоставления модифицированной версиизапрашиваемый ресурс, который заменяет исходную версию ресурса, тогда как метод PATCH предоставляет набор инструкций для изменения ресурса.Если документ PATCH больше, чем размер новой версии ресурса, отправленного методом PUT , тогда предпочтителен метод PUT .

Также:

Использование метода PUT потребляет большую полосу пропускания по сравнению с методом PATCH, когда к ресурсу необходимо применить только несколько изменений.Но когда используется метод PATCH, он обычно включает в себя выборку ресурса с сервера, сравнение оригинальных и новых файлов, создание и отправку файла diff.На стороне сервера сервер должен прочитать файл diff и внести изменения.Это связано с большими накладными расходами по сравнению с методом PUT. [11]С другой стороны, метод PUT требует выполнения GET перед PUT, и трудно гарантировать, что ресурс не изменяется между запросами GET и PUT.

Поэтому я буду использовать PATCH для проверки ресурса.


DELETE

Обычно, для DELETE запросов, клиент указывает id ресурса ипередайте ему задание Переменная пути по URL:

curl -X DELETE http://example.com/resource/{id}

Но вы также можете передать тело по запросу.MDN Mozilla Web DOCS заявляет об этой возможности:

Запрос имеет тело - Май

Успешный ответ имеет тело - май

...