Pular para o conteúdo principal

Backend

A estrutura de backend do Nerdify é construída sobre o sólido e consagrado framework Ruby on Rails, que fornece a base para toda a lógica de autenticação, autorização, roteamento e controle de requisições. Todo o ecossistema Nerdify se apoia em uma API RESTful organizada, estruturada e baseada em boas práticas da comunidade Rails.


💎 Ruby on Rails

Ruby on Rails é um framework web completo, opinativo e produtivo, criado para tornar o desenvolvimento de aplicações web elegante e sustentável. Ele promove o uso de convenções, evita repetições e facilita a criação de aplicações robustas.

Para quem deseja se aprofundar:

O Nerdify utiliza o Rails para montar uma estrutura de API-only, focada em performance e integração com frontend desacoplado.


🌐 API Restful

No Nerdify, o backend é estruturado como uma API RESTful. Isso significa que os recursos são representados por URLs e manipulados por métodos HTTP padronizados (GET, POST, PUT, DELETE).

Essa organização garante previsibilidade, escalabilidade e compatibilidade com qualquer cliente — especialmente o frontend do próprio Nerdify.

Cada rota está associada a um controlador responsável por responder com JSON estruturado conforme o padrão Nerdify, interpretado automaticamente no frontend.


🔐 Autenticação e Autorização

A autenticação no Nerdify utiliza tokens JWT renováveis, com a gem devise_token_auth. Cada requisição autenticada exige o envio dos headers:

access-token: <token>
client: <identificador>
uid: <email ou id>

Os tokens são renovados a cada requisição e o frontend já lida com esse processo automaticamente.

A autorização de acesso às funcionalidades da API é feita com o padrão Ability, utilizando a gem cancancan. Cada controlador respeita as permissões definidas na classe Ability, como por exemplo:

can :manage, Cliente, empresa_id: user.empresa_id

Essa arquitetura garante segurança e controle fino sobre as ações disponíveis por perfil, grupo ou contexto do usuário.


📤 Formato de requisição: GET e POST

O Nerdify utiliza um padrão aninhado para passagem de parâmetros em requisições HTTP.

GET

Consultas utilizam o padrão:

?filters[search]=joao&page=1

O backend acessa os parâmetros da seguinte forma:

params[:filters][:search]
params[:page] # => 1

O Nerdify usa essas informações automaticamente para realizar buscas, paginação e filtros.

POST

Envio de dados para criação ou atualização segue o mesmo padrão de estrutura:

{
"customer": {
"nome": "João",
"email": "joao@exemplo.com"
}
}

No backend:

params[:customer][:nome] # => "João"

Esse padrão facilita o parsing e permite o uso natural de strong_parameters no Rails.

🛠️ O frontend do Nerdify já envia tudo nesse padrão automaticamente. O backend também recebe e trata isso automaticamente seguindo estas convenções. Esta explicação serve para entender como os dados são enviados e chegam ao backend. Mas tudo isso é abstraído e o desenvolvedor não precisa se preocupar com isso em 99% das vezes.


PUT, DELETE

  • ✏️ Atualizações devem ser feitas com PUT.
  • 🗑️ Exclusões com DELETE, utilizando a rota do recurso com o :id correspondente.
PUT    /clientes/42
DELETE /clientes/42

📦 Formato de resposta com componentes

A resposta padrão do Nerdify é estruturada em torno do método page_json do controlador, que retorna:

{
"name": "action",
"options": {...},
"components": [...],
"resources": {
"customer": {"name": "João", ...},
"addresses": [...]
},
"translated": {...}
}
  • name: nome da action retornada
  • options: opções da página (layout, controller, filters, etc)
  • components: estrutura visual da página (cards, tabelas, formulários, etc)
  • resources: dados utilizados nos componentes
  • translated: traduções dos textos dinâmicos dos componentes

Essa resposta completa permite que o frontend monte toda a interface dinamicamente, sem nenhum HTML ou template adicional.


📄 Formato de resposta sem componentes

Caso o frontend deseje apenas os dados, é possível enviar o parâmetro:

?only_resources=true

E a resposta será enxuta, apenas com os dados, sem componentes, opções e traduções:

{
"name": "João",
"id": ...
}

Essa funcionalidade é últil para requisições de background, consumo interno de dados ou componentes que apenas precisam de resources sem remontar a interface. Ou para disponibilizar o acesso de recursos específicos do backend para serem acessados por aplicações e APIs externas que precisam se integrar ao seu sistema.


Com essa arquitetura, o backend do Nerdify é eficiente, padronizado, seguro e automatizado. O desenvolvedor pode focar no que importa: modelos, regras de negócio e integrações reais — o Nerdify cuida do resto.