Referência rápida

Folha de dicas de API RESTful

Guia rápido de APIs RESTful: semântica de métodos HTTP, códigos de status, estruturas de erro JSON, cabeçalhos e idempotência.

· Publicado

REST (Representational State Transfer) é um estilo arquitetural para projetar serviços de API web em rede sobre HTTP.

Verbos HTTP e semântica

Método Ação alvo Seguro Idempotente
GET Recuperar representação do recurso Sim Sim
POST Criar novo recurso subordinado Não Não
PUT Substituir toda a representação do recurso Não Sim
PATCH Atualizar parcialmente propriedades do recurso Não Não
DELETE Excluir recurso Não Sim
HEAD Recuperar cabeçalhos sem corpo de resposta Sim Sim
OPTIONS Consultar métodos HTTP suportados pelo endpoint Sim Sim

Códigos de status HTTP comuns

Sucesso (2xx)

  • 200 OK: Solicitação bem-sucedida (corpo contém a representação).
  • 201 Created: Recurso criado com sucesso (cabeçalho Location indica a URI).
  • 202 Accepted: Solicitação aceita para processamento assíncrono.
  • 204 No Content: Ação bem-sucedida, sem corpo de resposta (comum no DELETE).

Erros de cliente (4xx)

  • 400 Bad Request: Sintaxe malformada, parâmetros inválidos ou falha de validação.
  • 401 Unauthorized: Autenticação ausente ou inválida.
  • 403 Forbidden: Usuário autenticado não tem permissão para acessar o recurso.
  • 404 Not Found: A URI do recurso não existe.
  • 409 Conflict: Solicitação conflita com o estado atual do recurso (ex.: chave única duplicada).
  • 422 Unprocessable Entity: Solicitação bem formada falhou na validação semântica de domínio.
  • 429 Too Many Requests: Limite de taxa (Rate Limit) excedido.

Erros de servidor (5xx)

  • 500 Internal Server Error: Falha genérica não tratada no servidor.
  • 502 Bad Gateway: O servidor upstream retornou uma resposta inválida.
  • 503 Service Unavailable: Servidor sobrecarregado ou em manutenção.

Envelope de erro JSON padrão

{
  "error": {
    "code": "VALIDATION_ERROR",
    "message": "The email address provided is already registered.",
    "details": [
      {
        "field": "email",
        "issue": "unique_constraint_violated"
      }
    ]
  }
}

Referências

Temas relacionados