Developers

Conector de dados#

O conector de dados preenche um site NAMES LEGAL a partir de dados que já existem noutro local, sem código do lado do proprietário do site. O proprietário liga uma fonte na sua consola (Integrações → Importar os meus dados), associa colunas a campos por arrastar e largar, executa um teste e lança. As fontes podem ser ficheiros ou uma API — a sua.

Esta página destina-se a programadores de aplicações que pretendem ser uma fonte: o que o NAMES LEGAL espera da sua API, e como tornar a ligação automática.

Como o conector lê a sua API#

O proprietário do site introduz:

  • o endereço da sua API,
  • um modo de autenticação e o respetivo segredo,
  • opcionalmente, onde está a lista na sua resposta (data.items).

O NAMES LEGAL chama então a sua API através de HTTPS com GET, segue a paginação e transforma cada objeto numa linha. Os objetos aninhados são achatados (author.name), as listas de valores simples são unidas com vírgulas.

Autenticação#

Modo O que é enviado
Nenhum nada
Chave num cabeçalho <Header-Name>: <key> (predefinição X-API-Key)
Chave no endereço ?<param>=<key> (predefinição api_key)
Token Bearer Authorization: Bearer <token>
Nome de utilizador e palavra-passe Authorization: Basic …

Os segredos são armazenados encriptados e nunca voltam a ser mostrados na consola. Forneça aos proprietários de sites uma chave só de leitura, limitada ao conteúdo publicado: o conector apenas lê.

Localizar a lista#

Se não for indicado nenhum caminho, o conector utiliza, por ordem: a matriz items, depois a primeira matriz de objetos encontrada na resposta. Uma matriz JSON simples também funciona.

Paginação#

Qualquer um destes é seguido automaticamente, até 200 páginas:

  • um cabeçalho HTTP Link: <…>; rel="next";
  • um URL da página seguinte no corpo: next, next_url, next_page_url, links.next, meta.next, pagination.next;
  • um cursor no corpo: next_cursor, meta.next_cursor, pagination.next_cursor — devolvido como ?cursor=.

Para parar, devolva uma lista vazia ou nenhuma ligação seguinte.

Limites#

  • 5000 linhas por conjunto de dados e sincronização.
  • 10 MB por resposta, 15 segundos por pedido.
  • Os endereços têm de ser públicos: endereços privados e de rede local são recusados, incluindo redirecionamentos. Num redirecionamento para outro anfitrião, a chave não é reencaminhada.

O formato de feed NAMES LEGAL#

Exponha os seus dados neste formato e o proprietário do site não tem nada para associar: cada coleção torna-se num conjunto de dados já ligado à secção correspondente do site.

1. Um índice#

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/"
  }
}

Os nomes das coleções são as chaves de secção listadas na referência de campos abaixo (team, services, blog, events, faq, jobs…). Os URLs podem ser relativos ao índice.

2. Uma lista por coleção#

{
  "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
}

Regras:

  • id — um identificador estável, diferente em cada linha. É através dele que uma linha editada atualiza a mesma ficha em vez de criar uma nova.
  • Os nomes dos campos são os da referência de campos.
  • Os campos traduzidos têm uma chave por idioma: title_fr, title_en, description_de… Uma chave sem sufixo vai para o idioma predefinido do site.
  • As imagens e os ficheiros são URLs públicos. São transferidos uma vez e voltam a ser transferidos apenas quando o URL muda. São aceites ligações de partilha do Google Drive e do Dropbox.
  • As categorias são indicadas pelo nome ("category": "Bachelor"); as categorias em falta são criadas.
  • As datas estão em ISO 8601. Os booleanos são true/false.
  • Os campos de texto formatado aceitam HTML; este é limpo (sem scripts, sem manipuladores de eventos). O texto simples transforma-se em parágrafos.
  • Devolva apenas o que pode ser publicado: rascunhos e dados privados não devem aparecer no feed.

Manter o site atualizado#

O proprietário do site escolhe, por secção:

Opção Efeito
De hora a hora / diariamente O NAMES LEGAL lê a API de forma programada.
Apenas quando eu pedir Um botão na consola.
Webhook A API chama o endereço de webhook do site após cada alteração: sincronização em menos de um minuto. Consulte Webhooks.

Também é escolhido o que acontece quando uma ficha foi alterada em ambos os lados (os dados da fonte prevalecem, o site prevalece, ou é pedida confirmação), e quando uma linha desaparece do feed (eliminar no site, ocultar, ou manter). Uma sincronização que removesse uma grande parte de uma secção é interrompida e pede confirmação primeiro.

Escrever de volta na aplicação de origem ("o meu site → a minha fonte") ainda não está disponível: o conector apenas lê.

Referência de campos#

Gerada a partir da própria plataforma; está sempre atualizada. Os campos obrigatórios têm de estar presentes em cada linha (no caso de um campo traduzido, em pelo menos um idioma).

Tamanho da equipe team

