> ## 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.

# API-Integration

> Devin kann Drittanbieter-APIs in Ihren Anwendungen integrieren, konfigurieren und testen.

<div id="integrating-sendgrid-into-an-application">
  # SendGrid in eine Anwendung integrieren
</div>

Unsere Beispielanwendung ist eine Online-Lernplattform, die mit dem Python-Webframework Django entwickelt wurde. Kürzlich wurde ein [PR](https://github.com/uncc-hice/edukona_backend/pull/47) eröffnet, um die SendGrid-E-Mail-API in die Anwendung zu integrieren. In diesem Tutorial werden wir Devin eine eigene SendGrid-Implementierung ausprobieren lassen, um zu demonstrieren, wie es mit Drittanbieter-APIs zusammenarbeiten kann.

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

In unserem Prompt geben wir einige konkrete Anweisungen dazu, wie und wo Devin unsere SendGrid-Hooks integrieren soll, und wir lassen Devin zu einem früheren Commit-Hash zurückkehren, bevor der oben genannte PR gemergt wurde, um einen sauberen Ausgangspunkt für unsere Integration zu erhalten. Folge der Live-Devin-Session [hier](https://app.devin.ai/sessions/05d9bf38b65d4aa9a16a5c16c8b5fc5e).

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

Devin untersucht die Codebasis und stellt sicher, dass es keine kollidierende E-Mail-Implementierung gibt, die bereits in der Anwendung vorhanden ist.

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

<div id="implementing-sendgrid">
  #### Implementierung von SendGrid
</div>

Anschließend fährt Devin mit der Implementierung der SendGrid-API fort und fordert uns zur Eingabe unserer API-Zugangsdaten auf, die wir als [Secrets](/de/product-guides/secrets) in Devins Umgebung einrichten können, sodass es künftig als ENV-Variablen darauf zugreifen kann.

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

Jetzt, da es über die richtigen API-Zugangsdaten verfügt, schließt Devin die Implementierung von SendGrid ab.

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

Wenn ich Devins SendGrid-Implementierung mit dem tatsächlich gemergten PR vergleiche, den wir am Anfang verlinkt haben, fallen mir einige bemerkenswerte Verbesserungen auf:

* Devin hat SendGrid in einem neuen Modul `email.py` konfiguriert, anstatt in derselben Datei wie die View selbst. Außerdem gibt es `True` oder `False` zurück, um anhand des SendGrid-Response-Codes anzuzeigen, ob das Versenden der E-Mail erfolgreich war.
* Devin verwendet Pythons integriertes `logging`-Modul anstelle von `print` (was ein Muster war, zu dem der PR-Reviewer ausdrücklich Feedback gegeben hatte).
* Devin macht außerdem die From-E-Mail-Adresse konfigurierbar, anstatt sie fest im Code zu hinterlegen, fügt aber einen Standardwert hinzu, falls die ENV-Variable nicht existiert.
* Devin fügt seiner `mailInstructor`-Methode Exception-Handling hinzu.

Nachdem die Kernimplementierung abgeschlossen ist, kann ich Devin bitten, die Anwendung zu testen, indem es ein Instructor-Konto unter meiner E-Mail-Adresse hinzufügt. Um die Anwendung zu testen, muss es außerdem alle Abhängigkeiten wie einen PostgreSQL-Server und die relevanten Python-Bibliotheken installieren und konfigurieren.

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

<div id="debugging">
  #### Debugging
</div>

Devin stößt schnell auf einen Fehler, weil ich ihm nie eine FROM-Adresse für mein SendGrid-Konto angegeben habe. Devin verwendet seinen [Browser](/de/work-with-devin/devin-session-tools#interactive-browser), um zu den API-Dokumenten zu navigieren, herauszufinden, was hier vor sich geht, und die Fehlermeldungen sowie Best Practices für die Implementierung zu verstehen:

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

Ich kann zum Secrets-Dialog zurückkehren und eine SENDGRID\_FROM\_EMAIL-Variable hinzufügen, auf die Devin zugreifen kann.

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

Außerdem weise ich Devin an, den Standard-SendGrid-Benutzernamen „apikey“ zu verwenden, da ich kein Unterkonto für die API eingerichtet habe:

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

<div id="adding-knowledge">
  #### Knowledge hinzufügen
</div>

Devin stellt fest, dass meine Anfragen und Implementierungsanforderungen allgemeingültig sein könnten, und fordert mich auf, [Knowledge](/de/product-guides/knowledge#what-is-knowledge) hinzuzufügen, das es in Zukunft nutzen kann:

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

Wenn Sie möchten, können Sie das Knowledge außerdem bearbeiten und weitere Details ergänzen, wenn diese Taktiken in zukünftigen Sessions Ihres Teams nützlich sein könnten.

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

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

Nach ein paar Minuten für Konfiguration und Einrichtung der Umgebung beendet Devin seine erfolgreiche Session und ich sehe die E-Mail in meinem Posteingang. Ich habe die SendGrid-Vorlage nicht mit echtem Inhalt befüllt, aber die API-Anfrage funktioniert – und damit ist Devins Arbeit erledigt!

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

Wenn ich mich entscheide, einen PR zu erstellen, hat Devin die Nachricht bereits für mich vorbereitet – inklusive Details zu allen Änderungen in der Anwendung und dazu, wie sie funktionieren:

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

Melde dich noch heute an, um [Devin auszuprobieren](https://cognition.com/get-started#company) und eine API-Integration anzugehen, die eurem Team schon lange auf den Nägeln brennt.
