Some checks failed
App Prod-Parity E2E Dispatch / dispatch (push) Failing after 10s
CD Storybook UI / build (push) Failing after 3m25s
CD Storybook UI / dispatch (push) Has been skipped
CD deploy main / website-changed-files (push) Successful in 18m8s
CI Agent Skills / changed-files-check (push) Successful in 18m9s
CI Create App E2E minimal / changed-files-check (push) Successful in 24s
CI Create App / changed-files-check (push) Successful in 26s
CI Docs / changed-files-check (push) Successful in 26s
CI Emails / changed-files-check (push) Successful in 28s
CI Example App Hello World / changed-files-check (push) Successful in 23s
CI Front / changed-files-check (push) Has been skipped
CI Example App Postcard / changed-files-check (push) Successful in 27s
CI UI / changed-files-check (push) Has been skipped
CI Utils Test / changed-files-check (push) Successful in 45s
CI Twenty Apps / discover (push) Successful in 1m3s
CD deploy main / deploy-main (push) Failing after 3s
CI Agent Skills / agent-skills-validate (push) Has been skipped
CI Create App / create-app-test (lint) (push) Has been skipped
CI Emails / emails-test (push) Has been skipped
CI Front / front-task (lingui:compile) (push) Has been skipped
CI Front / front-task (lint) (push) Has been skipped
CI Example App Postcard / example-app-postcard (push) Has been skipped
CI UI / ui-task (lint) (push) Has been skipped
CI UI / ui-task (pack-size) (push) Has been skipped
CI UI / ui-task (size) (push) Has been skipped
CI UI / ui-task (test) (push) Has been skipped
CI UI / ui-task (typecheck) (push) Has been skipped
CI Utils Test / utils-test (push) Has been skipped
CI Twenty Apps / ${{ matrix.app.name }} (push) Has been skipped
CI Emails / ci-emails-status-check (push) Successful in 2s
CI Example App Hello World / ci-example-app-hello-world-status-check (push) Successful in 2s
CI Example App Postcard / ci-example-app-postcard-status-check (push) Successful in 3s
CI UI / ui-sb-test (push) Has been skipped
CI Utils Test / ci-utils-test-status-check (push) Successful in 2s
CI Twenty Apps / ci-twenty-apps-status-check (push) Successful in 2s
CI UI / ci-ui-status-check (push) Successful in 2s
CI Desktop / desktop (push) Failing after 1m8s
Push docs to Crowdin / Push documentation to Crowdin (push) Failing after 55s
Push translations to Crowdin / Extract and upload translations (push) Failing after 5s
Push website translations to Crowdin / Extract and upload website translations (push) Failing after 5s
CI Create App / create-app-test (test) (push) Has been skipped
CI Create App / create-app-test (typecheck) (push) Has been skipped
CI Docs / docs-lint (push) Has been skipped
CI Example App Hello World / example-app-hello-world (push) Has been skipped
CI Front / front-task (lingui:extract) (push) Has been skipped
CI Front / front-task (test) (push) Has been skipped
CI Front / front-task (typecheck) (push) Has been skipped
CI UI / ui-sb-build (push) Failing after 1m32s
CI Twenty Apps / ${{ matrix.app.name }} (${{ matrix.server-source }}) (push) Has been skipped
CI Agent Skills / agent-skills-publish (push) Has been skipped
CI Create App / ci-create-app-status-check (push) Successful in 2s
CI Agent Skills / agent-skills-remote-source (push) Has been skipped
CI Create App E2E minimal / create-app-e2e-minimal (push) Has been cancelled
CI E2E Main / e2e-test (push) Has been cancelled
CI Front / front-sb-build (push) Has been cancelled
CI Front / front-build (push) Has been cancelled
CI Create App E2E minimal / ci-create-app-e2e-minimal-status-check (push) Has been cancelled
CI E2E Main / ci-e2e-main-status-check (push) Has been cancelled
CI E2E Main / notify-main-ci-failure (push) Has been cancelled
CI E2E Main / qa-scout-comment (push) Has been cancelled
CI Front / front-sb-test (push) Has been cancelled
CI Front / front-sb-screenshots (push) Has been cancelled
CI Front / ci-front-status-check (push) Has been cancelled
DPA Sub-Processor Sync / sync-subprocessors (push) Failing after 3s
AI Catalog Sync / sync-catalog (push) Failing after 2s
177 lines
7.9 KiB
Plaintext
177 lines
7.9 KiB
Plaintext
---
|
||
title: Daten über die API importieren
|
||
description: Wann und wie Sie die APIs von Twenty für groß angelegte Datenimporte verwenden.
|
||
---
|
||
|
||
## Übersicht
|
||
|
||
Twenty stellt sowohl **GraphQL**- als auch **REST-APIs** für den programmatischen Datenimport bereit. Verwenden Sie die API, wenn der CSV-Import für Ihr Datenvolumen nicht praktikabel ist oder wenn Sie automatisierte, wiederkehrende Importe benötigen.
|
||
|
||
## Wann Sie den API-Import verwenden sollten
|
||
|
||
| Szenario | Empfohlene Methode |
|
||
| ------------------------------------ | --------------------------------- |
|
||
| Unter 10.000 Datensätzen | CSV-Import |
|
||
| 10.000–50.000 Datensätze | CSV-Import (in Dateien aufteilen) |
|
||
| **Über 50.000 Datensätze** | **API-Import** |
|
||
| Einmalige Migration | Beides (je nach Volumen) |
|
||
| **Wiederkehrende Importe** | **API-Import** |
|
||
| **Echtzeitsynchronisierung** | **API-Import** |
|
||
| **Integration mit anderen Systemen** | **API-Import** |
|
||
|
||
<Note>Für Datensätze im Bereich von Hunderttausenden ist die API deutlich schneller und zuverlässiger als mehrere CSV-Importe.</Note>
|
||
|
||
## API-Rate-Limits
|
||
|
||
Twenty setzt Rate-Limits durch, um die Systemstabilität zu gewährleisten:
|
||
|
||
| Limit | Wert |
|
||
| ------------------------------- | ------------------------ |
|
||
| **Anfragen pro Minute** | 100 |
|
||
| **Datensätze pro Batch-Aufruf** | 60 |
|
||
| **Maximaler Durchsatz** | ~6.000 Datensätze/Minute |
|
||
|
||
<Warning>
|
||
**Planen Sie Ihren Import unter Berücksichtigung dieser Limits.**
|
||
|
||
Für 100.000 Datensätze bei maximalem Durchsatz rechnen Sie mit etwa 17 Minuten Importzeit. Fügen Sie Pufferzeit für Fehlerbehandlung und Wiederholungen hinzu.
|
||
</Warning>
|
||
|
||
## Erste Schritte
|
||
|
||
### Schritt 1: API-Schlüssel abrufen
|
||
|
||
1. Gehen Sie zu **Einstellungen → Entwickler**
|
||
2. Klicken Sie auf **+ API-Schlüssel erstellen**
|
||
3. Geben Sie Ihrem API-Schlüssel einen aussagekräftigen Namen
|
||
4. Kopieren Sie den API-Schlüssel sofort (er wird nicht erneut angezeigt)
|
||
5. Bewahren Sie ihn sicher auf
|
||
|
||
<Warning>
|
||
**Halten Sie Ihren API-Schlüssel geheim.**
|
||
|
||
Jeder, der Ihren API-Schlüssel besitzt, kann auf die Daten Ihres Arbeitsbereichs zugreifen und sie ändern. Checken Sie ihn niemals in Code-Repositories ein und geben Sie ihn nicht öffentlich weiter.
|
||
</Warning>
|
||
|
||
### Schritt 2: Wählen Sie Ihre API
|
||
|
||
Twenty unterstützt zwei API-Typen:
|
||
|
||
| API | Am besten geeignet für | Dokumentation |
|
||
| ----------- | ---------------------------------------------------------------- | ------------------------------------------- |
|
||
| **GraphQL** | Flexible Abfragen, Abruf verknüpfter Daten, komplexe Operationen | [API-Dokumentation](/l/de/developers/extend/api) |
|
||
| **REST** | Einfache CRUD-Operationen, vertraute REST-Muster | [API-Dokumentation](/l/de/developers/extend/api) |
|
||
|
||
Beide APIs unterstützen:
|
||
|
||
* Erstellen, Lesen, Aktualisieren und Löschen von Datensätzen
|
||
* **Batch-Operationen** — bis zu 60 Datensätze pro Aufruf erstellen oder aktualisieren
|
||
|
||
**Verwenden Sie für Importe Batch-Operationen**, um den Durchsatz innerhalb der Rate-Limits zu maximieren.
|
||
|
||
### Schritt 3: Importreihenfolge planen
|
||
|
||
Wie bei CSV-Importen ist die **Reihenfolge bei Relationen wichtig**:
|
||
|
||
1. Zuerst **Unternehmen** (keine Abhängigkeiten)
|
||
2. **Personen** an zweiter Stelle (können mit Unternehmen verknüpft werden)
|
||
3. **Opportunities** an dritter Stelle (können mit Unternehmen und Personen verknüpft werden)
|
||
4. **Aufgaben/Notizen** (können mit allen oben genannten verknüpft werden)
|
||
5. **Benutzerdefinierte Objekte** (gemäß ihren Abhängigkeiten)
|
||
|
||
## Beste Praktiken
|
||
|
||
### Anfragen bündeln
|
||
|
||
* Senden Sie Datensätze nicht einzeln
|
||
* Fassen Sie bis zu **60 Datensätze pro API-Aufruf** zusammen
|
||
* Dies maximiert den Durchsatz innerhalb der Rate-Limits
|
||
|
||
### Mit Rate-Limits umgehen
|
||
|
||
* Implementieren Sie Verzögerungen zwischen den Anfragen (mindestens 600 ms für dauerhafte Importe)
|
||
* Verwenden Sie exponentielles Backoff, wenn Sie an Grenzen stoßen
|
||
* Überwachen Sie 429-Antworten (Too Many Requests)
|
||
|
||
### Daten zuerst validieren
|
||
|
||
* Bereinigen und validieren Sie Ihre Daten vor dem Import
|
||
* Prüfen Sie, ob Pflichtfelder ausgefüllt sind
|
||
* Überprüfen Sie, ob die Formate den Anforderungen von Twenty entsprechen (siehe [Feldzuordnung](/l/de/user-guide/data-migration/capabilities/field-mapping))
|
||
|
||
### Alles protokollieren
|
||
|
||
* Protokollieren Sie jeden importierten Datensatz (einschließlich IDs)
|
||
* Protokollieren Sie Fehler mit vollem Kontext
|
||
* Dies hilft bei der Fehleranalyse und der Überprüfung des Abschlusses
|
||
|
||
### Zuerst testen
|
||
|
||
* Testen Sie mit einer kleinen Stichprobe (10–20 Datensätze)
|
||
* Überprüfen Sie, ob die Daten in Twenty korrekt angezeigt werden
|
||
* Führen Sie anschließend den vollständigen Import aus
|
||
|
||
### Upsert verwenden, um Duplikate zu vermeiden
|
||
|
||
Die GraphQL-API unterstützt **Batch-Upsert** — aktualisieren, wenn der Datensatz existiert, ansonsten erstellen. Dies verhindert Duplikate beim erneuten Ausführen von Importen.
|
||
|
||
## Objekt- und Feldnamen finden
|
||
|
||
So sehen Sie verfügbare Objekte und Felder:
|
||
|
||
1. Gehen Sie zu **Einstellungen → API und Webhooks**
|
||
2. Durchsuchen Sie die **Metadaten-API**
|
||
3. Sehen Sie alle Standard- und benutzerdefinierten Objekte mit ihren Feldern
|
||
|
||
Die Dokumentation zeigt alle Standard- und benutzerdefinierten Objekte, deren Felder und die erwarteten Datentypen.
|
||
|
||
## Professionelle Dienstleistungen
|
||
|
||
Bei komplexen API-Migrationen können unsere Partner helfen:
|
||
|
||
| Dienst | Enthalten |
|
||
| ------------------------------------ | ------------------------------------------------- |
|
||
| **Datenmodell-Design** | Entwerfen Sie Ihre optimale Datenstruktur |
|
||
| **Migrationsskripte** | Schreiben und Ausführen der Importskripte |
|
||
| **Daten-Transformation** | Bearbeitung komplexer Zuordnungen und Bereinigung |
|
||
| **Validierung & Qualitätssicherung** | Überprüfen, dass die Migration abgeschlossen ist |
|
||
|
||
**Am besten geeignet für:**
|
||
|
||
* Migrationen mit über 100.000 Datensätzen
|
||
* Komplexe Daten-Transformationen
|
||
* Straffe Zeitpläne
|
||
* Teams ohne Entwicklerressourcen
|
||
|
||
Kontaktieren Sie uns unter [contact@twenty.com](mailto:contact@twenty.com) oder informieren Sie sich über unsere [Implementierungsservices](/l/de/user-guide/getting-started/capabilities/implementation-services).
|
||
|
||
## FAQ
|
||
|
||
<AccordionGroup>
|
||
<Accordion title="Was ist der Unterschied zwischen GraphQL und REST?">
|
||
Mit GraphQL können Sie in einer einzelnen Abfrage genau die Daten anfordern, die Sie benötigen, und es eignet sich besser für komplexe Operationen. REST verwendet standardmäßige HTTP-Methoden (GET, POST, PUT, DELETE) und ist möglicherweise vertrauter, wenn Sie mit herkömmlichen APIs gearbeitet haben.
|
||
</Accordion>
|
||
|
||
<Accordion title="Kann ich vorhandene Datensätze über die API aktualisieren?">
|
||
Ja! Verwenden Sie Update-Mutationen (GraphQL) oder PUT/PATCH-Anfragen (REST) mit der `id` des Datensatzes.
|
||
</Accordion>
|
||
|
||
<Accordion title="Wie gehe ich mit Duplikaten um?">
|
||
Fragen Sie zunächst nach vorhandenen Datensätzen mit eindeutigen Kennungen (E-Mail, Domain). Aktualisieren, wenn vorhanden; erstellen, wenn nicht.
|
||
</Accordion>
|
||
|
||
<Accordion title="Kann ich Datensätze über die API löschen?">
|
||
Ja, verwenden Sie Lösch-Mutationen (GraphQL) oder DELETE-Anfragen (REST).
|
||
</Accordion>
|
||
|
||
<Accordion title="Gibt es ein SDK für Python oder Node.js?">
|
||
Derzeit nicht, aber beide APIs funktionieren mit jedem HTTP-Client in jeder Sprache.
|
||
</Accordion>
|
||
</AccordionGroup>
|
||
|
||
## API-Dokumentation
|
||
|
||
Für vollständige Implementierungsdetails, Codebeispiele und Schema-Referenz:
|
||
|
||
* [API-Dokumentation](/l/de/developers/extend/api)
|