Communitygithub.com

jakirhussainkhan/dev-skills

Verwenden Sie dieses Skill beim Entwerfen oder Überprüfen von APIs – REST, GraphQL, tRPC oder gRPC. Auslöser durch Schlüsselwörter: API-Design, REST, GraphQL, tRPC, gRPC, Endpunkt, Schema, Route, OpenAPI, Swagger, API-Versionierung, Paginierung, API-Vertrag, HTTP-Methoden.

Was ist dev-skills?

Dieses Skill unterstützt Entwickler bei der Auswahl des geeigneten API-Typs basierend auf den Anforderungen und bietet praktische Richtlinien für REST, GraphQL, tRPC und gRPC. Es enthält detaillierte Konventionen für REST-URLs, HTTP-Statuscodes, Antwort-Hüllen, Versionierung, Paginierung, Filterung, Sortierung und Idempotenz – alles mit konkreten Codebeispielen. Für GraphQL werden bewährte Methoden zur Schema-Entwicklung und ein Sicherheitscheckliste bereitgestellt, die Authentifizierung, Autorisierung, Ratenbegrenzung und Eingabevalidierung abdeckt. Das Skill ist für KI-Agenten wie Claude Code, Cursor und Codex konzipiert und kann über Schlüsselwörter wie 'API-Design', 'REST', 'GraphQL', 'tRPC', 'gRPC', 'Endpunkt', 'Schema', 'Route', 'OpenAPI', 'Swagger', 'API-Versionierung', 'Paginierung', 'API-Vertrag' und 'HTTP-Methoden' ausgelöst werden.

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

In Ihrer bevorzugten KI fragen

Öffnet einen neuen Chat, in dem dieser Agent-Skill bereits geladen ist.

Dokumentation

API-Design

Den richtigen API-Typ wählen

TypAm besten geeignet fürVermeiden bei
RESTÖffentliche APIs, CRUD, einfache Clients, IoTKomplexe verschachtelte Daten, schnelle Schema-Änderungen
GraphQLMobile Apps, komplexe verschachtelte Daten, mehrere ClientsEinfaches CRUD, kleine Teams, die neu darin sind
tRPCTypeScript-Monorepos, interne Full-Stack-TS-APIsNicht-TypeScript-Clients, öffentliche APIs
gRPCHochleistungs-Mikroservice-Kommunikation, StreamingBrowser-Clients, einfache Anwendungsfälle

REST-API-Design

URL-Konventionen

GET    /users              ← Liste
GET    /users/{id}         ← Einzelnes
POST   /users              ← Erstellen
PUT    /users/{id}         ← Ersetzen
PATCH  /users/{id}         ← Teilweises Aktualisieren
DELETE /users/{id}         ← Löschen

# Verschachtelte Ressourcen
GET    /users/{id}/orders
POST   /users/{id}/orders

# Aktionen (wenn REST-Verben nicht ausreichen)
POST   /orders/{id}/cancel
POST   /users/{id}/activate

HTTP-Statuscodes

CodeVerwenden, wenn
200Erfolgreiches GET, PUT, PATCH
201Erfolgreiches POST, das erstellt
204Erfolgreiches DELETE (kein Body)
400Validierungsfehler, fehlerhafte Anfrage
401Fehlende/ungültige Authentifizierung
403Authentifiziert, aber nicht autorisiert
404Ressource nicht gefunden
409Konflikt (Duplikat, Versionskonflikt)
422Nicht verarbeitbare Entität (semantische Fehler)
429Ratenlimit überschritten
500Unerwarteter Serverfehler

Antwort-Hülle

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

// Einzelne Ressource
{ "data": { "id": "1", "name": "James" } }

// Fehler
{
  "error": {
    "code": "VALIDATION_ERROR",
    "message": "Validierung fehlgeschlagen",
    "details": [{ "field": "email", "issue": "Ungültiges Format" }]
  }
}

API-Design-Prinzipien

Versionierungsstrategie

# URL-Versionierung (am sichtbarsten, am einfachsten zu routen)
/v1/users
/v2/users

# Header-Versionierung (sauberere URLs)
Accept: application/vnd.api+json;version=2

Brechen Sie niemals bestehende Clients. Kündigen Sie die Abschaffung an, dann entfernen Sie.

Paginierung

# Offset (einfach, gut für kleine Datensätze)
GET /posts?page=2&perPage=20

# Cursor (schnell für große Datensätze, für unendliches Scrollen verwenden)
GET /posts?cursor=eyJpZCI6MTAwfQ&limit=20

Filtern & Sortieren

GET /orders?status=pending&userId=123
GET /products?sort=-price,name    # - Präfix = absteigend
GET /products?fields=id,name,price  # Sparse Fieldsets

Idempotenz

# Idempotenzschlüssel für nicht-idempotente Operationen einfügen
POST /payments
Idempotency-Key: unique-client-generated-uuid

GraphQL-Design

Schema-Design-Regeln

  • Beschreiben Sie die Geschäftsdomäne, nicht die DB-Struktur
  • Verwenden Sie das Verbindungsmuster für Listen (paginierungsbereit)
  • Mutationen geben das geänderte Objekt zurück
  • Verwenden Sie Enums für endliche Wertemengen
  • Fügen Sie Beschreibungen zu allen Typen und Feldern hinzu
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!
}

API-Sicherheitscheckliste

  • Alle Endpunkte erfordern Authentifizierung (sofern nicht explizit öffentlich)
  • Berechtigungsprüfung pro Ressource, nicht nur pro Route
  • Ratenbegrenzung für alle Endpunkte, strenger für Auth-Endpunkte
  • Eingabevalidierung für jeden Parameter und jedes Body-Feld
  • Sensible Daten werden nur zurückgegeben, wenn explizit benötigt
  • CORS mit expliziter Whitelist konfiguriert
  • API-Versionierungsstrategie vor der Veröffentlichung definiert

Individual skills in this repo

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

Verwandte Skills