Olá, estamos fazendo uma integração para embarcar dados de nossos clientes em nossas plataformas de big data, e o design da api hoje torna isso extremamente custoso. Na api de OMS, onde listamos todas as ordens, não temos todos os dados necessários. Isso nos obriga a listar todas as ordens e depois consultar a api individualmente para cada ordem. Resultando em mais de 1000 chamadas à API por dia. Isso é ruim tanto para nossos servidores quanto o de vocês. Não existe uma forma de pedir ao endpoint de list para trazer os campos que escolhermos, ao invés de recebermos apenas as entregas default?
"no caso não precisa se preocupar quanto às chamadas excessivas ao GET Order. Se você está fazendo isso e não há um workaround temos que ter infra necessária para aguentar as chamadas, certo?"
Oi Pablo, desculpe nao responder antes (estava de férias)!
Todo pedido feito na VTEX possui dois workflows, certo? Um deles é o Marketplace e o outro o Fulfillment. Talvez essa nomencaltura confunda um pouco, mas consideramos a própria loja como um Marketplace, pois existe a feature nativa de uma loja VTEX ser um marketplace. O erro aponta para um timeout na rota do Fulfillment.
Essa mensagem de erro foi response de qual chamada, poderia compartilhar?
Olhando nossos logs, tivemos apenas 140 timeouts do fulfillment nos ultimos 30 dias. Nenhum evento relacionado com esse accountname. Acredito que esse response não está ligado ao erro, deve ser uma mensagem de um sistema intermediário. Se eu entender melhor o que seu programa está fazendo posso investigar melhor.
Olá tomas, muito obrigado pela resposta! Segue abaixo o cURL que estamos fazendo. Estamos buscando detalhes de ordens uma por uma, para conseguir obter os dados que precisamos.
A questão, ao que parece, é que fazemos muitas chamadas dessas simultaneamente (com ids de compra diferentes, obviamente).
Olá Pablo, vou levar essa sugestão pro time do OMS! Obrigado por se preocupar com a performance da VTEX :) mas no caso não precisa se preocupar quanto às chamadas excessivas ao GET Order. Se você está fazendo isso e não há um workaround temos que ter infra necessária para aguentar as chamadas, certo?
De qualquer forma vou revalidar a estrutura do LIST Orders e te retorno!
Então estamos alinhados!! Se a preocupação é tempo talvez o caminho seja abrir multiplas threads, ou seja, fazer a consulta de forma assíncrona. Assim não precisa chamar um pedido e depois o outro.
Para esclarecer a "limitação" de dados no JSON do List Orders, isso acontece por conta da origem dos dados. O List Order recolhe informações do SOLR (o indexador usado pela VTEX), enquanto o Get Order busca a informação de cada pedido diretamente no Checkout.
Infelizmente o SOLR é hiper sensível a mudanças como a indexação de novos campos. Vamos atualizar a versão dele em breve e possivelmente novos campos possam ser incluidos. (já está na hora de dar um up na tela inicial do OMS certo?)
Muito obrigado Thomas. Nós já estamos trabalhando assincronamente, mas um e-commerce "parrudo" vai ter sempre centenas e centenas de orders e invariavelmente vai tomar tempo.
Como estamos usando paralelismo, fazemos muitas chamadas de uma vez, uma vez ao dia (para atualizar os últimos 7 dias de dados), e estamos meio que aleatoriamente tomando um erro (500) da api vtex. Apesar da mensagem ser descritiva, não conseguimos reproduzir um padrão para evitar o erro. Esse tempo de 10 segundos é exatamente em relação a que?
[x-vtex-error-message] => Array
(
[0] => A chamada do conector ao recurso 'pvt/orders/00-v11148408rihp-01?an=rihappy' do serviço 'http://fulfillment.vtexcommerce.com.br/api/fulfillment' atingiu o tempo limite em 10 segundos
)