> ## Documentation Index
> Fetch the complete documentation index at: https://docs.devinenterprise.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Integração de API

> Devin pode integrar, configurar e testar APIs de terceiros em suas aplicações.

<div id="integrating-sendgrid-into-an-application">
  # Integrando o SendGrid a uma aplicação
</div>

Nosso aplicativo de exemplo é uma plataforma educacional on-line desenvolvida com o framework web Django em Python. Um [PR](https://github.com/uncc-hice/edukona_backend/pull/47) foi aberto recentemente para integrar a API de e-mail do SendGrid à aplicação e, neste tutorial, vamos fazer com que o Devin crie sua própria implementação do SendGrid para demonstrar como ele pode funcionar com APIs de terceiros.

<div id="initial-prompt">
  #### Prompt inicial
</div>

No nosso prompt, fornecemos algumas instruções específicas sobre como e onde queremos que o Devin integre nossos hooks do SendGrid, e pedimos para o Devin voltar para um hash de commit anterior, antes do PR acima ter sido mesclado, para nos dar um ponto de partida limpo para nossa integração. Acompanhe a sessão ao vivo do Devin [aqui](https://app.devin.ai/sessions/05d9bf38b65d4aa9a16a5c16c8b5fc5e).

<Frame>
  ![Devin](https://cdn.sanity.io/images/2mc9cv2v/production/01469dde6757a54d39579647204db2d8ad316b75-1334x536.png)
</Frame>

O Devin investiga a base de código e garante que não exista nenhuma implementação de e-mail conflitante já presente na aplicação.

<Frame>
  ![Devin](https://cdn.sanity.io/images/2mc9cv2v/production/daa91bce25d55187d9f637c3e195c65650eb9128-1256x592.png)
</Frame>

<div id="implementing-sendgrid">
  #### Implementando o SendGrid
</div>

Em seguida, ele passa a implementar a API do SendGrid e nos solicita as credenciais de API, que podemos configurar como [Secrets](/pt-BR/product-guides/secrets) no ambiente do Devin, para que ele possa acessá-las daqui em diante como variáveis de ambiente (ENV).

<Frame>
  ![Devin](https://cdn.sanity.io/images/2mc9cv2v/production/1dc4794dca5a5eec9632fa106930b4ba623449f7-1310x1622.png)
</Frame>

Agora que tem credenciais de API corretas, o Devin termina de implementar o SendGrid.

<Frame>
  ![Devin](https://cdn.sanity.io/images/2mc9cv2v/production/101faac5f7d36b18c622cef27a9f700f4a22547f-1294x1634.png)
</Frame>

Ao comparar a implementação do SendGrid feita pelo Devin com o PR efetivamente mesclado ao qual vinculamos no início, observo algumas melhorias importantes:

* O Devin configurou o SendGrid em um novo módulo email.py, em vez de no mesmo arquivo da própria view. Ele também retorna True ou False para indicar se o envio de e-mail foi bem-sucedido com base no código de resposta do SendGrid.
* O Devin usa o módulo de logging nativo do Python em vez de print (que era um padrão que o revisor do PR comentou especificamente).
* O Devin também torna o endereço de e-mail do remetente (From) configurável em vez de fixo (hardcoded), mas adiciona um valor padrão caso a variável de ambiente (ENV) não exista.
* O Devin adiciona tratamento de exceções ao seu método mailInstructor.

Com a implementação principal concluída, posso pedir ao Devin para testar a aplicação adicionando uma conta de instrutor usando meu endereço de e-mail. Para testar a aplicação, ele também precisará instalar e configurar todas as dependências, como um servidor PostgreSQL e as bibliotecas Python relevantes.

<Frame>
  ![Devin](https://cdn.sanity.io/images/2mc9cv2v/production/162781b998d454f43ffb8ff226a8f7b50568800e-1282x796.png)
</Frame>

<div id="debugging">
  #### Depuração
</div>

Devin rapidamente encontra um erro, porque eu nunca forneci um endereço FROM para minha conta SendGrid. Devin chega a usar o [Browser](/pt-BR/work-with-devin/devin-session-tools#interactive-browser) para acessar a documentação da API, descobrir o que está acontecendo e entender as mensagens de erro e as melhores práticas de implementação:

<Frame>
  ![Devin](https://cdn.sanity.io/images/2mc9cv2v/production/808fb112960206f72c6f451ad12a89c1dea709bd-1308x1062.png)
</Frame>

Posso voltar à caixa de diálogo Secrets e adicionar uma variável SENDGRID\_FROM\_EMAIL para o Devin usar.

<Frame>
  ![Devin](https://cdn.sanity.io/images/2mc9cv2v/production/7c0db2df23075a74594b00fd254f27c7745bf2a2-1520x744.png)
</Frame>

Também instruo o Devin a usar o nome de usuário padrão do SendGrid, "apikey", já que não configurei uma subconta para a API:

<Frame>
  ![Devin](https://cdn.sanity.io/images/2mc9cv2v/production/77939146f2fd5baba1ac90ecac5111e4901db2b3-1312x1394.png)
</Frame>

<div id="adding-knowledge">
  #### Adicionando Knowledge
</div>

Devin observa que minhas solicitações e requisitos de implementação podem ser generalizados e me sugere adicionar [Knowledge](/pt-BR/product-guides/knowledge#what-is-knowledge) que possa utilizar no futuro:

<Frame>
  ![Devin](https://cdn.sanity.io/images/2mc9cv2v/production/528762e066c609f5c408fcb4a55eadead2b59d0e-2522x828.png)
</Frame>

Se preferir, você também pode editar o Knowledge para adicionar ainda mais detalhes, caso essas táticas sejam úteis em sessões futuras que sua equipe planeja realizar.

<div id="testing">
  #### Testando
</div>

<Frame>
  ![Devin](https://cdn.sanity.io/images/2mc9cv2v/production/4d8fcae26a4eb91b734d53ec23e09a0aaca31f51-1346x1312.png)
</Frame>

Após alguns minutos de configuração e preparação do ambiente, Devin conclui sua sessão com sucesso e vejo o e-mail na minha caixa de entrada. Eu não cheguei a configurar o modelo do SendGrid para ter conteúdo real, mas a requisição à API funciona e, com isso, o trabalho do Devin está concluído!

<Frame>
  ![Devin](https://cdn.sanity.io/images/2mc9cv2v/production/36f648f15ccc4fc49c89ec2d9e6de8ace491ff2e-1406x882.png)
</Frame>

Se eu optar por enviar um PR, Devin já redigiu a mensagem para mim, incluindo detalhes de tudo o que foi alterado na aplicação e de como tudo funciona:

<Frame>
  ![Devin](https://cdn.sanity.io/images/2mc9cv2v/production/1a3375d78dce3cb1122332bd8566041946a73791-2206x1094.png)
</Frame>

Cadastre-se hoje mesmo para [experimentar o Devin](https://cognition.com/get-started#company) e resolver aquela integração de API que está há tempos pendente no backlog da sua equipe.
