Pular para o conteúdo principal

Exemplo de Documentação Back-end

Conteúdo de exemplo: substitua endpoints, arquivos, payloads e regras pelos dados reais da funcionalidade documentada.

Visão geral

Este documento demonstra a estrutura recomendada para documentar uma funcionalidade de Back-end. O exemplo apresenta um serviço fictício de criação de recursos, incluindo contrato da API, validações, regras de negócio, arquivos envolvidos e cenários de teste.

Objetivo

Disponibilizar um endpoint autenticado para cadastrar um novo recurso, validar os dados recebidos, impedir duplicidades e retornar um contrato consistente para os consumidores da API.

Arquitetura do fluxo

Endpoint

Criar recurso

POST /api/v1/resources
Authorization: Bearer <token>
Content-Type: application/json

Corpo da requisição

{
"name": "Recurso de exemplo",
"description": "Descrição opcional do recurso",
"active": true
}
CampoTipoObrigatórioDescrição
namestringSimNome único do recurso
descriptionstringNãoInformações complementares
activebooleanNãoEstado inicial; padrão true

Resposta de sucesso

Status: 201 Created

{
"id": "0194f0c8-4c9d-7c2e-a5df-7ad45af324b1",
"name": "Recurso de exemplo",
"description": "Descrição opcional do recurso",
"active": true,
"createdAt": "2026-08-19T14:00:00.000Z"
}

Regras de negócio

CódigoRegra
RN01O nome é obrigatório e deve possuir entre 3 e 120 caracteres
RN02Não pode existir outro recurso ativo com o mesmo nome
RN03O campo active assume true quando não for informado
RN04A criação exige um usuário autenticado com a permissão adequada
RN05Espaços no início e no final do nome devem ser removidos

Validações e erros

StatusCódigoQuando ocorre
400VALIDATION_ERRORPayload ausente ou campo inválido
401UNAUTHORIZEDToken ausente, inválido ou expirado
403FORBIDDENUsuário sem permissão para criar o recurso
409RESOURCE_ALREADY_EXISTSJá existe um recurso com o mesmo nome
500INTERNAL_SERVER_ERRORFalha inesperada durante o processamento

Exemplo de erro padronizado:

{
"statusCode": 409,
"code": "RESOURCE_ALREADY_EXISTS",
"message": "Já existe um recurso com este nome",
"timestamp": "2026-08-19T14:00:00.000Z"
}

Arquivos envolvidos

ArquivoResponsabilidade
src/modules/resources/resource.controller.tsRecebe a requisição e define o contrato HTTP
src/modules/resources/resource.service.tsExecuta as regras de negócio
src/modules/resources/resource.repository.tsAcessa e persiste os dados
src/modules/resources/dto/create-resource.dto.tsDefine e valida o payload de entrada
src/modules/resources/entities/resource.entity.tsRepresenta a entidade persistida
src/modules/resources/errors/resource.errors.tsCentraliza os erros do domínio

Implementação principal

async function createResource(input: CreateResourceInput) {
const name = input.name.trim();
const existingResource = await repository.findActiveByName(name);

if (existingResource) {
throw new ResourceAlreadyExistsError(name);
}

return repository.create({
...input,
name,
active: input.active ?? true,
});
}

Persistência

Tabela de exemplo: resources.

ColunaTipoObservação
iduuidChave primária
namevarchar(120)Nome pesquisável do recurso
descriptiontextConteúdo opcional
activebooleanExclusão lógica ou disponibilidade
created_attimestampData de criação
updated_attimestampData da última alteração

Segurança

  • O endpoint deve exigir autenticação.
  • A autorização deve ser validada antes da regra de negócio.
  • Tokens, senhas e dados sensíveis não devem aparecer nos logs.
  • Entradas devem ser validadas antes de chegar ao repositório.
  • Consultas devem usar parâmetros para evitar injeção.

Observabilidade

Registre informações suficientes para investigar falhas sem expor dados sensíveis:

  • identificador da requisição;
  • identificador do usuário ou serviço solicitante;
  • duração da operação;
  • resultado da operação;
  • código de erro do domínio;
  • stack trace somente nos logs internos apropriados.

Como validar

  1. Inicie a API e suas dependências.
  2. Obtenha um token de um usuário autorizado.
  3. Envie uma requisição válida e confirme o status 201.
  4. Consulte o banco e confirme a persistência do recurso.
  5. Repita a requisição com o mesmo nome e confirme o status 409.
  6. Remova o token e confirme o status 401.
  7. Use um usuário sem permissão e confirme o status 403.
  8. Envie campos inválidos e confirme o status 400.

Cenários de teste

CenárioResultado esperado
Payload válidoRecurso criado e retornado com status 201
Nome com espaços externosNome normalizado antes de salvar
Nome duplicadoErro RESOURCE_ALREADY_EXISTS
Campo obrigatório ausenteErro VALIDATION_ERROR
Token ausenteErro UNAUTHORIZED
Usuário sem permissãoErro FORBIDDEN
Falha no bancoErro interno tratado e registrado

Checklist para adaptar este exemplo

  • Substituir o ticket e o contexto da funcionalidade
  • Informar os endpoints e métodos reais
  • Documentar todos os campos de entrada e saída
  • Registrar regras de negócio e exceções reais
  • Atualizar a tabela de erros
  • Informar arquivos e responsabilidades reais
  • Documentar banco, filas, cache ou serviços externos envolvidos
  • Adicionar passos de validação reproduzíveis
  • Confirmar segurança, permissões e observabilidade
  • Revisar o conteúdo comparando com o código implementado