Communitygithub.com

hussainkhan/dev-skills

Use esta habilidade ao projetar ou revisar APIs — REST, GraphQL, tRPC ou gRPC. Ative com palavras-chave: design de API, REST, GraphQL, tRPC, gRPC, endpoint, esquema, rota, OpenAPI, Swagger, versionamento de API, paginação, contrato de API, métodos HTTP.

O que é dev-skills?

Esta habilidade auxilia engenheiros de software e arquitetos a projetar, revisar e implementar APIs de alto nível, cobrindo REST, GraphQL, tRPC e gRPC. Ela fornece diretrizes práticas sobre convenções de URL, códigos de status HTTP, envelopes de resposta, estratégias de versionamento, paginação, filtragem, idempotência, design de esquemas GraphQL e segurança de API. É útil para equipes que buscam consistência, boas práticas e conformidade com padrões da indústria ao construir ou evoluir APIs, independentemente do protocolo escolhido. Baseada em documentação técnica consolidada, a habilidade pode ser integrada a assistentes de IA como Claude Code, Cursor ou Codex, permitindo que revisões e sugestões de design sejam feitas de forma automatizada durante o desenvolvimento.

Funciona com~Claude Code~Codex CLI✓Cursor
npx skills add https://github.com/jakirhussainkhan/dev-skills/tree/HEAD/.github/skills/api-design

Perguntar na sua IA favorita

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

Documentação

Design de API

Escolhendo o Tipo de API Certo

TipoMelhor ParaEvitar Quando
RESTAPIs públicas, CRUD, clientes simples, IoTDados aninhados complexos, iteração rápida de esquema
GraphQLAplicativos móveis, dados aninhados complexos, múltiplos clientesCRUD simples, equipes pequenas novas no assunto
tRPCMonorepos TypeScript, APIs TypeScript full-stack internasClientes não TypeScript, APIs públicas
gRPCComunicação entre microsserviços de alto desempenho, streamingClientes de navegador, casos de uso simples

Design de API REST

Convenções de URL

GET    /users              ← listar
GET    /users/{id}         ← único
POST   /users              ← criar
PUT    /users/{id}         ← substituir
PATCH  /users/{id}         ← atualização parcial
DELETE /users/{id}         ← deletar

# Recursos aninhados
GET    /users/{id}/orders
POST   /users/{id}/orders

# Ações (quando os verbos REST não são suficientes)
POST   /orders/{id}/cancel
POST   /users/{id}/activate

Códigos de Status HTTP

CódigoUse Quando
200GET, PUT, PATCH bem-sucedidos
201POST bem-sucedido que cria
204DELETE bem-sucedido (sem corpo)
400Falha de validação, requisição inválida
401Autenticação ausente/inválida
403Autenticado, mas não autorizado
404Recurso não encontrado
409Conflito (duplicata, versão incompatível)
422Entidade não processável (erros semânticos)
429Limite de taxa excedido
500Erro inesperado do servidor

Envelope de Resposta

// Coleção
{
  "data": [...],
  "meta": { "total": 100, "page": 1, "perPage": 20 }
}

// Recurso único
{ "data": { "id": "1", "name": "James" } }

// Erro
{
  "error": {
    "code": "VALIDATION_ERROR",
    "message": "Falha na validação",
    "details": [{ "field": "email", "issue": "Formato inválido" }]
  }
}

Princípios de Design de API

Estratégia de Versionamento

# Versionamento por URL (mais visível, mais fácil de rotear)
/v1/users
/v2/users

# Versionamento por cabeçalho (URLs mais limpas)
Accept: application/vnd.api+json;version=2

Nunca quebre clientes existentes. Marque como obsoleto e depois remova.

Paginação

# Offset (simples, bom para conjuntos de dados pequenos)
GET /posts?page=2&perPage=20

# Cursor (rápido para grandes conjuntos de dados, use para rolagem infinita)
GET /posts?cursor=eyJpZCI6MTAwfQ&limit=20

Filtragem e Ordenação

GET /orders?status=pending&userId=123
GET /products?sort=-price,name    # - prefix = descendente
GET /products?fields=id,name,price  # conjuntos de campos esparsos

Idempotência

# Incluir chave de idempotência para operações não idempotentes
POST /payments
Idempotency-Key: uuid-único-gerado-pelo-cliente

Design GraphQL

Regras de Design de Esquema

  • Descreva o domínio do negócio, não a estrutura do banco de dados
  • Use o padrão de conexões para listas (pronto para paginação)
  • Mutações retornam o objeto modificado
  • Use enums para conjuntos finitos de valores
  • Adicione descrições a todos os tipos e campos
type Query {
  user(id: ID!): User
  users(filter: UserFilter, pagination: PaginationInput): UserConnection!
}

type Mutation {
  createUser(input: CreateUserInput!): CreateUserPayload!
  updateUser(id: ID!, input: UpdateUserInput!): UpdateUserPayload!
}

type UserConnection {
  edges: [UserEdge!]!
  pageInfo: PageInfo!
  totalCount: Int!
}

Lista de Verificação de Segurança de API

  • Todos os endpoints exigem autenticação (a menos que explicitamente públicos)
  • Autorização verificada por recurso, não apenas por rota
  • Limitação de taxa em todos os endpoints, mais rigorosa em endpoints de autenticação
  • Validação de entrada em cada parâmetro e campo do corpo
  • Dados sensíveis não retornados a menos que explicitamente necessários
  • CORS configurado com lista de permissões explícita
  • Estratégia de versionamento de API definida antes de tornar pública

Individual skills in this repo

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

Habilidades Relacionadas