Pergunta

Alguém conhece uma maneira padrão de enviar solicitações HTTP em lote? Ou seja, enviar várias solicitações atômicas de http em uma viagem de ida e volta?

Precisamos desse mecanismo em nossa implementação da API REST por motivos de desempenho.Esse tipo de mecanismo pode reduzir drasticamente o número de viagens de ida e volta que o cliente precisa realizar para consumir a API.

Agradecemos antecipadamente,

Shay

Foi útil?

Solução

Defina um novo recurso que contenha os dados que o cliente deseja.Consulte http://roy.gbiv.com / untangled / 2008 / rest-apis-must-be-hypertext-driven # comment-743

Outras dicas

Há uma maneira HTTP oficial de fazer isso, chamada HTTP Pipelining . Mas você pode ter mais problemas com o lado do navegador do que com o lado do servidor. Portanto, você poderá usá-lo se tiver um alto nível de controle apenas no lado do cliente.

XHR nem sempre permite pipelagem, e AFAIK você não tem controle do túnel HTTP com Javascript. Portanto, uma implementação básica de ajax-jQuery não pode existir. Mas você pode encontrar algumas coisas avançadas com o Comet e o protocolo Bayeux, emulando conexões tcp bidirecionais de longo prazo, onde certamente reduzirá as viagens de ida e volta tcp.

Não sou um especialista em cometas, mas você pode encontrar informações úteis sobre isso Artigo do Comet & HTTP Pipeling , no meu entendimento, a maior parte disso é altamente experimental, mas pelo menos você poderia ter um bom fallback com o cometa 'clássico' quando o HTTP Pipelining não estiver disponível. Isso talvez precise de uma nova tag ou de uma nova pergunta.

Esse é um problema com REST.Eles estão no nível da entidade.A ideia do REST é fazer com que cada URL identifique exclusivamente um recurso. Claro que você pode introduzir recursos agregados.Por exemplo, www.yoursite.com/customerA?include=Orders,Faults,Incidents Isso retorna o XML para CustomerA, mas também retorna os Pedidos, falhas, Incidentes do cliente como coleção incorporada.

Se usar recursos 'agregados' dedicados como fumanchu disse acima não funcionar para você, você também pode tentar mover representações de recursos menos voláteis para caches para reduzir a carga em seu sistema.Por exemplo: páginas HTML na Web 'humana' geralmente incluem cargas e cargas de imagens e as muitas sub-solicitações não são motivo de preocupação.

Se você estiver procurando por serviços baseados em REST ou uma API de algum tipo.Há alguns princípios de um padrão aqui http:// www.odata.org/documentation/odata-version-3-0/batch-processing/

E uma implementação do Google aqui https:// nuvem.google.com/storage/docs/json_api/v1/how-tos/batch

Você cria solicitações em lote chamando new_batch_http_request () em seu objeto de serviço, que retorna um objeto BatchHttpRequest, e chama add () para cada solicitação que deseja executar. Você pode passar um retorno de chamada com cada solicitação que for chamada com a resposta a essa solicitação. Os argumentos da função de retorno de chamada são um identificador de solicitação exclusivo para cada chamada de API, um objeto de resposta que contém a resposta da chamada de API e um objeto de exceção que pode ser definido como uma exceção gerada pela chamada de API. Depois de adicionar as solicitações, você chama execute () para fazer as solicitações. A função execute () bloqueia até que todos os retornos de chamada sejam chamados.

Referências:

Você também pode tentar https://developers.google.com/api-client

library / python / guide / batch

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top