fetch
A função fetch do Azion Runtime: parâmetros, opções de requisição aceitas, modos de redirecionamento, timeouts, erros e o Response que ela retorna.
A função fetch() envia uma requisição HTTP a partir do seu código no Azion Runtime e retorna uma promise que resolve em um Response. Você lê essa resposta, a altera ou a devolve ao cliente por meio de event.respondWith() ou do valor de retorno do seu handler. fetch() faz parte da Fetch API, que também define os objetos Request e Response, o CORS e a semântica do cabeçalho HTTP Origin. Com esses objetos, seu código trata, modifica ou constrói requisições e respostas enquanto responde a uma requisição.
Use fetch() para encaminhar uma requisição a um servidor de origem e retornar a resposta dele, ou para chamar uma API REST ou GraphQL que fornece parte de uma resposta. Você também pode combinar dados de vários backends em uma única function, ou buscar assets ou configurações remotas e reescrevê-los antes da entrega.
Sintaxe
| Parâmetro | Tipo | Descrição |
|---|---|---|
request | Request ou string | Requisição a enviar: um objeto Request ou uma string com a URL a buscar. |
init | Object (RequestInit) | Opções da requisição. |
O objeto init aceita estas opções. method, headers, body e redirect são os campos que o objeto Request documenta, e signal cancela a requisição:
| Opção | Tipo | Descrição |
|---|---|---|
method | String | Método da requisição, como POST. |
headers | Objeto Headers | Cabeçalhos da requisição. |
body | — | Payload da requisição, como uma string JSON. |
redirect | String | Modo de redirecionamento: follow, error ou manual. Com follow, o padrão, fetch() segue o redirecionamento e resolve na resposta final. Com manual, ela resolve na resposta de redirecionamento, como um 301 com o cabeçalho location. Com error, a promise é rejeitada. |
signal | AbortSignal | Sinal que cancela a requisição, como AbortSignal.timeout(300) para parar de esperar após 300 ms. |
Limites
Cada chamada fetch() é executada dentro do teto de tempo de relógio da sua invocação: 5 minutos, com a espera de I/O incluída. Uma invocação também pode fazer um número limitado de chamadas fetch() de saída. Para os dois valores, consulte Limites de Functions.
Para limitar uma única chamada, passe AbortSignal.timeout() como signal em init. A promise então é rejeitada com um erro cujo name é TimeoutError, que seu código captura.
Erros
A promise que fetch() retorna é rejeitada com estes erros em uma function após o deploy:
| Erro | Causa | O que fazer |
|---|---|---|
TimeoutError: Signal timed out. | O AbortSignal.timeout() passado como signal expirou antes de a resposta chegar. O erro é uma DOMException cujo name é TimeoutError. | Capture a rejeição e verifique error.name, ou passe um timeout maior. |
TypeError: Fetch failed: Encountered redirect while redirect mode is set to 'error' | O servidor respondeu com um redirecionamento, e redirect é error. | Defina redirect como follow ou manual, ou capture a rejeição. |
Exemplo
Este listener responde a cada requisição com a resposta que fetch() recebe de https://example.com:
O listener retorna uma resposta com este status, este tipo de conteúdo e este corpo. Os outros cabeçalhos da resposta foram cortados, e o corpo foi cortado depois do título: