Um gatilho HTTP expõe uma função como um endpoint HTTP(S), chamado URL da função. Quando um cliente chama a URL da função, o Function Compute converte a solicitação HTTP em um objeto de evento e o passa ao handler da função. Após o retorno da função, o Function Compute mapeia a saída para uma resposta HTTP e a envia ao cliente.
Este tópico aborda o comportamento do gatilho HTTP em runtimes integrados. Para runtimes personalizados, consulte Web functions.
No Function Compute 3.0, o comportamento do gatilho HTTP em runtimes integrados difere significativamente do Function Compute 2.0. Para obter detalhes, consulte How it works . Para runtimes personalizados e runtimes de Custom Container, o comportamento permanece igual ao do Function Compute 2.0.
Como funciona
Quando um cliente chama a URL da sua função:
O Function Compute mapeia a solicitação HTTP para um objeto de evento (
event).O objeto de evento é passado ao handler da sua função.
Após o retorno da função, o Function Compute mapeia a saída para uma resposta HTTP e a envia de volta ao cliente.
Estrutura da solicitação
Formato
O Function Compute mapeia a solicitação HTTP recebida para um objeto de evento com a seguinte estrutura:
{
"version": "v1",
"rawPath": "/example",
"body": "Hello FC!",
"isBase64Encoded": false,
"headers": {
"header1": "value1",
"header2": "value1,value2"
},
"queryParameters": {
"parameter1": "value1",
"parameter2": "value1,value2"
},
"requestContext": {
"accountId": "123456*********",
"domainName": "<http-trigger-id>.<region-id>.fcapp.run",
"domainPrefix": "<http-trigger-id>",
"http": {
"method": "GET",
"path": "/example",
"protocol": "HTTP/1.1",
"sourceIp": "11.11.11.**",
"userAgent": "PostmanRuntime/7.32.3"
},
"requestId": "1-64f6cd87-*************",
"time": "2023-09-05T06:41:11Z",
"timeEpoch": "1693896071895"
}
}
Parâmetros
|
Parâmetro |
Descrição |
Exemplo |
|
|
Versão do formato do payload. O único valor compatível é |
|
|
|
Caminho da solicitação codificado por URL. Para uma URL de solicitação como |
|
|
|
Corpo da solicitação. Dados binários são codificados em Base64. |
|
|
|
Indica se o corpo da solicitação está codificado em Base64. Valores válidos: |
|
|
|
Cabeçalhos da solicitação como pares chave-valor. Se uma chave tiver vários valores, eles serão separados por vírgulas. No Function Compute 3.0, a primeira letra de cada chave de cabeçalho é convertida para maiúscula (normalização). Consulte Why does the first letter of the header key become uppercase when I use an HTTP trigger to invoke a function? |
|
|
|
Parâmetros de consulta como um objeto JSON. Para uma URL como |
|
|
|
Metadados adicionais da solicitação, incluindo ID da solicitação, timestamp e informações do chamador. |
— |
|
|
ID da conta Alibaba Cloud proprietária da função. |
|
|
|
Nome de domínio do gatilho HTTP. |
|
|
|
Prefixo de domínio do gatilho HTTP. |
|
|
|
Informações detalhadas sobre a solicitação HTTP. |
— |
|
|
Método HTTP. Valores válidos: |
|
|
|
Caminho da solicitação decodificado. Para uma URL de solicitação como |
|
|
|
Protocolo da solicitação. |
|
|
|
IP par da conexão TCP direta (RemoteAddr). Consulte a nota abaixo. |
|
|
|
Valor do cabeçalho de solicitação |
|
|
|
ID da solicitação para rastreamento de logs de invocação. |
|
|
|
Timestamp da solicitação no formato ISO 8601. |
|
|
|
Timestamp da solicitação em tempo UNIX (milissegundos). |
|
sourceIp é o IP par da conexão TCP direta, não necessariamente o IP original do cliente. Se a solicitação não for encaminhada por um proxy, sourceIp corresponde ao IP do cliente. Caso a solicitação passe por um ou mais proxies, sourceIp será o IP do último proxy. Para obter o IP original do cliente quando as solicitações passam por proxies, leia o cabeçalho X-Forwarded-For. Para obter detalhes, consulte How do I obtain the original IP address of a client when an HTTP trigger invokes a function that uses a built-in runtime?
Lógica de mapeamento
O Function Compute mapeia a solicitação HTTP para o objeto de evento da seguinte forma:
Cabeçalhos da solicitação HTTP →
event.headersParâmetros de consulta HTTP →
event.queryParametersContexto da solicitação (ID da solicitação, timestamp, identidade do chamador) →
event.requestContextCorpo da solicitação POST →
event.body
Codificação Base64
O Function Compute verifica o cabeçalho Content-Type para decidir se deve codificar o corpo da solicitação em Base64.
|
** |
** |
Tratamento do corpo |
|
|
|
Transmitido como está |
|
|
|
Transmitido como está |
|
|
|
Transmitido como está |
|
|
|
Transmitido como está |
|
|
|
Transmitido como está |
|
|
|
Transmitido como está |
|
|
|
Transmitido como está |
|
Qualquer outro valor |
|
Codificado em Base64 antes de ser passado para a função |
Exemplos de mapeamento de solicitação
GET
|
Solicitação HTTP |
Objeto de evento |
|
|
|
Para enviar esta solicitação via CLI (substitua https://example.cn-hangzhou.fcapp.run pela URL da sua função):
curl -v "https://example.cn-hangzhou.fcapp.run?parameter1=value1¶meter2=value2"
POST
| Solicitação HTTP | Objeto de evento |
|---|---|
|
{"version":"v1","rawPath":"/","headers":{"Accept":"*/*","Content-Length":"20","Content-Type":"application/json","User-Agent":"curl/8.7.1"},"queryParameters":{},"body":"{\"message\": \"Hello\"}","isBase64Encoded":false,"requestContext":{"accountId":"1327**********","domainName":"example.cn-hangzhou.fcapp.run","domainPrefix":"example","requestId":"1-67aee50c-****-**********","time":"2025-02-14T06:39:08Z","timeEpoch":"1739515148145","http":{"method":"POST","path":"/","protocol":"HTTP/1.1","sourceIp":"40.XX.XX.XX","userAgent":"CurlHttpClient"}}} |
Para enviar esta solicitação via CLI (substitua https://example.cn-hangzhou.fcapp.run pela URL da sua função):
curl -v -H "Content-Type: application/json" -d '{"message": "Hello"}' "https://example.cn-hangzhou.fcapp.run"
Para forçar a codificação Base64 do corpo da solicitação, definaContent-Typecomoapplication/x-www-form-urlencoded.
Estrutura da resposta
Formato
A saída da sua função é analisada em uma estrutura de resposta antes de ser mapeada para a resposta HTTP:
{
"statusCode": 200,
"headers": {
"Content-Type": "application/json",
"Custom-Header-1": "Custom Value"
},
"isBase64Encoded": false,
"body": "{\"message\":\"Hello FC!\"}"
}
Lógica de mapeamento
O Function Compute mapeia a saída da sua função para a resposta HTTP com base na validade do JSON e na presença do campo statusCode.
**Quando a saída é um JSON válido com statusCode:**
|
Campo da estrutura de resposta |
Resposta HTTP |
|
|
Código de status |
|
|
Cabeçalho |
|
|
Corpo da resposta |
|
|
Indica se o corpo deve ser decodificado de Base64 antes do envio (padrão |
**Quando a saída é um JSON válido sem statusCode ou não é JSON:**
O Function Compute utiliza os seguintes padrões:
|
Campo |
Valor padrão |
|
|
|
|
|
|
|
|
Saída da função como está |
|
|
|
Exemplos de mapeamento de resposta
Os exemplos a seguir mostram como a saída da função flui através da análise até a resposta HTTP final.
Saída para uma resposta de string
| Saída da função | Estrutura de resposta analisada | Resposta HTTP (recebida pelo cliente) |
|---|---|---|
Hello World! |
{"statusCode":200,"body":"Hello World!","headers":{"content-type":"application/json"},"isBase64Encoded":false} |
|
Saída para uma resposta JSON
| Saída da função | Estrutura de resposta analisada | Resposta HTTP (recebida pelo cliente) |
|---|---|---|
{"message": "Hello World!"} |
{"statusCode":200,"body":"{\"message\": \"Hello World!\"}","headers":{"content-type":"application/json"},"isBase64Encoded":false} |
|
Saída para uma resposta personalizada
| Saída da função | Estrutura de resposta analisada | Resposta HTTP (recebida pelo cliente) |
|---|---|---|
{"statusCode":201,"headers":{"Content-Type":"application/json","My-Custom-Header":"Custom Value"},"body":{"message":"Hello, world!"},"isBase64Encoded":false} |
{"statusCode":201,"headers":{"Content-Type":"application/json","My-Custom-Header":"Custom Value"},"body":{"message":"Hello, world!"},"isBase64Encoded":false} |
|
Decodificação Base64
Se sua função retornar um JSON válido com isBase64Encoded definido como true, o Function Compute decodifica o body de Base64 antes de mapeá-lo para o corpo da resposta HTTP. Se a decodificação falhar, o Function Compute retorna o valor de body diretamente, sem relatar erro.
Cabeçalhos de resposta
O Function Compute adiciona automaticamente o cabeçalho X-Fc-Request-Id a todas as respostas. Esse cabeçalho identifica exclusivamente a solicitação e é útil para rastrear logs e diagnosticar erros. Além de X-Fc-Request-Id, o Function Compute não adiciona nenhum outro cabeçalho de resposta por padrão.
Cabeçalhos personalizados com o prefixo X-Fc- não são suportados. Os seguintes cabeçalhos são reservados pelo Function Compute e ignorados caso sejam retornados pela sua função:
connectioncontent-lengthdatekeep-aliveservercontent-disposition
Tratamento de erros
As invocações via gatilho HTTP e as invocações diretas de API tratam os erros de função de maneira diferente.
|
Tipo de invocação |
Comportamento de erro |
Código de status HTTP |
|
Invocação direta de API |
Mensagem de erro retornada no corpo da resposta |
|
|
Gatilho HTTP (URL da função) |
Mensagem de erro oculta; |
|
Por exemplo, uma invocação direta de API que encontra um ModuleNotFoundError em Python retorna os seguintes detalhes de erro:
{
"errorMessage": "Unable to import module 'index'",
"errorType": "ImportModuleError",
"stackTrace": [
"ModuleNotFoundError: No module named 'not_exist_module'"
]
}
Quando uma função invocada via gatilho HTTP encontra um erro, o cliente recebe uma resposta como:
HTTP/1.1 502 Bad Gateway
Content-Disposition: attachment
Content-Type: application/json
X-Fc-Request-Id: 1-64f6df91-fe144d52e4fd27afe3d8dd6f
Content-Length: 21
Internal Server Error
Utilize o valor de X-Fc-Request-Id para consultar os detalhes completos do erro nos logs de invocação da sua função.
Tópicos relacionados
Se você estiver escrevendo código de função para um runtime integrado, consulte a documentação do handler para sua linguagem: