Connettore di dati#
Il connettore di dati popola un sito NAMES LEGAL con dati che esistono già altrove, senza codice da parte del titolare del sito. Il titolare collega una fonte nella propria console (Integrazioni → Importa i miei dati), collega le colonne ai campi trascinandole, esegue una prova e avvia. Le fonti possono essere file o un'API — la Sua.
Questa pagina è per gli sviluppatori di applicazioni che desiderano diventare una fonte: cosa si aspetta NAMES LEGAL dalla Sua API e come rendere automatico il collegamento.
Come il connettore legge la Sua API#
Il titolare del sito inserisce:
- l'indirizzo della Sua API,
- una modalità di autenticazione e il relativo secret,
- facoltativamente, dove si trova l'elenco nella Sua risposta (
data.items).
NAMES LEGAL chiama quindi la Sua API tramite HTTPS con GET, segue la paginazione e trasforma ogni oggetto in una scheda. Gli oggetti annidati vengono appiattiti (author.name), gli elenchi di valori semplici vengono uniti con virgole.
Autenticazione#
| Modalità | Cosa viene inviato |
|---|---|
| Nessuna | niente |
| Chiave in un'intestazione | <Header-Name>: <key> (predefinito X-API-Key) |
| Chiave nell'indirizzo | ?<param>=<key> (predefinito api_key) |
| Token Bearer | Authorization: Bearer <token> |
| Nome utente e password | Authorization: Basic … |
I secret vengono memorizzati crittografati e non vengono più mostrati nella console. Fornisca ai titolari dei siti una chiave di sola lettura limitata al contenuto pubblicato: il connettore legge soltanto.
Individuazione dell'elenco#
Se non viene fornito alcun percorso, il connettore utilizza, in ordine: l'array items, quindi il primo array di oggetti trovato nella risposta. Funziona anche un semplice array JSON.
Paginazione#
Uno qualsiasi dei seguenti metodi viene seguito automaticamente, fino a 200 pagine:
- un'intestazione HTTP
Link: <…>; rel="next"; - un URL della pagina successiva nel corpo:
next,next_url,next_page_url,links.next,meta.next,pagination.next; - un cursore nel corpo:
next_cursor,meta.next_cursor,pagination.next_cursor— rinviato come?cursor=.
Si interrompe restituendo un elenco vuoto o nessun link successivo.
Limiti#
- 5.000 schede per set di dati e sincronizzazione.
- 10 MB per risposta, 15 secondi per richiesta.
- Gli indirizzi devono essere pubblici: indirizzi privati e di rete locale vengono rifiutati, reindirizzamenti inclusi. In caso di reindirizzamento verso un altro host, la Sua chiave non viene inoltrata.
Il formato feed di NAMES LEGAL#
Esponga i Suoi dati in questo formato e il titolare del sito non avrà nulla da collegare: ogni raccolta diventa un set di dati già collegato alla sezione corrispondente del sito.
1. Un indice#
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/"
}
}
I nomi delle raccolte sono le chiavi di sezione elencate nel riferimento dei campi più sotto (team, services, blog, events, faq, jobs…). Gli URL possono essere relativi all'indice.
2. Un elenco per ciascuna raccolta#
{
"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
}
Regole:
id— un identificatore stabile, diverso per ogni scheda. È ciò che permette a una scheda modificata di aggiornare la stessa voce invece di crearne una nuova.- I nomi dei campi sono quelli del riferimento dei campi.
- I campi tradotti hanno una chiave per ogni lingua:
title_fr,title_en,description_de… Una chiave senza suffisso va alla lingua predefinita del sito. - Immagini e file sono URL pubblici. Vengono scaricati una volta e scaricati di nuovo solo quando l'URL cambia. I link di condivisione di Google Drive e Dropbox sono accettati.
- Le categorie sono indicate per nome (
"category": "Bachelor"); le categorie mancanti vengono create. - Le date sono in ISO 8601. I booleani sono
true/false. - I campi di testo formattato accettano HTML; viene ripulito (nessuno script, nessun gestore di eventi). Il testo semplice diventa paragrafi.
- Restituisca solo ciò che può essere pubblicato: bozze e dati privati non dovrebbero comparire nel feed.
Mantenere il sito aggiornato#
Il titolare del sito sceglie, per ciascuna sezione:
| Opzione | Effetto |
|---|---|
| Ogni ora / ogni giorno | NAMES LEGAL legge la Sua API secondo una pianificazione. |
| Solo su richiesta | Un pulsante nella console. |
| Webhook | Lei chiama l'indirizzo webhook del sito dopo ogni modifica: sincronizzazione entro un minuto. Veda Webhook. |
Scelgono inoltre cosa succede quando una scheda è cambiata da entrambe le parti (vincono i Suoi dati, vince il sito, oppure viene chiesto), e cosa succede quando una scheda scompare dal Suo feed (eliminazione dal sito, occultamento, o conservazione). Una sincronizzazione che rimuoverebbe una quota rilevante di una sezione si interrompe e chiede prima conferma.
La scrittura verso la Sua applicazione ("il mio sito → la mia fonte") non è ancora disponibile: il connettore legge soltanto.
Riferimento dei campi#
Generato direttamente dalla piattaforma; è sempre aggiornato. I campi obbligatori devono essere presenti in ogni scheda (per un campo tradotto, in almeno una lingua).
Dimensione della squadra team
| Campo | Tipo di campo | Obbligatorio | Uno per lingua |
|---|---|---|---|
first_nameNome |
text ≤ 100 | ✓ | |
last_nameCognome |
text ≤ 100 | ✓ | |
positionPosizione |
text ≤ 150 | ✓ | |
short_bioBreve biografia |
longtext ≤ 300 | ||
bioBio |
html | ||
profile_imageImmagine del profilo |
image ≤ 100 | ||
email |
email ≤ 254 | ||
phoneTelefono |
text ≤ 20 | ||
linkedin |
url ≤ 200 | ||
websiteSito web personale |
url ≤ 200 | ||
specialtiesSpecializzazioni |
text ≤ 200 | ||
educationIstruzione |
text ≤ 200 | ||
locationPosizione |
text ≤ 100 | ||
years_experienceAnni di esperienza |
int | ||
orderOrdine |
int |
Servizi services
| Campo | Tipo di campo | Obbligatorio | Uno per lingua |
|---|---|---|---|
titleTitolo |
text ≤ 100 | ✓ | title_fr, title_en… |
descriptionDescrizione |
longtext | ✓ | description_fr, description_en… |
iconIcona |
text ≤ 50 | ||
categoryCategoria |
category | ||
is_featuredServizio in evidenza |
bool | ||
orderOrdine |
int |
Progetti projects
| Campo | Tipo di campo | Obbligatorio | Uno per lingua |
|---|---|---|---|
titleTitolo |
text ≤ 150 | ✓ | title_fr, title_en… |
descriptionDescrizione breve |
longtext | ✓ | description_fr, description_en… |
detailed_descriptionDescrizione dettagliata |
html | detailed_description_fr, detailed_description_en… |
|
categoryCategoria |
category | ✓ | |
imageImmagine in evidenza |
image ≤ 100 | ||
clientCliente |
text ≤ 100 | client_fr, client_en… |
|
project_dateData del progetto |
text ≤ 20 | ||
durationDurata |
text ≤ 50 | duration_fr, duration_en… |
|
project_urlUrl del progetto live |
url ≤ 200 | ||
technologiesTecnologie |
text ≤ 200 | technologies_fr, technologies_en… |
|
tagsTag |
text ≤ 200 | tags_fr, tags_en… |
|
statusStato |
choice ≤ 20completed, in_progress, on_hold, planning |
||
is_featuredProgetto in evidenza |
bool | ||
orderOrdine |
int |
Blog / notizie blog
| Campo | Tipo di campo | Obbligatorio | Uno per lingua |
|---|---|---|---|
titleTitolo |
text ≤ 200 | ✓ | title_fr, title_en… |
excerptEstratto |
longtext ≤ 500 | ✓ | excerpt_fr, excerpt_en… |
contentContatto |
html | ✓ | content_fr, content_en… |
categoryCategoria |
category | ✓ | |
featured_imageImmagine in evidenza |
image ≤ 100 | ||
published_dateData pubblicata |
datetime | ||
statusStato |
choice ≤ 20draft, published, featured |
||
orderOrdine |
int |
Eventi events
| Campo | Tipo di campo | Obbligatorio | Uno per lingua |
|---|---|---|---|
titleTitolo |
text ≤ 200 | ✓ | title_fr, title_en… |
descriptionDescrizione |
html | ✓ | description_fr, description_en… |
start_dateData di inizio |
datetime | ✓ | |
end_dateData di fine |
datetime | ✓ | |
locationPosizione |
text ≤ 200 | ✓ | location_fr, location_en… |
is_onlineÈ online |
bool | ||
event_typeTipo di evento |
choice ≤ 20conference, workshop, webinar, seminar, training, meeting |
||
registration_urlUrl di registrazione |
url ≤ 200 | ||
meeting_urlIncontro url |
url ≤ 200 | ||
featured_imageImmagine in evidenza |
image ≤ 100 | ||
is_featuredIn evidenza |
bool | ||
orderOrdine |
int |
FAQ faq
| Campo | Tipo di campo | Obbligatorio | Uno per lingua |
|---|---|---|---|
questionDomanda |
text ≤ 300 | ✓ | question_fr, question_en… |
answerRisposta |
html | ✓ | answer_fr, answer_en… |
categoryCategoria |
category | ||
is_featuredIn evidenza |
bool | ||
orderOrdine |
int |
Offerte di lavoro jobs
| Campo | Tipo di campo | Obbligatorio | Uno per lingua |
|---|---|---|---|
titleTitolo della posizione |
text ≤ 200 | ✓ | |
categoryCategoria |
category | ✓ | |
descriptionDescrizione della posizione |
html | ✓ | |
requirementsRequisiti |
html | ✓ | |
responsibilitiesResponsabilità |
html | ||
benefitsBenefici |
html | ||
locationPosizione |
text ≤ 200 | ✓ | |
contract_typeTipo di contratto |
choice ≤ 20full_time, part_time, contract, freelance, internship, temporary |
||
experience_levelLivello di esperienza |
choice ≤ 20entry, junior, mid, senior, lead, executive |
||
remote_optionOpzione di lavoro da remoto |
choice ≤ 20onsite, remote, hybrid |
||
application_deadlineApplication deadline |
date | ||
is_activeAttivo |
bool |
Risorse resources
| Campo | Tipo di campo | Obbligatorio | Uno per lingua |
|---|---|---|---|
titleTitolo |
text ≤ 200 | ✓ | title_fr, title_en… |
descriptionDescrizione |
html | ✓ | description_fr, description_en… |
fileFile |
file ≤ 100 | ✓ | |
resource_typeTipo di risorsa |
choice ≤ 20guide, ebook, whitepaper, template, checklist, case_study |
||
thumbnailMiniatura |
image ≤ 100 | ||
orderOrdine |
int |
Pubblicazioni publications
| Campo | Tipo di campo | Obbligatorio | Uno per lingua |
|---|---|---|---|
titleTitolo |
text ≤ 255 | ✓ | title_fr, title_en… |
authorsAutori |
text ≤ 255 | ✓ | authors_fr, authors_en… |
yearAnno |
text ≤ 10 | ✓ | |
journalDiario |
text ≤ 255 | journal_fr, journal_en… |
|
abstractAstratto |
html | abstract_fr, abstract_en… |
|
linkCollegamento |
url ≤ 200 | ||
categoryCategoria |
category | ||
is_featuredPubblicazione in evidenza |
bool | ||
orderOrdine |
int |
Testimonianze testimonials
| Campo | Tipo di campo | Obbligatorio | Uno per lingua |
|---|---|---|---|
nameNome |
text ≤ 100 | ✓ | name_fr, name_en… |
positionPosizione |
text ≤ 100 | ✓ | position_fr, position_en… |
testimonialTestimonial |
longtext | ✓ | testimonial_fr, testimonial_en… |
ratingValutazione |
int | ||
imageImmagine |
image ≤ 100 | ||
orderOrdine |
int |
Competenze skills
| Campo | Tipo di campo | Obbligatorio | Uno per lingua |
|---|---|---|---|
nameNome |
text ≤ 100 | ✓ | name_fr, name_en… |
levelLivello |
int | ||
orderOrdine |
int |
Cifre chiave stats
| Campo | Tipo di campo | Obbligatorio | Uno per lingua |
|---|---|---|---|
titleTitolo |
text ≤ 100 | ✓ | title_fr, title_en… |
valueValore |
text ≤ 20 | ✓ | |
iconIcona |
text ≤ 50 | ||
orderOrdine |
int |