Datenkonnektor#
Der Datenkonnektor befüllt eine NAMES LEGAL-Website mit Daten, die bereits anderswo existieren, ohne Code auf Seiten des Website-Inhabers. Der Inhaber verbindet eine Quelle in seiner Konsole (Integrationen → Meine Daten importieren), verknüpft Spalten per Drag-and-drop mit Feldern, führt einen Probelauf durch und startet. Quellen können Dateien oder eine API sein – Ihre.
Diese Seite richtet sich an Entwickler von Anwendungen, die als Quelle fungieren möchten: was NAMES LEGAL von Ihrer API erwartet und wie Sie die Verbindung automatisch gestalten.
Wie der Konnektor Ihre API liest#
Der Website-Inhaber gibt ein:
- die Adresse Ihrer API,
- einen Authentifizierungsmodus und dessen Geheimnis,
- optional, wo sich die Liste in Ihrer Antwort befindet (
data.items).
NAMES LEGAL ruft daraufhin Ihre API über HTTPS mit GET auf, folgt der Paginierung und wandelt jedes Objekt in eine Zeile um. Verschachtelte Objekte werden abgeflacht (author.name), Listen einfacher Werte werden durch Kommas verbunden.
Authentifizierung#
| Modus | Was gesendet wird |
|---|---|
| Keiner | nichts |
| Schlüssel im Header | <Header-Name>: <key> (Standard X-API-Key) |
| Schlüssel in der Adresse | ?<param>=<key> (Standard api_key) |
| Bearer-Token | Authorization: Bearer <token> |
| Benutzername und Passwort | Authorization: Basic … |
Geheimnisse werden verschlüsselt gespeichert und in der Konsole nie wieder angezeigt. Geben Sie Website-Inhabern einen schreibgeschützten Schlüssel, der auf veröffentlichte Inhalte beschränkt ist: Der Konnektor liest nur.
Die Liste finden#
Wenn kein Pfad angegeben ist, nimmt der Konnektor in dieser Reihenfolge: das Array items, dann das erste in der Antwort gefundene Array von Objekten. Ein reines JSON-Array funktioniert ebenfalls.
Paginierung#
Jedes der folgenden wird automatisch verfolgt, bis zu 200 Seiten:
- ein HTTP-
Link: <…>; rel="next"-Header; - eine URL zur nächsten Seite im Body:
next,next_url,next_page_url,links.next,meta.next,pagination.next; - ein Cursor im Body:
next_cursor,meta.next_cursor,pagination.next_cursor— wird als?cursor=zurückgesendet.
Stoppen Sie, indem Sie eine leere Liste oder keinen Next-Link zurückgeben.
Grenzwerte#
- 5.000 Zeilen pro Datensatz und Synchronisierung.
- 10 MB pro Antwort, 15 Sekunden pro Anfrage.
- Adressen müssen öffentlich sein: private und lokale Netzwerkadressen werden abgelehnt, Weiterleitungen eingeschlossen. Bei einer Weiterleitung auf einen anderen Host wird Ihr Schlüssel nicht weitergegeben.
Das NAMES LEGAL-Feed-Format#
Stellen Sie Ihre Daten in diesem Format bereit, und der Website-Inhaber hat nichts zu verknüpfen: Jede Sammlung wird zu einem Datensatz, der bereits mit dem passenden Bereich der Website verbunden ist.
1. Ein Index#
GET https://app.example.com/api/names-legal/
{
"names_legal_feed": 1,
"collections": {
"team": "https://app.example.com/api/names-legal/team/",
"services": "https://app.example.com/api/names-legal/programmes/",
"blog": "https://app.example.com/api/names-legal/news/"
}
}
Sammlungsnamen sind die Bereichsschlüssel, die in der Feldreferenz unten aufgeführt sind (team, services, blog, events, faq, jobs…). URLs können relativ zum Index sein.
2. Eine Liste pro Sammlung#
{
"items": [
{
"id": "T-104",
"first_name": "Awa",
"last_name": "Diop",
"position": "Mathematics teacher",
"short_bio": "Twelve years of teaching.",
"profile_image": "https://app.example.com/media/staff/104.jpg",
"email": "a.diop@example.com"
}
],
"next": null
}
Regeln:
id— eine stabile Kennung, die in jeder Zeile unterschiedlich ist. Sie sorgt dafür, dass eine bearbeitete Zeile denselben Eintrag aktualisiert, statt einen neuen zu erstellen.- Feldnamen entsprechen denen der Feldreferenz.
- Übersetzte Felder haben einen Schlüssel pro Sprache:
title_fr,title_en,description_de… Ein Schlüssel ohne Suffix geht an die Standardsprache der Website. - Bilder und Dateien sind öffentliche URLs. Sie werden einmal heruntergeladen und nur erneut heruntergeladen, wenn sich die URL ändert. Freigabelinks von Google Drive und Dropbox werden akzeptiert.
- Kategorien werden mit Namen angegeben (
"category": "Bachelor"); fehlende Kategorien werden erstellt. - Daten sind im Format ISO 8601. Boolesche Werte sind
true/false. - Rich-Text-Felder akzeptieren HTML; es wird bereinigt (keine Skripte, keine Event-Handler). Klartext wird zu Absätzen.
- Geben Sie nur zurück, was veröffentlicht werden darf: Entwürfe und private Daten sollten nicht im Feed erscheinen.
Die Website aktuell halten#
Der Website-Inhaber wählt pro Bereich:
| Option | Wirkung |
|---|---|
| Stündlich / täglich | NAMES LEGAL liest Ihre API nach Zeitplan. |
| Nur auf Anfrage | Eine Schaltfläche in der Konsole. |
| Webhook | Sie rufen die Webhook-Adresse der Website nach jeder Änderung auf: Synchronisierung innerhalb einer Minute. Siehe Webhooks. |
Sie wählen außerdem, was passiert, wenn sich ein Eintrag auf beiden Seiten geändert hat (Ihre Daten gewinnen, die Website gewinnt, oder nachfragen), und wenn eine Zeile aus Ihrem Feed verschwindet (auf der Website löschen, ausblenden oder behalten). Eine Synchronisierung, die einen großen Teil eines Bereichs entfernen würde, stoppt und fragt zunächst um Bestätigung.
Das Zurückschreiben in Ihre Anwendung ("meine Website → meine Quelle") ist noch nicht verfügbar: Der Konnektor liest nur.
Feldreferenz#
Wird von der Plattform selbst generiert; sie ist stets aktuell. Erforderliche Felder müssen in jeder Zeile vorhanden sein (bei einem übersetzten Feld in mindestens einer Sprache).
Team team
| Feld | Feldtyp | Pflichtfeld | Eines pro Sprache |
|---|---|---|---|
first_nameVorname |
text ≤ 100 | ✓ | |
last_nameNachname |
text ≤ 100 | ✓ | |
positionPosition |
text ≤ 150 | ✓ | |
short_bioKurzbiografie |
longtext ≤ 300 | ||
bioBio |
html | ||
profile_imageProfilbild |
image ≤ 100 | ||
email |
email ≤ 254 | ||
phoneTelefon |
text ≤ 20 | ||
linkedin |
url ≤ 200 | ||
websitePersönliche website |
url ≤ 200 | ||
specialtiesSpezialgebiete |
text ≤ 200 | ||
educationAusbildung |
text ≤ 200 | ||
locationStandort |
text ≤ 100 | ||
years_experienceJahre erfahrung |
int | ||
orderReihenfolge |
int |
Dienstleistungen services
| Feld | Feldtyp | Pflichtfeld | Eines pro Sprache |
|---|---|---|---|
titleTitel |
text ≤ 100 | ✓ | title_fr, title_en… |
descriptionBeschreibung |
longtext | ✓ | description_fr, description_en… |
iconSymbol |
text ≤ 50 | ||
categoryKategorie |
category | ||
is_featuredHervorgehobene dienstleistung |
bool | ||
orderReihenfolge |
int |
Projekte projects
| Feld | Feldtyp | Pflichtfeld | Eines pro Sprache |
|---|---|---|---|
titleTitel |
text ≤ 150 | ✓ | title_fr, title_en… |
descriptionKurzbeschreibung |
longtext | ✓ | description_fr, description_en… |
detailed_descriptionDetaillierte beschreibung |
html | detailed_description_fr, detailed_description_en… |
|
categoryKategorie |
category | ✓ | |
imageHervorgehobenes bild |
image ≤ 100 | ||
clientKunde |
text ≤ 100 | client_fr, client_en… |
|
project_dateProjektdatum |
text ≤ 20 | ||
durationDauer |
text ≤ 50 | duration_fr, duration_en… |
|
project_urlLive-url des projekts |
url ≤ 200 | ||
technologiesTechnologien |
text ≤ 200 | technologies_fr, technologies_en… |
|
tagsTags |
text ≤ 200 | tags_fr, tags_en… |
|
statusStatus |
choice ≤ 20completed, in_progress, on_hold, planning |
||
is_featuredHervorgehobenes projekt |
bool | ||
orderReihenfolge |
int |
Blog / Neuigkeiten blog
| Feld | Feldtyp | Pflichtfeld | Eines pro Sprache |
|---|---|---|---|
titleTitel |
text ≤ 200 | ✓ | title_fr, title_en… |
excerptAuszug |
longtext ≤ 500 | ✓ | excerpt_fr, excerpt_en… |
contentInhalt |
html | ✓ | content_fr, content_en… |
categoryKategorie |
category | ✓ | |
featured_imageHervorgehobenes bild |
image ≤ 100 | ||
published_dateVeröffentlichtes datum |
datetime | ||
statusStatus |
choice ≤ 20draft, published, featured |
||
orderReihenfolge |
int |
Veranstaltungen events
| Feld | Feldtyp | Pflichtfeld | Eines pro Sprache |
|---|---|---|---|
titleTitel |
text ≤ 200 | ✓ | title_fr, title_en… |
descriptionBeschreibung |
html | ✓ | description_fr, description_en… |
start_dateStartdatum |
datetime | ✓ | |
end_dateEnddatum |
datetime | ✓ | |
locationStandort |
text ≤ 200 | ✓ | location_fr, location_en… |
is_onlineIst online |
bool | ||
event_typeVeranstaltungstyp |
choice ≤ 20conference, workshop, webinar, seminar, training, meeting |
||
registration_urlRegistrierungs -url |
url ≤ 200 | ||
meeting_urlUrl treffen |
url ≤ 200 | ||
featured_imageHervorgehobenes bild |
image ≤ 100 | ||
is_featuredHervorgehoben |
bool | ||
orderReihenfolge |
int |
FAQ faq
| Feld | Feldtyp | Pflichtfeld | Eines pro Sprache |
|---|---|---|---|
questionFrage |
text ≤ 300 | ✓ | question_fr, question_en… |
answerAntwort |
html | ✓ | answer_fr, answer_en… |
categoryKategorie |
category | ||
is_featuredHervorgehoben |
bool | ||
orderReihenfolge |
int |
Stellenangebote jobs
| Feld | Feldtyp | Pflichtfeld | Eines pro Sprache |
|---|---|---|---|
titleBerufsbezeichnung |
text ≤ 200 | ✓ | |
categoryKategorie |
category | ✓ | |
descriptionStellenbeschreibung |
html | ✓ | |
requirementsAnforderungen |
html | ✓ | |
responsibilitiesVerantwortlichkeiten |
html | ||
benefitsVorteile |
html | ||
locationStandort |
text ≤ 200 | ✓ | |
contract_typeVertragsart |
choice ≤ 20full_time, part_time, contract, freelance, internship, temporary |
||
experience_levelErfahrungsniveau |
choice ≤ 20entry, junior, mid, senior, lead, executive |
||
remote_optionRemote-option |
choice ≤ 20onsite, remote, hybrid |
||
application_deadlineApplication deadline |
date | ||
is_activeAktiv |
bool |
Ressourcen resources
| Feld | Feldtyp | Pflichtfeld | Eines pro Sprache |
|---|---|---|---|
titleTitel |
text ≤ 200 | ✓ | title_fr, title_en… |
descriptionBeschreibung |
html | ✓ | description_fr, description_en… |
fileDatei |
file ≤ 100 | ✓ | |
resource_typeRessourcentyp |
choice ≤ 20guide, ebook, whitepaper, template, checklist, case_study |
||
thumbnailMiniaturansicht |
image ≤ 100 | ||
orderReihenfolge |
int |
Veröffentlichungen publications
| Feld | Feldtyp | Pflichtfeld | Eines pro Sprache |
|---|---|---|---|
titleTitel |
text ≤ 255 | ✓ | title_fr, title_en… |
authorsAutoren |
text ≤ 255 | ✓ | authors_fr, authors_en… |
yearJahr |
text ≤ 10 | ✓ | |
journalZeitschrift |
text ≤ 255 | journal_fr, journal_en… |
|
abstractAbstrakt |
html | abstract_fr, abstract_en… |
|
linkLink |
url ≤ 200 | ||
categoryKategorie |
category | ||
is_featuredHervorgehobene publikation |
bool | ||
orderReihenfolge |
int |
Kundenstimmen testimonials
| Feld | Feldtyp | Pflichtfeld | Eines pro Sprache |
|---|---|---|---|
nameName |
text ≤ 100 | ✓ | name_fr, name_en… |
positionPosition |
text ≤ 100 | ✓ | position_fr, position_en… |
testimonialZeugnis |
longtext | ✓ | testimonial_fr, testimonial_en… |
ratingBewertung |
int | ||
imageBild |
image ≤ 100 | ||
orderReihenfolge |
int |
Fähigkeiten skills
| Feld | Feldtyp | Pflichtfeld | Eines pro Sprache |
|---|---|---|---|
nameName |
text ≤ 100 | ✓ | name_fr, name_en… |
levelEbene |
int | ||
orderReihenfolge |
int |
Kennzahlen stats
| Feld | Feldtyp | Pflichtfeld | Eines pro Sprache |
|---|---|---|---|
titleTitel |
text ≤ 100 | ✓ | title_fr, title_en… |
valueWert |
text ≤ 20 | ✓ | |
iconSymbol |
text ≤ 50 | ||
orderReihenfolge |
int |