2015-05-14 4 views
0

У меня есть сервер RESTful, который реализует запрос на получение объекта, а объект имеет несколько ключей. Например, получить контактную информацию для конкретной компании в конкретной стране (Nike, Германия):REST Получить для нескольких значений с помощью нескольких ключей

GET: http://hostname/rest/accounts/{company}/{country} 

Я хочу, чтобы добавить функциональность, что позволяет клиенту запрашивать несколько пар компаний/стран в одном вызове. Поскольку у меня есть миллионы записей в БД, я никогда не хочу возвращать все данные. Кроме того, клиенту может потребоваться ~ 1000 записей, поэтому я не хочу, чтобы он сделал 1000 звонков.

Я думал о добавлении пар компании/страны в тело запроса, но ответ здесь HTTP GET with request body предположил, что это плохая практика.

Я не могу использовать параметры строки запроса, потому что мне нужно много информации, и большинство серверов имеют ограничение на размер URL.

Какая хорошая практика REST для такого случая?

ответ

1

Существует официальное предложение по протоколу с несколькими запросами - here (background). Возможно, потому, что он использует HTTP/2 для повышения эффективности, в настоящее время он, похоже, не имеет большого количества импульсов.

За несколько ресурсов вы можете указать их все в URL-адресе. Проблема заключается в фактическом пределе URL-адреса ~2000 characters. Хотя он применяется в первую очередь к IE, я думаю, что хороший API должен хорошо работать в браузерах, и, вероятно, он применяется в других местах из-за ограничения IE.

По этой причине, я думаю, у вас есть два варианта.

Реально, вам нужно будет использовать запрос POST, где тело содержит список запрошенных путей, например. как JSON-кодированный массив. Как правило, это неправильная практика, но в этой ситуации она считается разумной. Практический недостаток - это не кешируемость.