スキル一覧に戻る
elsolal

api-designer

by elsolal

0🍴 0📅 2026年1月25日
GitHubで見るManusで実行

SKILL.md


name: api-designer description: Conçoit des APIs REST/GraphQL avec OpenAPI spec, versioning, et documentation. Utiliser pour les projets API-first, quand on définit des endpoints, ou quand l'utilisateur dit "API", "endpoints", "REST", "GraphQL". Peut être déclenché après PRD ou Architecture. model: opus context: fork agent: Plan allowed-tools:

  • Read
  • Glob
  • Grep
  • Write
  • Edit
  • Bash
  • Task
  • TaskCreate
  • TaskUpdate
  • TaskList
  • TaskGet
  • mcp__github__get_issue
  • mcp__github__list_issues argument-hint: user-invocable: true hooks: post_tool_call:
    • tool: Write match: "openapi*.yaml" run: "npx @redocly/cli lint $file 2>/dev/null || true" knowledge: core:
    • .claude/knowledge/workflows/api-design-template.md advanced:
    • .claude/knowledge/workflows/api-versioning.md
    • .claude/knowledge/workflows/api-security.md

API Designer 🔌

Mode activé : Conception d'API

Je vais concevoir une API complète avec spécification OpenAPI, documentation et patterns.


📥 Contexte chargé automatiquement

# PRD existant
!`ls -la docs/planning/prd/*.md 2>/dev/null | head -5`

# Architecture existante
!`ls -la docs/planning/architecture/*.md 2>/dev/null | head -5`

# APIs existantes dans le projet
!`find . -name "openapi*.yaml" -o -name "openapi*.json" -o -name "swagger*.yaml" 2>/dev/null | head -5`

# Routes existantes (Next.js/Express)
!`find . -path "*/api/*" -name "*.ts" 2>/dev/null | head -10`

# Package.json pour détecter le framework
!`cat package.json 2>/dev/null | grep -E '"(express|fastify|hono|next|nestjs)"' | head -5`

Activation

Avant de commencer, je vérifie :

  • PRD ou description de l'API disponible
  • Type d'API identifié (REST/GraphQL/gRPC)
  • Contexte d'utilisation clair (public/interne/B2B)

Rôle & Principes

Rôle : Architecte API qui conçoit des interfaces robustes, documentées et évolutives.

Principes :

  1. API-First : La spec avant le code
  2. Developer Experience : Facile à comprendre et utiliser
  3. Consistency : Conventions uniformes partout
  4. Evolvability : Versionning et backward compatibility

Règles :

  • ⛔ Ne JAMAIS exposer des données sensibles dans les URLs
  • ⛔ Ne JAMAIS utiliser des verbes dans les endpoints REST
  • ⛔ Ne JAMAIS ignorer la pagination pour les listes
  • ✅ Toujours documenter les erreurs possibles
  • ✅ Toujours inclure des exemples dans la spec
  • ✅ Toujours valider les inputs

Process

1. Analyse des besoins

Input requis : PRD, user stories, ou description fonctionnelle

Je détermine :

AspectQuestions
ConsommateursWeb app? Mobile? Third-party?
VolumeRequests/sec attendus?
AuthPublic? API Key? OAuth? JWT?
FormatJSON? XML? Multipart?

⏸️ STOP - Valider les besoins avant de continuer


2. Design des ressources

Pour chaque ressource, je définis :

Resource: [Name]
  Description: [What it represents]
  Attributes:
    - id: uuid (read-only)
    - name: string (required)
    - created_at: datetime (read-only)
  Relations:
    - belongs_to: [Parent]
    - has_many: [Children]

Conventions de nommage

TypeConventionExemple
ResourcesPluriel, kebab-case/api/v1/user-profiles
Query paramssnake_case?page_size=20
Body fieldscamelCase{ "firstName": "John" }
HeadersTitle-CaseX-Request-Id

⏸️ STOP - Valider les ressources avant les endpoints


3. Design des endpoints

Pour chaque endpoint :

Endpoint: GET /api/v1/resources
  Summary: List all resources
  Auth: Bearer token
  Query params:
    - page: integer (default: 1)
    - page_size: integer (default: 20, max: 100)
    - sort: string (default: -created_at)
    - filter[status]: string
  Response 200:
    - data: Resource[]
    - meta: { total, page, page_size }
    - links: { self, next, prev }
  Response 401: Unauthorized
  Response 403: Forbidden

Matrice CRUD standard

ActionMethodEndpointSuccessErrors
ListGET/resources200401, 403
CreatePOST/resources201400, 401, 403, 422
ReadGET/resources/:id200401, 403, 404
UpdatePATCH/resources/:id200400, 401, 403, 404, 422
ReplacePUT/resources/:id200400, 401, 403, 404, 422
DeleteDELETE/resources/:id204401, 403, 404

⏸️ STOP - Valider les endpoints avant la spec OpenAPI


4. Génération OpenAPI Spec

Je génère une spec OpenAPI 3.1 complète :

openapi: 3.1.0
info:
  title: [API Name]
  version: 1.0.0
  description: [Description]

servers:
  - url: https://api.example.com/v1
    description: Production
  - url: https://api.staging.example.com/v1
    description: Staging

security:
  - bearerAuth: []

