Erros e Envelope de Respostas

Erros e Envelope de Respostas

Como lidar com respostas padronizadas e tratamento de erros.

Estrutura de sucesso

Use o helper RestApiResponse.success(data, links) nos controllers base.

{
  "status": "success",
  "message": "Requisição realizada com sucesso",
  "data": { /* payload */ },
  "_links": {
    "self": { "href": "https://api.exemplo.com/api/recurso/1" }
  },
  "timestamp": "2024-01-01T10:00:00"
}

O contrato publico canonico usa _links em formato de objeto por rel, nao links em array nem envelope HAL completo com _embedded. Cada rel aponta para um objeto de link unico ({ "href": "..." }) ou para uma lista desses objetos quando houver multiplas ocorrencias para o mesmo rel.

Estrutura de falha

Erros são padronizados com CustomProblemDetail e categorias (ErrorCategory).

{
  "status": "failure",
  "message": "Erro de validação",
  "errors": [
    {
      "message": "Campo obrigatório",
      "status": 400,
      "title": "nome",
      "type": "https://example.com/probs/validation-error",
      "instance": "/api/human-resources/funcionarios",
      "category": "VALIDATION"
    }
  ],
  "timestamp": "2024-01-01T10:00:00"
}
Tratamento global de exceções

GlobalExceptionHandler converte exceções comuns (validação, not found, regra de negócio, etc.) em respostas padronizadas.

Boas práticas
Referências