Converter Webhooks em ponto de conexão HTTPS
Nesta página
Visão geral
Os webhooks de serviço de terceiros do Atlas App Services são preteridos em favor de HTTPS endpoints personalizados. HTTPS endpoints são funcionalmente quase idênticos aos webhooks, mas agora são um serviço de primeira classe.
Este guia mostra como converter os webhooks existentes do seu aplicativo e atualizar aplicativos externos que os chamam. Para novos webhooks ou chamada de resposta URL, você deve definir um HTTPS endpoint.
Converter automaticamente webhooks HTTP existentes
O App Services pode converter automaticamente quaisquer webhooks de HTTP Service existentes na sua aplicação em HTTPS endpoints. Essa conversão é unidirecional, o que significa que você não pode converter HTTPS endpoints de volta em webhooks. O processo de conversão não exclui os webhooks originais, portanto, as solicitações de webhook recebidas continuarão a ser executadas após a conversão.
Para executar o processo de conversão de webhook para endpoint HTTPS para todos os webhooks em seu aplicativo:
Clique em HTTPS Endpoints no menu de navegação esquerdo da interface do usuário do App Services.
Clique no botão Convert.
Confirme que você deseja executar a conversão.
Observação
Os HTTPS endpoints são independentes de seus webhooks de origem. Se você optar por editar um webhook após executar a conversão, poderá executar a conversão novamente com a opção "Converter e substituir" para propagar essas alterações aos novos endpoints.
Converter manualmente webhooks do GitHub e Twilio
App Services não pode converter automaticamente Github e Twilio em HTTPS endpoints porque usam bibliotecas de clientes obsoletas. No entanto, você pode migrar manualmente os webhooks desses serviços para novos HTTPS endpoints.
Webhooks do Github
Para migrar um Github webhook para um ponto de conexão HTTPS:
Criar um novo ponto de conexão HTTPS
Copie o código do webhook do Github existente para a função do novo endpoint
Atualize seu código para analisar o corpo da solicitação recebida em vez de usar a carga útil do Github pré-analisada.
Antes: um webhook do Github com uma carga útil pré-analisadaexports = async function(payload, response) { // Webhooks only provide the parsed request body const { commits, pusher, repository } = payload; // ... your code here } Depois: um endpoint HTTPS que analisa a carga útil do Githubexports = async function(payload, response) { // Endpoints pass an entire request payload, not just a parsed body const { commits, pusher, repository } = JSON.parse(payload.body.text()); // ... your code here }
Webhooks do Twilio
Para migrar um webhook do Twilio para um ponto de conexão HTTPS:
Criar um novo ponto de conexão HTTPS
Copie o código do webhook do Twilio existente para a função do novo endpoint
Atualize seu código para analisar o corpo da solicitação recebida em vez de usar a carga útil do Twilio pré-analisada. Se o webhook usar o cliente de serviço Twilio integrado, atualize seu código para usar a biblioteca de nós do twilio .
Antes: um webhook Twilio com uma carga útil pré-analisadaexports = async function(payload, response) { // Webhooks only provide the parsed request body const { To, From, Body } = payload; // Webhooks could use a built-in Twilio client const twilio = context.services.get("twilio") twilio.send({ To: From, From: context.values.get("TwilioPhoneNumber"), Body: `Message received!` }) } Depois: um endpoint HTTPS que analisa a carga útil do Twilioexports = async function(payload, response) { // Endpoints pass an entire request payload, not just a parsed body const { To, From, Body } = JSON.parse(payload.body.text()) // The endpoint should use `twilio` from npm instead of the built-in Twilio client const twilio = require('twilio')( // Your Account SID and Auth Token from https://www.twilio.com/console // Specify the same Twilio credentials as the service configuration context.values.get("TwilioAccountSID"), context.values.get("TwilioAuthToken"), ) await twilio.messages.create({ To: From, From: context.values.get("TwilioPhoneNumber"), Body: `Message received!` }) }
Atualizar URLs de retorno de chamada em aplicativos e serviços do cliente
Os HTTPS endpoints usam um URL diferente dos webhooks de serviço. Você deve atualizar todos os aplicativos ou serviços que chamam seus webhooks para chamar a URL de ponto de conexão HTTPS convertida. As URL de webhooks existentes continuarão aceitando solicitações e executando suas funções associadas depois que você executar a conversão. Isso significa que você pode migrar gradualmente para as novas URL sem interromper os fluxos de trabalho existentes.
Para migrar para as URL de pontos de conexão HTTPS convertidas:
Identifique todos os aplicativos e serviços do cliente que chamam de webhooks de serviço
Para cada aplicação ou serviço, modifique o código-fonte ou a configuração para usar as novas URLs.
Monitore os registros do seu aplicativo em busca de registros de webhook de serviço para procurar chamadores de webhook ativos que você perdeu.
Depois que todos os clientes estiverem atualizados com as novas URL, exclua os webhooks obsoletos da sua aplicação.
Exemplo
Para migrar a integração de um serviço de um webhook do App Services para o endpoint HTTPS convertido, modifique a configuração externa do serviço para solicitações de webhook de saída para apontar para a URL do endpoint convertido.
https://webhooks.mongodb-realm.com/api/client/v2.0/app/myapp-abcde/service/myHttpService/incoming_webhook/handleIncomingEvent
https://data.mongodb-api.com/app/myapp-abcde/endpoint/myHttpService/handleIncomingEvent
Diferenças entre webhooks e seus endpoints convertidos
Se você configurou o endpoint HTTPS convertido para usar Respond with Result e a função do webhook na qual ele se baseia retorna um valor, mas não invoca response.setBody()
, o endpoint gerado incluirá o valor de retorno da função como o corpo da resposta. O webhook, por outro lado, retorna apenas um corpo especificado por response.setBody()
.
Exemplo
exports = function({ query, headers, body}, response){ response.setStatusCode(200); return "Hello world"; };
O webhook para essa função só responde com o código de status 200
sem um corpo.
Para o endpoint, se você habilitar Respond with Result, o endpoint responderá com o código de status 200
e o corpo "Hello world"
. Se você não habilitar a opção Respond with result, o endpoint só responderá com o código de status 200
.