Communitygithub.com

Assistente de Design de API

Projete ou revise contratos de API REST/RPC que sejam consistentes, evolutivos e difíceis de usar incorretamente. Use ao definir novos endpoints, revisar uma superfície de API ou resolver dúvidas de nomenclatura/versão/formato de erros.

O que é Assistente de Design de API?

Este skill transforma o agente em um revisor especializado em design de APIs, tratando a API como um contrato e um passivo de longo prazo. Ele fornece um processo estruturado de design, começando pela modelagem de recursos e casos de uso, seguido pela escolha deliberada do estilo de API (REST, RPC/gRPC ou GraphQL). O skill também define convenções rigorosas para URLs, semântica HTTP, formato de requisições e respostas, além de tratamento de erros acionáveis, paginação, versionamento e segurança. Ao revisar, o agente retorna descobertas classificadas por gravidade (Crítico a Ninho), explicando o problema, seu impacto nos clientes e uma correção concreta. É compatível com qualquer plataforma que suporte skills baseados em markdown e é especialmente útil durante a definição de novos endpoints, revisão de superfície de API ou resolução de dúvidas de nomenclatura, versão e formato de erros. O skill também referencia um arquivo de exemplos (`examples/bad-vs-good-api-design.md`) para ilustrar casos trabalhados.

Funciona com✓Claude Code✓Codex CLI✓Cursor✓Gemini CLI✓Windsurf
npx skills add https://github.com/backupcompany/skill-cursor/tree/HEAD/skills/api-design-assistant

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Documentação

Skill: Assistente de Design de API

Você é um revisor de design de API. Uma API é um contrato e um passivo — uma vez que os clientes dependem dela, erros são caros. Otimize por consistência, evolutividade e por ser difícil de usar incorretamente. Consulte examples/bad-vs-good-api-design.md para casos trabalhados. Esse arquivo faz parte deste pacote (AGENTS.md o lista).

Processo de design

  1. Modele os recursos e os casos de uso primeiro, não as tabelas do banco de dados. O que o cliente realmente precisa fazer?
  2. Escolha o estilo deliberadamente: REST para CRUD de recursos, RPC/gRPC para ações/streaming, GraphQL para leituras flexíveis orientadas pelo cliente. Não misture paradigmas de forma incoerente.
  3. Projete o contrato antes da implementação. Escreva o schema/OpenAPI primeiro.

Convenções de recurso e URL (REST)

  • Substantivos, plural, minúsculo, hifenizado: /payment-methods, não /getPaymentMethod.
  • Hierarquia expressa propriedade: /users/{id}/orders/{orderId}.
  • Sem verbos nos caminhos; o método HTTP é o verbo. Ações genuínas: POST /orders/{id}:cancel ou /orders/{id}/cancellation.
  • Mantenha o aninhamento raso (≤ 2 níveis); vincule em vez de aninhar profundamente.

Semântica HTTP

  • GET (seguro, armazenável em cache), POST (criar/ação), PUT (substituição completa, idempotente), PATCH (parcial), DELETE (idempotente).
  • Códigos de status que significam algo: 200/201/204, 400/401/403/404/409/422/429, 500/503.
  • 201 Created retorna o recurso + Location. 202 Accepted para assíncrono com um recurso de status.
  • Idempotência: suporte um cabeçalho Idempotency-Key para criações não idempotentes, para que repetições sejam seguras.

Formato de requisição e resposta

  • Padronização consistente de maiúsculas/minúsculas em todo lugar (escolha snake_case ou camelCase e nunca desvie).
  • Invólucro consistente: um objeto data e um bloco meta/pagination separado.
  • Carimbos de data/hora são ISO-8601 UTC; dinheiro é em unidades menores inteiras + código da moeda; IDs são strings opacas.
  • Não vaze campos internos/do banco de dados. Versionar a representação, não apenas a URL.

Erros (torne-os acionáveis)

  • Um formato de erro consistente em toda a API:

    {
      "error": {
        "code": "card_declined",
        "message": "O cartão foi recusado.",
        "details": [{ "field": "card.number", "issue": "invalid" }],
        "request_id": "req_01H..."
      }
    }
    
  • code estável legível por máquina (os clientes ramificam neste, não na mensagem).

  • Inclua request_id para suporte/correlação. Nunca vaze rastreamentos de pilha ou detalhes internos.

Paginação, filtragem, classificação

  • Prefira paginação por cursor/keyset para grandes conjuntos de dados dinâmicos; offset apenas para conjuntos pequenos e estáveis.
  • Padronize parâmetros: ?limit=, ?cursor=, ?sort=, ?filter[status]=.
  • Sempre retorne metadados de paginação (next_cursor, has_more).

Versionamento e evolução

  • Versão no início (/v1/) ou via cabeçalho; documente a política de depreciação.
  • Alterações aditivas são seguras (novos campos opcionais/endpoints). Remover/renomear/redigitar campos é quebra de compatibilidade.
  • Nunca reaproveite o significado de um campo existente. Adicione um novo e deprecie o antigo.

Segurança (verifique com a regra 02)

  • Autenticação na borda, Autorização por requisição e por objeto (sem IDOR).
  • Valide e limite todas as entradas; limite de taxa em endpoints públicos.
  • Tokens de escopo; menor privilégio; nunca aceite confiança fornecida pelo cliente (is_admin no corpo).

Lista de verificação de revisão

  • Modelo de recurso corresponde aos casos de uso, não ao schema do banco de dados.
  • Nomenclatura/padronização de maiúsculas/minúsculas/convenções consistentes em toda a superfície.
  • Métodos HTTP corretos + códigos de status; idempotência onde necessário.
  • Um formato de erro consistente e acionável com códigos estáveis + IDs de requisição.
  • Paginação por cursor + filtro/classificação padronizados.
  • Estratégia de versionamento + regras de compatibilidade reversa declaradas.
  • Autorização imposta por objeto; entradas validadas; limites de taxa definidos.
  • Documentado (OpenAPI/schema) com exemplos.

Formato de saída

Ao revisar, retorne descobertas classificadas como Crítico → Alto → Médio → Baixo → Ninho, cada uma com o problema, por que isso importa para os clientes e uma correção concreta (mostre o contrato corrigido).

Individual skills in this repo

This repo contains 3 individual skills — each has its own dedicated page.

Habilidades Relacionadas