Conceitos

Recursos

Dados definidos uma vez num arquivo .meta, com admin, API, permissões e histórico.

Um recurso é um tipo de dado: projetos, membros, pedidos, páginas. Você o descreve uma vez num arquivo .meta, e o Nimbly fornece, a partir dessa descrição, o armazenamento, as telas do admin, os formulários, a API, as permissões e o histórico.

Registros são arquivos

ext/data/projects/
  .meta                 the definition
  4f1c9a2e7b...         one record, as JSON
  9d03b6e1c4...         another record

Cada registro é um arquivo JSON com o id como nome, uma sequência aleatória como 1ztuvo56o5vze6t0 que é a mesma em todos os ambientes. Não há servidor de banco de dados: um recurso pode ser lido, copiado, versionado no Git e restaurado como uma pasta. Por que o Nimbly funciona assim, e o que isso significa para um projeto, está em Dados como arquivos. Todo registro também ganha uuid, _created, _modified, _created_by e _modified_by, mantidos pelo Nimbly.

A definição

{
  "name": {"singular": "Project", "plural": "Projects"},
  "fields": {
    "title": {"name": "Title", "type": "text", "required": true},
    "title_slug": {"name": "URL slug", "type": "slug", "source": "title"},
    "sector": {"name": "Sector", "type": "select", "options": {"culture": "Culture", "retail": "Retail"}},
    "published": {"name": "Published", "type": "boolean", "admin_filter": true},
    "cover": {"name": "Cover", "type": "image", "admin_col": false},
    "description": {"name": "Description", "type": "html", "buttons": "bold,italic,anchor", "admin_col": false}
  },
  "index": ["title_slug"],
  "sort": {"field": "title", "order": "asc"}
}

Os campos têm um tipo (text, html, date, select, image, gallery, file, number, boolean, location e mais), um rótulo, validação e configurações para o admin. Um select pode buscar suas opções em outro recurso; é assim que os recursos se referem uns aos outros. As referências de tipos de campo e metadados de recursos listam todas as opções.

O que uma definição dá a você

Você ganha Onde
Uma visão geral com colunas, busca, filtros e paginação /nb-admin/<resource>
Formulários para adicionar e editar, com validação o admin, e qualquer formulário que você construir sobre o recurso
Uma API REST para listar, ler, criar, alterar e excluir /api/v1/<resource>
Permissões por operação e função view-, create-, edit-, delete- e manage-<resource>
Histórico de cada alteração, com restauração o painel de ações do registro no admin
Busca por valor de campo a lista index

Lendo dados

Num template:

[#data projects filter=published:1 sort=year|numeric|desc limit=12#]
[#repeat data.projects tpl=card-project#]

Em PHP, data_read() lê um registro, data_read_index() encontra registros por um campo indexado e data_query() devolve uma página filtrada e ordenada com o total. As gravações passam por data_create(), data_update() e data_delete(), que validam, atualizam os índices e registram o histórico.

Desempenho em escala

  • Índices. Um campo listado em index ganha um caminho de busca, para que um slug num endereço encontre seu registro sem ler o recurso.
  • Cache de listas. Filtros e ordenações guardam os valores dos campos envolvidos num arquivo de cache por campo, para que uma página de resultados leia só os registros dessa página.
  • Cache de consultas. Os resultados das consultas ficam em cache e são invalidados a cada escrita, venha ela do site, da API, do Git ou de uma sincronização.
  • Diretórios divididos. "splitdir": true espalha os arquivos de um recurso grande por subpastas.

Com diretórios divididos e índices, um recurso suporta cerca de 100.000 registros.

Eventos

Um recurso pode declarar o que acontece depois que um registro é criado, alterado ou excluído: executar uma função, ou colocar um job em segundo plano na fila, como um e-mail de confirmação após o envio de um formulário. Veja Trabalho em segundo plano.

Recursos ocultos

Um recurso cujo nome começa com um ponto, como .config ou .content, fica fora da visão geral de dados do admin. O Nimbly os usa para configurações do site, conteúdo das páginas, rotas e a fila de jobs.

Ver esta página em Markdown