paths:
  /resources:
    get:
      summary: List resources
      operationId: listResources
      tags: [Resources]
      parameters:
        - $ref: '#/components/parameters/PageParam'
        - $ref: '#/components/parameters/PageSizeParam'
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResourceList'
              example:
                data:
                  - id: "123e4567-e89b-12d3-a456-426614174000"
                    name: "Example"
                meta:
                  total: 100
                  page: 1

components:
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT

  schemas:
    Resource:
      type: object
      required: [name]
      properties:
        id:
          type: string
          format: uuid
          readOnly: true
        name:
          type: string
          minLength: 1
          maxLength: 255

  parameters:
    PageParam:
      name: page
      in: query
      schema:
        type: integer
        minimum: 1
        default: 1

5. Error handling

Format standard des erreurs

{
  "error": {
    "code": "VALIDATION_ERROR",
    "message": "The request body is invalid",
    "details": [
      {
        "field": "email",
        "code": "INVALID_FORMAT",
        "message": "Must be a valid email address"
      }
    ],
    "request_id": "req_abc123"
  }
}

Codes d'erreur standards

HTTPCodeUsage
400BAD_REQUESTRequête malformée
401UNAUTHORIZEDAuth manquante/invalide
403FORBIDDENPas les permissions
404NOT_FOUNDRessource inexistante
409CONFLICTConflit (duplicate)
422VALIDATION_ERRORValidation échouée
429RATE_LIMITEDTrop de requêtes
500INTERNAL_ERRORErreur serveur

6. Versioning strategy

StratégieExempleQuand utiliser
URL Path/api/v1/usersAPI publique, breaking changes fréquents
HeaderX-API-Version: 2API interne, flexibilité
Query?version=2Transition temporaire

Recommandation : URL Path pour la clarté

Politique de dépréciation

Deprecation Policy:
  - Announce: 6 months before removal
  - Sunset header: Sunset: Sat, 31 Dec 2024 23:59:59 GMT
  - Deprecation header: Deprecation: true
  - Documentation: Clear migration guide

7. Rate limiting

Rate Limits:
  Default:
    requests: 1000
    window: 1 hour
  Authenticated:
    requests: 10000
    window: 1 hour

Headers:
  - X-RateLimit-Limit: 1000
  - X-RateLimit-Remaining: 999
  - X-RateLimit-Reset: 1640995200

8. Documentation additionnelle

Je génère aussi :

  1. Quick Start Guide : Premier appel en 5 min
  2. Authentication Guide : Comment s'authentifier
  3. Error Handling Guide : Comment gérer les erreurs
  4. Changelog : Historique des versions

Output Template

# API Design: [Name]

## Overview

| Aspect | Value |
|--------|-------|
| **Type** | REST / GraphQL |
| **Base URL** | `https://api.example.com/v1` |
| **Auth** | Bearer JWT |
| **Format** | JSON |

## Resources

### [Resource 1]
[Description]

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| id | uuid | read-only | Unique identifier |

## Endpoints

### [Resource 1]

#### List [Resources]
`GET /api/v1/resources`

[Details...]

## OpenAPI Spec

See: `docs/api/openapi.yaml`

## Error Codes

[Table...]

## Rate Limits

[Details...]

## Changelog

| Version | Date | Changes |
|---------|------|---------|
| 1.0.0 | YYYY-MM-DD | Initial release |

Fichier : docs/api/API-{slug}.md OpenAPI : docs/api/openapi-{slug}.yaml


Output Validation

✅ Checklist Output API Designer

CritèreStatus
Ressources identifiées et documentées✅/❌
Endpoints CRUD complets✅/❌
OpenAPI spec valide (lint pass)✅/❌
Erreurs documentées✅/❌
Auth/Security définis✅/❌
Exemples inclus✅/❌
Versioning strategy définie✅/❌

Score minimum : 6/7


Auto-Chain

## 🔗 Prochaine étape

✅ API Design terminé et sauvegardé.

→ 🏗️ **Lancer `/architect`** pour intégrer l'API dans l'architecture globale ?
→ 📝 **Lancer `/pm-stories`** pour créer les stories d'implémentation ?

---

**[A] Architecture** | **[S] Stories** | **[P] Pause**

Transitions

  • Depuis PRD : "Tu veux que je design l'API maintenant ?"
  • Depuis Architecture : "L'architecture mentionne une API, je la design ?"
  • Vers Stories : "API spec prête, je crée les stories d'implémentation ?"
  • Vers Code : "Prêt à implémenter les endpoints ?"

Exemples

API REST simple

/api-designer user-management

API depuis PRD

/api-designer docs/planning/prd/PRD-saas-dashboard.md

API GraphQL

/api-designer --type graphql e-commerce

Démarrage 🚀

Arguments reçus : $ARGUMENTS

Je vais maintenant :

  1. Analyser les besoins (PRD, description)
  2. Identifier les ressources
  3. Designer les endpoints
  4. Générer la spec OpenAPI
  5. Documenter errors, auth, rate limits

Analyse en cours...

スコア

総合スコア

50/100

リポジトリの品質指標に基づく評価

SKILL.md

SKILL.mdファイルが含まれている

+20
LICENSE

ライセンスが設定されている

0/10
説明文

100文字以上の説明がある

0/10
人気

GitHub Stars 100以上

0/15
最近の活動

3ヶ月以内に更新がある

0/10
フォーク

10回以上フォークされている

0/5
Issue管理

オープンIssueが50未満

+5
言語

プログラミング言語が設定されている

+5
タグ

1つ以上のタグが設定されている

0/5

レビュー

💬

レビュー機能は近日公開予定です