Communitygithub.com

jakirhussainkhan/dev-skills

Usa esta habilidad al diseñar o revisar APIs — REST, GraphQL, tRPC o gRPC. Actívala con palabras clave: diseño de API, REST, GraphQL, tRPC, gRPC, endpoint, esquema, ruta, OpenAPI, Swagger, versionado de API, paginación, contrato de API, métodos HTTP.

¿Qué es dev-skills?

Esta habilidad proporciona una guía completa para diseñar, revisar y documentar APIs modernas, cubriendo los principales paradigmas: REST, GraphQL, tRPC y gRPC. Es útil para desarrolladores y revisores que necesitan tomar decisiones informadas sobre la arquitectura de API, siguiendo principios como versionado, paginación, filtrado, idempotencia y seguridad. La habilidad incluye tablas comparativas, convenciones de URL, códigos de estado HTTP, ejemplos de envolturas de respuesta, reglas de diseño de esquemas GraphQL y una lista de verificación de seguridad. Está diseñada para plataformas de agentes de IA como Claude Code, Cursor o Codex, y se activa con palabras clave como "diseño de API", "REST", "GraphQL", "tRPC", "gRPC", "endpoint", "esquema", "ruta", "OpenAPI", "Swagger", "versionado de API", "paginación", "contrato de API" y "métodos HTTP". La documentación sigue las mejores prácticas de la industria y proporciona ejemplos concretos y reutilizables.

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

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

Diseño de API

Elegir el Tipo de API Correcto

TipoMejor paraEvitar cuando
RESTAPIs públicas, CRUD, clientes simples, IoTDatos anidados complejos, iteración rápida de esquemas
GraphQLAplicaciones móviles, datos anidados complejos, múltiples clientesCRUD simple, equipos pequeños nuevos en esto
tRPCMonorepos de TypeScript, APIs internas full-stack en TypeScriptClientes que no usan TypeScript, APIs públicas
gRPCComunicación de microservicios de alto rendimiento, streamingClientes de navegador, casos de uso simples

Diseño de API REST

Convenciones de URL

GET    /users              ← listar
GET    /users/{id}         ← individual
POST   /users              ← crear
PUT    /users/{id}         ← reemplazar
PATCH  /users/{id}         ← actualización parcial
DELETE /users/{id}         ← eliminar

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

# Acciones (cuando los verbos REST no son suficientes)
POST   /orders/{id}/cancel
POST   /users/{id}/activate

Códigos de Estado HTTP

CódigoUsar cuando
200GET, PUT, PATCH exitosos
201POST exitoso que crea
204DELETE exitoso (sin cuerpo)
400Falla de validación, solicitud incorrecta
401Autenticación faltante o inválida
403Autenticado pero no autorizado
404Recurso no encontrado
409Conflicto (duplicado, desajuste de versión)
422Entidad no procesable (errores semánticos)
429Límite de tasa excedido
500Error inesperado del servidor

Envoltura de Respuesta

// Colección
{
  "data": [...],
  "meta": { "total": 100, "page": 1, "perPage": 20 }
}

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

// Error
{
  "error": {
    "code": "VALIDATION_ERROR",
    "message": "Error de validación",
    "details": [{ "field": "email", "issue": "Formato inválido" }]
  }
}

Principios de Diseño de API

Estrategia de Versionado

# Versionado por URL (más visible, más fácil de enrutar)
/v1/users
/v2/users

# Versionado por cabecera (URLs más limpias)
Accept: application/vnd.api+json;version=2

Nunca rompas clientes existentes. Depreca, luego elimina.

Paginación

# Offset (simple, bueno para conjuntos pequeños)
GET /posts?page=2&perPage=20

# Cursor (rápido para grandes conjuntos, usa para scroll infinito)
GET /posts?cursor=eyJpZCI6MTAwfQ&limit=20

Filtrado y Ordenamiento

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

Idempotencia

# Incluye clave de idempotencia para operaciones no idempotentes
POST /payments
Idempotency-Key: uuid-generado-por-cliente-único

Diseño de GraphQL

Reglas de Diseño de Esquemas

  • Describe el dominio del negocio, no la estructura de la base de datos
  • Usa el patrón de conexiones para listas (preparado para paginación)
  • Las mutaciones devuelven el objeto modificado
  • Usa enums para conjuntos finitos de valores
  • Añade descripciones a todos los tipos y 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 Verificación de Seguridad de API

  • Todos los endpoints requieren autenticación (a menos que sean explícitamente públicos)
  • La autorización se verifica por recurso, no solo por ruta
  • Limitación de tasa en todos los endpoints, más estricta en endpoints de autenticación
  • Validación de entrada en cada parámetro y campo del cuerpo
  • Los datos sensibles no se devuelven a menos que sean explícitamente necesarios
  • CORS configurado con lista blanca explícita
  • Estrategia de versionado de API definida antes de hacerla pública

Individual skills in this repo

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

Skills relacionados