Как создать групповой вызов GET? - PullRequest
1 голос
/ 02 марта 2020

Каков наилучший способ разработки API, облегчающего запрос для группового GET? У меня есть сценарий использования, в котором я хочу вернуть несколько объектов в службу, и я не хочу делать один вызов GET для каждого ресурса.

Ответы [ 2 ]

0 голосов
/ 02 марта 2020

Это обычная задача для HTTP API. Таким образом, есть два распространенных решения.

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

Например:

POST /resources
Content-Type: application/json

{
  "action": "get",
  "ids": [
    1,
    2,
    3
  ]
}

Другой вариант GET запрос с телом. Запрос, скорее всего, будет выглядеть так же, как и в запросе POST, приведенном выше, но без указания действия. Этот подход используется в таких проектах, как ElasticSearch . Спецификация HTTP является неопределенной в своем определении, когда речь идет о GET запросах, имеющих тело (см. RF C 7231 ).

В частности, RF C говорит:

Полезная нагрузка в сообщении запроса GET не имеет определенной семантики; отправка тела полезной нагрузки по запросу GET может привести к тому, что некоторые существующие реализации отклонят запрос.

Хотя я не могу говорить за разработчиков ElasticSearch, я ожидаю, что последняя часть цитаты («некоторые существующие реализации [могут] отклонить запрос ") была одной из причин, по которой ElasticSearch принимает как GET, так и POST запросы для массовых запросов .

0 голосов
/ 02 марта 2020

Наличие одного ресурса, который возвращает представление нескольких объектов, - штраф . Представьте результаты поиска в Google, вопросы о переполнении стека, прошлые заказы в Amazon.

Вам необходимо знать о последствиях аннулирования кэша. См. RF C 7234 . Основная проблема заключается в том, что для компонентов общего назначения разные ресурсы не связаны - аннулирование одного не приводит к изменению других (ожидайте в ограниченных обстоятельствах). Если «одна и та же» информация кэшируется под двумя разными ключами API, это может привести к несоответствиям.

...