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.3 KiB
Plaintext
177 lines
7.3 KiB
Plaintext
---
|
||
title: Import dat přes API
|
||
description: Kdy a jak používat API Twenty pro hromadné importy dat.
|
||
---
|
||
|
||
## Přehled
|
||
|
||
Twenty poskytuje pro programový import dat jak **GraphQL**, tak **REST API**. API použijte, když import CSV není vzhledem k objemu vašich dat praktický, nebo když potřebujete automatizované, opakované importy.
|
||
|
||
## Kdy použít import přes API
|
||
|
||
| Scénář | Doporučená metoda |
|
||
| -------------------------------- | --------------------------------- |
|
||
| Méně než 10 000 záznamů | Import CSV |
|
||
| 10 000–50 000 záznamů | Import CSV (rozdělený do souborů) |
|
||
| **50 000+ záznamů** | **Import přes API** |
|
||
| Jednorázová migrace | Obojí (dle objemu) |
|
||
| **Pravidelné importy** | **Import přes API** |
|
||
| **Synchronizace v reálném čase** | **Import přes API** |
|
||
| **Integrace s jinými systémy** | **Import přes API** |
|
||
|
||
<Note>Pro datové sady o stovkách tisíc záznamů je API výrazně rychlejší a spolehlivější než více importů CSV.</Note>
|
||
|
||
## Limity rychlosti API
|
||
|
||
Twenty uplatňuje limity rychlosti, aby zajistilo stabilitu systému:
|
||
|
||
| Limit | Hodnota |
|
||
| ----------------------------------- | ------------------------ |
|
||
| **Požadavků za minutu** | 100 |
|
||
| **Záznamů na jedno dávkové volání** | 60 |
|
||
| **Maximální propustnost** | ~6 000 záznamů za minutu |
|
||
|
||
<Warning>
|
||
**Naplánujte import s ohledem na tyto limity.**
|
||
|
||
Pro 100 000 záznamů při maximální propustnosti počítejte s přibližně 17 minutami importu. Přidejte rezervu na zpracování chyb a opakování.
|
||
</Warning>
|
||
|
||
## Začínáme
|
||
|
||
### Krok 1: Získejte svůj klíč API
|
||
|
||
1. Přejděte do **Nastavení → Vývojáři**
|
||
2. Klikněte na **+ Vytvořit klíč API**
|
||
3. Dejte svému klíči API výstižný název
|
||
4. Klíč API si ihned zkopírujte (znovu se již nezobrazí)
|
||
5. Uložte ho bezpečně
|
||
|
||
<Warning>
|
||
**Chraňte svůj klíč API v tajnosti.**
|
||
|
||
Kdokoli s vaším klíčem API může přistupovat k datům vašeho pracovního prostoru a upravovat je. Nikdy ho neukládejte do repozitářů kódu ani jej veřejně nesdílejte.
|
||
</Warning>
|
||
|
||
### Krok 2: Vyberte si API
|
||
|
||
Twenty podporuje dva typy API:
|
||
|
||
| API | Vhodné pro | Dokumentace |
|
||
| ----------- | ----------------------------------------------------------------- | ----------------------------------------- |
|
||
| **GraphQL** | Flexibilní dotazy, získávání souvisejících dat, komplexní operace | [Dokumentace API](/l/cs/developers/extend/api) |
|
||
| **REST** | Jednoduché CRUD operace, známé postupy REST | [Dokumentace API](/l/cs/developers/extend/api) |
|
||
|
||
Obě API podporují:
|
||
|
||
* Vytváření, čtení, aktualizace a mazání záznamů
|
||
* **Dávkové operace** — vytvoření nebo aktualizace až 60 záznamů na jedno volání
|
||
|
||
**Pro importy používejte dávkové operace**, abyste maximalizovali propustnost v rámci limitů rychlosti.
|
||
|
||
### Krok 3: Naplánujte pořadí importu
|
||
|
||
Stejně jako u importů CSV na **pořadí záleží** kvůli vazbám:
|
||
|
||
1. **Společnosti** jako první (bez závislostí)
|
||
2. **Lidé** jako druzí (mohou se propojit se společnostmi)
|
||
3. **Příležitosti** jako třetí (mohou se propojit se společnostmi a lidmi)
|
||
4. **Úkoly/Poznámky** (mohou se propojit s kteroukoli z výše uvedených entit)
|
||
5. **Vlastní objekty** (podle jejich závislostí)
|
||
|
||
## Osvědčené postupy
|
||
|
||
### Dávkujte své požadavky
|
||
|
||
* Neposílejte záznamy po jednom
|
||
* Seskupte až **60 záznamů na jedno volání API**
|
||
* Tím maximalizujete propustnost v rámci limitů rychlosti
|
||
|
||
### Práce s limity rychlosti
|
||
|
||
* Zaveďte prodlevy mezi požadavky (minimálně 600 ms pro dlouhodobé importy)
|
||
* Při dosažení limitů použijte exponenciální backoff
|
||
* Sledujte odpovědi 429 (Too Many Requests)
|
||
|
||
### Nejprve ověřte data
|
||
|
||
* Před importem data vyčistěte a ověřte
|
||
* Zkontrolujte, že jsou vyplněna povinná pole
|
||
* Ověřte, že formáty odpovídají požadavkům Twenty (viz [Mapování polí](/l/cs/user-guide/data-migration/capabilities/field-mapping))
|
||
|
||
### Zaznamenávejte vše
|
||
|
||
* Zaznamenávejte každý importovaný záznam (včetně ID)
|
||
* Zaznamenávejte chyby s plným kontextem
|
||
* To pomáhá při ladění problémů a ověření dokončení
|
||
|
||
### Nejprve testujte
|
||
|
||
* Testujte s malou dávkou (10–20 záznamů)
|
||
* Ověřte, že se data v Twenty zobrazují správně
|
||
* Poté spusťte celý import
|
||
|
||
### Upsert pro zamezení duplicit
|
||
|
||
GraphQL API podporuje **dávkový upsert** — pokud záznam existuje, aktualizuje; pokud ne, vytvoří. To zabrání duplicitám při opakovaném spouštění importů.
|
||
|
||
## Hledání názvů objektů a polí
|
||
|
||
Chcete-li zobrazit dostupné objekty a pole:
|
||
|
||
1. Přejděte do **Nastavení → API a webhooky**
|
||
2. Procházejte **Metadata API**
|
||
3. Zobrazte všechny standardní i vlastní objekty s jejich poli
|
||
|
||
Dokumentace uvádí všechny standardní i vlastní objekty, jejich pole a očekávané datové typy.
|
||
|
||
## Profesionální služby
|
||
|
||
S náročnými migracemi přes API mohou pomoci naši partneři:
|
||
|
||
| Služba | Co je součástí |
|
||
| ------------------------- | ------------------------------------- |
|
||
| **Návrh datového modelu** | navrhnout optimální datovou strukturu |
|
||
| **Migrační skripty** | napsat a spustit importní skripty |
|
||
| **Transformace dat** | zpracovat složité mapování a čištění |
|
||
| **Validace a QA** | ověřit, že je migrace dokončená |
|
||
|
||
**Vhodné pro:**
|
||
|
||
* Migrace 100 000+ záznamů
|
||
* Složité transformace dat
|
||
* Napjaté časové plány
|
||
* Týmy bez vývojářských kapacit
|
||
|
||
Kontaktujte nás na [contact@twenty.com](mailto:contact@twenty.com) nebo prozkoumejte naše [Implementační služby](/l/cs/user-guide/getting-started/capabilities/implementation-services).
|
||
|
||
## Časté dotazy
|
||
|
||
<AccordionGroup>
|
||
<Accordion title="Jaký je rozdíl mezi GraphQL a REST?">
|
||
GraphQL vám umožní vyžádat si v jediném dotazu přesně ta data, která potřebujete, a je vhodnější pro složité operace. REST používá standardní metody HTTP (GET, POST, PUT, DELETE) a může vám být bližší, pokud jste pracovali s tradičními API.
|
||
</Accordion>
|
||
|
||
<Accordion title="Mohu aktualizovat existující záznamy přes API?">
|
||
Ano! Použijte aktualizační mutace (GraphQL) nebo požadavky PUT/PATCH (REST) s `id` záznamu.
|
||
</Accordion>
|
||
|
||
<Accordion title="Jak mám řešit duplicity?">
|
||
Nejprve vyhledejte existující záznamy pomocí jedinečných identifikátorů (e-mail, doména). Pokud existuje, aktualizujte; pokud ne, vytvořte.
|
||
</Accordion>
|
||
|
||
<Accordion title="Mohu mazat záznamy přes API?">
|
||
Ano, použijte mutace pro smazání (GraphQL) nebo požadavky DELETE (REST).
|
||
</Accordion>
|
||
|
||
<Accordion title="Existuje SDK pro Python nebo Node.js?">
|
||
V současnosti ne, ale obě API fungují s jakýmkoli klientem HTTP v libovolném jazyce.
|
||
</Accordion>
|
||
</AccordionGroup>
|
||
|
||
## Dokumentace API
|
||
|
||
Úplné podrobnosti implementace, ukázky kódu a referenci schématu najdete zde:
|
||
|
||
* [Dokumentace API](/l/cs/developers/extend/api)
|