Насколько важно придерживаться соответствующих типов HTTP-запросов при разработке API?

#rest #api #http

#rest #API #http

Вопрос:

Обычно при разработке API я пытаюсь придерживаться следующей структуры:

 GET: /resources (get multiple resources)
POST: /resource (create a single resource)
GET: /resource/:id (get a single resource)
PUT: /resource/:id (update a single resource)
DELETE: /resource/:id (delete a single resource)
 

Но иногда, когда вы «получаете» данные, передаваемые параметры начинают расти за пределы того, что вы можете включить в строку запроса. Например, в GET: /resources приведенном мной примере может быть несколько фильтров, которые вы хотите применить к выбранным вами ресурсам.

В этом случае можно ли начать использовать a POST , чтобы вы могли включать параметры в тело запроса? Каковы недостатки отказа от соблюдения структуры, о которой я упоминал выше?

Ответ №1:

В этом случае можно ли начать использовать POST, чтобы вы могли включать параметры в тело запроса?

Да, то есть есть компромиссы.

Каковы недостатки отказа от соблюдения структуры, о которой я упоминал выше?

Это мешает способности общих компонентов разумно участвовать в протоколе.

GET Запрос имеет безопасную семантику; агент может воспользоваться этим для предварительной выборки ресурсов, сканеры могут свободно исследовать содержимое и так далее.

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

Если бы все, что мы действительно хотели, это RPC, мы могли бы делать все с помощью POST. См., Например, «SOAP», где все сообщения встроены в полезную нагрузку, а HTTP используется просто как тупой туннель.

Ответ №2:

1) REST — это аналогичный шаблон проектирования для HTTP-связи. Всегда полезно следовать REST, особенно когда вы предоставляете свой API для общего пользования или браузер для связи с сервером.

2) Вы можете писать HTTP-запросы даже без надлежащего шаблона REST, но это приведет к ненужным проблемам, если его браузер подключится к серверу. Поскольку большинство современных браузеров разработаны с использованием стандартов REST, они очень хорошо понимают этот шаблон. По умолчанию запросы GET будут кэшироваться, вместо GET, если вы используете POST по умолчанию, он не будет кэшироваться. Таким образом, новый запрос будет отправляться на сервер каждый раз. Таким образом, это приведет к большому количеству подключений, ресурсов и т. Д.

3) Само GET — Word дает вам значение только для получения ресурса. аналогично, POST и PUT для создания записей, DELETE для удаления и т. Д.

4) POST-VS-GET — если вы используете POST, вы можете включить RequestBody, тогда как в GET request вы не можете.Лучше следовать GET для получения данных ресурса