Communitygithub.com

sshhdkeyu/skill-prod-cursor

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 sobre nomenclatura/versionamento/formato de erros.

O que é skill-prod-cursor?

Este skill transforma o desenvolvedor ou agente de IA em um revisor de design de API, focando em contratos REST e RPC que priorizam consistência, evolutibilidade e resistência a mau uso. Ele é útil para qualquer momento em que novos endpoints são definidos, uma superfície de API é revisada, ou surgem dúvidas sobre nomenclatura, versionamento e formato de erros. O skill suporta plataformas como Claude Code, Cursor e outros agentes que consomem markdown de instruções, oferecendo um processo completo que vai desde a modelagem de recursos e casos de uso até a definição de convenções de URL, semântica HTTP, formato de requisição/resposta, tratamento de erros acionáveis, paginação, versionamento e segurança. Inclui uma lista de verificação prática e um formato de saída para revisões classificadas por criticidade, orientando o agente a gerar contratos de API que sejam claros, seguros e de fácil manutenção.

Funciona com✓Claude Code✓Codex CLI✓Cursor✓Gemini CLI✓Windsurf
npx skills add https://github.com/sshdkeyu/skill-prod-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 uma responsabilidade — uma vez que clientes dependem dela, erros são caros. Otimize por consistência, evolutibilidade e dificuldade de mau uso. Veja examples/bad-vs-good-api-design.md para exemplos práticos. 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, hifenizados: /payment-methods, não /getPaymentMethod.
  • Hierarquia expressa posse: /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); use links em vez de aninhamento profundo.

Semântica HTTP

  • GET (seguro, cacheável), 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 ações assíncronas com um recurso de status.
  • Idempotência: suporte um cabeçalho Idempotency-Key para criações não idempotentes, para que tentativas repetidas sejam seguras.

Formato de requisição e resposta

  • Caixa consistente em todos os lugares (escolha snake_case ou camelCase e nunca desvie).
  • Invólucro consistente: um objeto data e um bloco separado meta/pagination.
  • Timestamps são ISO-8601 UTC; dinheiro é em unidades menores inteiras + código da moeda; IDs são strings opacas.
  • Não vaze campos internos/de banco de dados. Version 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..."
      }
    }
    
  • Código legível por máquina estável (code) (clientes decidem com base nisso, não na mensagem).

  • Inclua request_id para suporte/correlação. Nunca vaze stack traces ou informações internas.

Paginação, filtragem, ordenação

  • Prefira paginação por cursor/chave para conjuntos de dados grandes ou ao vivo; 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

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

Segurança (verifique com a regra 02)

  • AuthN na borda, AuthZ por requisição e por objeto (sem IDOR).
  • Valide e limite todas as entradas; limite de taxa em endpoints públicos.
  • Escopo de tokens; 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/caixa/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/ordenação padronizados.
  • Estratégia de versionamento + regras de compatibilidade reversa declaradas.
  • AuthZ aplicada por objeto; entradas validadas; limites de taxa definidos.
  • Documentado (OpenAPI/schema) com exemplos.

Formato de saída

Ao revisar, retorne as descobertas classificadas como Crítico → Alto → Médio → Baixo → Detalhe, 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 4 individual skills — each has its own dedicated page.

Habilidades Relacionadas