Пакетные http запросы

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

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

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

фаэтон

6 ответов

Решение

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

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

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

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

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

Если вы ищете службы на основе 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

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

CURL

Сборка 17063 Windows 10 (и следующие версии) поставляются с CURL команда:

curl -X POST -H "Content-Type: application/json" -d "{\"name\": \"myname\", \"email\": \"some@example.com\"}' https://example/contact

winHttpJs.bat

call winhttpjs.bat "http://requestb.in/xxxxxx" -method POST -header hdrs.txt -reportfile reportfile2.txt

call winhttpjs.bat "http://requestb.in/xxxxxx" -method GET -header hdrs.txt -reportfile reportfile3.txt -saveTo c:\somezip.zip 

call winhttpjs.bat "http://requestb.in/xxxxxx" -method POST -header hdrs.txt -reportfile reportfile2.txt -saveTo responsefile2 -ua "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36"  -body-file some.json

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

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

Рекомендации:

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

библиотека / питон / руководство / партии

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

Другие вопросы по тегам