Ответ 1
Определите новый ресурс, содержащий данные, которые хочет клиент. См. http://roy.gbiv.com/untangled/2008/rest-apis-must-be-hypertext-driven#comment-743
Кто-нибудь знает стандартный способ пакетных запросов HTTP? Смысл - отправка нескольких HTTP-запросов в один раунд?
Нам нужен такой механизм в нашей реализации REST API по соображениям производительности. Такой механизм может значительно сократить количество круглых поездок, которые клиент должен выполнить, чтобы потреблять API.
Спасибо заранее,
Шай
Определите новый ресурс, содержащий данные, которые хочет клиент. См. http://roy.gbiv.com/untangled/2008/rest-apis-must-be-hypertext-driven#comment-743
Существует официальный HTTP-способ сделать то, что называется HTTP Pipelining. Но у вас могут быть проблемы со стороной браузера, чем с серверной. Таким образом, вы можете использовать его, если у вас есть высокий уровень контроля только на стороне клиента.
XHR не всегда разрешает пипетировать, и AFAIK вы не контролируете туннелирование HTTP с помощью Javascript. Таким образом, базовая реализация ajax-jQuery не может существовать. Но вы можете найти некоторые продвинутые вещи с Comet и протоколом Bayeux, эмулируя двунаправленные долгосрочные tcp-соединения, где вы, безусловно, уменьшите круговые поездки tcp.
Я не специалист по кометам, но вы можете найти полезную информацию об этой статье Comet и HTTP Pipeling, на мой взгляд, большую часть этого очень экспериментально, но по крайней мере у вас может быть хороший резерв с "классической" кометы, когда HTTP Pipelining недоступен. Возможно, это потребует повторной проверки или нового вопроса.
Это проблема с REST. Они находятся на уровне сущности. Идея REST состоит в том, чтобы каждый URL уникально идентифицировал ресурс. Конечно, вы можете ввести агрегированный ресурс. Например, www.yoursite.com/customerA?include=Orders,Faults,Incidents Это возвращает XML для CustomerA, а также возвращает ордеры, ошибки, инциденты клиента в виде встроенной коллекции.
Если использование выделенных "совокупных" ресурсов в качестве fumanchu, упомянутых выше, не работает для вас, вы также можете попробовать, если вы можете перемещать представления менее волатильных ресурсов в кэши, чтобы уменьшить нагрузку на вашу систему. Например: HTML-страницы на "человеческом" веб-сайте часто включают в себя нагрузки и нагрузки изображений, и многие запросы sub не беспокоятся о них.
Если вы смотрите на службы на основе 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
Вы создаете пакетные запросы, вызывая 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