Importando a API
Uso no Browser (client-side)
Para uso no Cliente, o Invoke é exportado daruntime.ts no raiz do projeto.
Abaixo está um exemplo de um arquivo runtime.ts típico, que cria um cliente
para interagir com actions e loaders do seu site, e de dois apps: VTEX e Linx
Impulse. Todos os Apps podem ser usados da mesma forma, já que exportam um
Manifest.
Uso no Servidor
Para uso no Servidor, o Invoke pode sempre ser acessado a partir do Contexto da Aplicação. Isso torna o Invoke mais fácil de usar dentro de actions e loaders. Abaixo está um exemplo de um loader que utiliza o Invoke para chamar outro loader da mesma Aplicação:Exemplos de Uso
Exemplo 1: Chamando uma Action ou Loader a partir do Navegador
Suponha que temos um loader chamadogetUser, que retorna um objeto de usuário,
baseado em um id de usuário enviado.
getUser é automaticamente
inferido, e o tipo da variável user é User. Todos os tipos de parâmetros são
também inferidos, então temos mais confiança para interagir com nossas APIs.
Importante: Isso deve ser usado apenas no Navegador. Tentar importar e usar
o cliente Invoke do arquivo runtime.ts no servidor resultará em um erro. Para
chamar actions/loaders a partir do servidor, veja o próximo exemplo.
Exemplo 2: Chamando uma Action ou Loader a partir do Servidor
Suponha que estamos criando uma ação chamadaaddItem que adiciona um item a um
carrinho.
Suponha também que já temos um loader chamado cart, que retorna o carrinho
atual para um usuário, baseado em uma sessão contida nos cookies da requisição:
addItem, podemos reutilizar o loader cart para
buscar o carrinho atual e então adicionar o item ao carrinho:
AppContext exportado por convenção do seu site app.
Exemplo 3: Enviando um arquivo para o Servidor
Suponha que temos uma ação chamadauploadFile, que envia um arquivo para um
destino. A ação recebe uma propriedade file, que é um objeto de arquivo que
contém os dados do arquivo, e uma propriedade destination, que é uma string
que especifica o destino para onde o arquivo deve ser enviado.
File como tipo de propriedade aqui, mas isso cria um
problema:
O objeto File não é serializável via JSON, que é o que o Invoke usa
internamente. Isso significa que tentar passar um objeto File como propriedade
para uma ação resultará em um erro ao tentar acessar a propriedade file dentro
da sua action.
Para resolver isso, o cliente Invoke oferece uma maneira de fazer upload de
arquivos via uma requisição multipart, que é uma maneira prática de enviar
arquivos para o servidor, usando a API FormData e o tipo de conteúdo
multipart/form-data.
Para usar isso, você só precisa adicionar uma opção multipart: true ao
InvokerRequestInit do Invoke (que é o segundo argumento para qualquer chamada
de invoke), e o cliente usará automaticamente um protocolo personalizado para
enviar o payload via multipart, tornando possível enviar arquivos para o
servidor.
Podemos agora chamar essa ação a partir do Navegador, usando o cliente invoke
exportado do arquivo runtime.ts:
file pode ser acessado seguramente na action!
Importante: Quando usando a opção multipart, o cliente Invoke enviará um
FormData objeto para o servidor, que só suporta arquivos e strings. Isso
significa que qualquer propriedade que seja um número ou um booleano será
convertida para uma string.