пакетные http запросы - PullRequest
16 голосов
/ 17 июня 2011

Кто-нибудь знает стандартный способ пакетирования HTTP-запросов?Смысл - отправка нескольких запросов HTTP за один прием?

Нам нужен такой механизм в нашей реализации REST API из соображений производительности.Этот тип механизма может значительно сократить количество циклов, которые клиент должен выполнить для использования API.

Заранее спасибо,

Shay

Ответы [ 6 ]

5 голосов
/ 01 сентября 2011

Существует официальный способ HTTP сделать это, который называется HTTP Pipelining . Но у вас может быть больше проблем на стороне браузера, чем на стороне сервера. Таким образом, вы можете использовать его, если у вас высокий уровень контроля только на стороне клиента.

XHR не всегда разрешает конвейеризацию, и AFAIK у вас нет контроля над HTTP-туннелированием с помощью Javascript. Таким образом, базовая реализация ajax-jQuery не может существовать. Но вы можете найти некоторые продвинутые вещи с Comet и протоколом Bayeux, эмулируя двунаправленные долгосрочные tcp-соединения, где вы, безусловно, сократите количество циклов tcp.

Я не специалист по кометам, но вы можете найти полезную информацию по этой статье о кометах и ​​HTTP-конвейерах , насколько я понимаю, большая часть этого экспериментальна, но, по крайней мере, у вас может быть хороший запасной вариант с «классической» кометой, когда HTTP Pipelining недоступен. Возможно, для этого понадобится повторная отметка или новый вопрос.

5 голосов
/ 17 июня 2011

Определите новый ресурс, который содержит данные, которые хочет клиент. Смотри http://roy.gbiv.com/untangled/2008/rest-apis-must-be-hypertext-driven#comment-743

3 голосов
/ 17 июня 2011

Это проблема с REST.Они находятся на уровне сущности.Идея REST состоит в том, чтобы каждый URL уникально идентифицировал ресурс.Конечно, вы можете ввести агрегированный ресурс.Например, www.yoursite.com/customerA?include=Orders,Faults,Incidents Возвращает XML для CustomerA, но также возвращает заказы, ошибки, инциденты клиента в виде встроенной коллекции.

1 голос
/ 23 декабря 2014

Если вы ищете службы на основе REST или какой-то API. Здесь есть некоторые начала стандарта http://www.odata.org/documentation/odata-version-3-0/batch-processing/

И реализация от Google здесь https://cloud.google.com/storage/docs/json_api/v1/how-tos/batch

1 голос
/ 01 сентября 2011

Если использование выделенных «совокупных» ресурсов, как указано выше в fumanchu, не работает для вас, вы также можете попробовать переместить представления менее изменчивых ресурсов в кеши для уменьшения нагрузки на вашу систему. Например: HTML-страницы в «человеческом» Интернете часто включают в себя множество изображений, и многие подзапросы здесь не имеют значения.

0 голосов
/ 20 октября 2016

Вы создаете пакетные запросы, вызывая new_batch_http_request () для своего сервисного объекта, который возвращает объект BatchHttpRequest, а затем вызывая add () для каждого запроса, который вы хотите выполнить.Вы можете передать обратный вызов с каждым запросом, который вызывается с ответом на этот запрос.Аргументы функции обратного вызова - это уникальный идентификатор запроса для каждого вызова API, объект ответа, который содержит ответ на вызов API, и объект исключения, для которого может быть установлено исключение, вызванное вызовом API.После добавления запросов вы вызываете execute () для выполнения запросов.Функциональные блоки execute () до тех пор, пока не будут вызваны все обратные вызовы.

Ссылки:

Вы можете попробовать это тоже https://developers.google.com/api-client

library / python / guide / batch

https://cloud.google.com/storage/docs/json_api/v1/how-tos/batch

...