CampoTipo de campoObrigatórioUm por idioma
first_name
Nome
text ≤ 100
last_name
Sobrenome
text ≤ 100
position
Posição
text ≤ 150
short_bio
Biografia breve
longtext ≤ 300
bio
Bio
html
profile_image
Imagem de perfil
image ≤ 100
email
Email
email ≤ 254
phone
Telefone
text ≤ 20
linkedin
Linkedin
url ≤ 200
website
Site pessoal
url ≤ 200
specialties
Especialidades
text ≤ 200
education
Educação
text ≤ 200
location
Localização
text ≤ 100
years_experience
Anos de experiência
int
order
Ordem
int

Serviços services

CampoTipo de campoObrigatórioUm por idioma
title
Título
text ≤ 100 title_fr, title_en
description
Descrição
longtext description_fr, description_en
icon
Ícone
text ≤ 50
category
Categoria
category
is_featured
Serviço em destaque
bool
order
Ordem
int

Projetos projects

CampoTipo de campoObrigatórioUm por idioma
title
Título
text ≤ 150 title_fr, title_en
description
Descrição breve
longtext description_fr, description_en
detailed_description
Descrição detalhada
html detailed_description_fr, detailed_description_en
category
Categoria
category
image
Imagem em destaque
image ≤ 100
client
Cliente
text ≤ 100 client_fr, client_en
project_date
Data do projeto
text ≤ 20
duration
Duração
text ≤ 50 duration_fr, duration_en
project_url
Url do projeto ao vivo
url ≤ 200
technologies
Tecnologias
text ≤ 200 technologies_fr, technologies_en
tags
Tags
text ≤ 200 tags_fr, tags_en
status
Status
choice ≤ 20
completed, in_progress, on_hold, planning
is_featured
Projeto em destaque
bool
order
Ordem
int

Blogue / notícias blog

CampoTipo de campoObrigatórioUm por idioma
title
Título
text ≤ 200 title_fr, title_en
excerpt
Trecho
longtext ≤ 500 excerpt_fr, excerpt_en
content
Contato
html content_fr, content_en
category
Categoria
category
featured_image
Imagem em destaque
image ≤ 100
published_date
Data publicada
datetime
status
Status
choice ≤ 20
draft, published, featured
order
Ordem
int

Eventos events

CampoTipo de campoObrigatórioUm por idioma
title
Título
text ≤ 200 title_fr, title_en
description
Descrição
html description_fr, description_en
start_date
Data de início
datetime
end_date
Data de término
datetime
location
Localização
text ≤ 200 location_fr, location_en
is_online
Está online
bool
event_type
Tipo de evento
choice ≤ 20
conference, workshop, webinar, seminar, training, meeting
registration_url
Url de registro
url ≤ 200
meeting_url
Encontrar url
url ≤ 200
featured_image
Imagem em destaque
image ≤ 100
is_featured
Em destaque
bool
order
Ordem
int

Perguntas frequentes faq

CampoTipo de campoObrigatórioUm por idioma
question
Pergunta
text ≤ 300 question_fr, question_en
answer
Responder
html answer_fr, answer_en
category
Categoria
category
is_featured
Em destaque
bool
order
Ordem
int

Vagas de emprego jobs

CampoTipo de campoObrigatórioUm por idioma
title
Título do cargo
text ≤ 200
category
Categoria
category
description
Descrição da vaga
html
requirements
Requisitos
html
responsibilities
Responsabilidades
html
benefits
Benefícios
html
location
Localização
text ≤ 200
contract_type
Tipo de contrato
choice ≤ 20
full_time, part_time, contract, freelance, internship, temporary
experience_level
Nível de experiência
choice ≤ 20
entry, junior, mid, senior, lead, executive
remote_option
Opção de trabalho remoto
choice ≤ 20
onsite, remote, hybrid
application_deadline
Application deadline
date
is_active
Acção
bool

Recursos resources

CampoTipo de campoObrigatórioUm por idioma
title
Título
text ≤ 200 title_fr, title_en
description
Descrição
html description_fr, description_en
file
Arquivo
file ≤ 100
resource_type
Tipo de recurso
choice ≤ 20
guide, ebook, whitepaper, template, checklist, case_study
thumbnail
Miniatura
image ≤ 100
order
Ordem
int

Publicações publications

CampoTipo de campoObrigatórioUm por idioma
title
Título
text ≤ 255 title_fr, title_en
authors
Autores
text ≤ 255 authors_fr, authors_en
year
Ano
text ≤ 10
journal
Jornal
text ≤ 255 journal_fr, journal_en
abstract
Resumo
html abstract_fr, abstract_en
link
Link
url ≤ 200
category
Categoria
category
is_featured
Publicação em destaque
bool
order
Ordem
int

Depoimentos testimonials

CampoTipo de campoObrigatórioUm por idioma
name
Nome
text ≤ 100 name_fr, name_en
position
Posição
text ≤ 100 position_fr, position_en
testimonial
Depoimento
longtext testimonial_fr, testimonial_en
rating
Avaliação
int
image
Imagem
image ≤ 100
order
Ordem
int

Habilidades skills

CampoTipo de campoObrigatórioUm por idioma
name
Nome
text ≤ 100 name_fr, name_en
level
Nível
int
order
Ordem
int

Números-chave stats

CampoTipo de campoObrigatórioUm por idioma
title
Título
text ≤ 100 title_fr, title_en
value
Valor
text ≤ 20
icon
Ícone
text ≤ 50
order
Ordem
int