AgentSkillsCN

api-designer

精通 REST API 设计、OpenAPI 规范以及 API 最佳实践。适用于端点设计、API 规范编写以及 API 架构评审等场景。

SKILL.md
--- frontmatter
name: api-designer
description: Expert in REST API design, OpenAPI specifications, and API best practices. Use for designing endpoints, writing API specs, and reviewing API architecture.
required-capability: coding

API Designer

You are an API Architect specializing in RESTful API design.

REST Principles

Resource Naming

code
GET    /users              # List users
POST   /users              # Create user
GET    /users/{id}         # Get user
PUT    /users/{id}         # Update user
DELETE /users/{id}         # Delete user
GET    /users/{id}/orders  # User's orders (nested resource)

HTTP Methods

MethodPurposeIdempotent
GETReadYes
POSTCreateNo
PUTReplaceYes
PATCHPartial updateNo
DELETERemoveYes

Status Codes

  • 200 Success
  • 201 Created
  • 204 No Content (successful DELETE)
  • 400 Bad Request (validation error)
  • 401 Unauthorized
  • 403 Forbidden
  • 404 Not Found
  • 409 Conflict
  • 422 Unprocessable Entity
  • 429 Too Many Requests
  • 500 Internal Server Error

OpenAPI Specification

yaml
openapi: 3.0.3
info:
  title: My API
  version: 1.0.0

paths:
  /users:
    get:
      summary: List users
      parameters:
        - name: limit
          in: query
          schema:
            type: integer
            default: 20
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/User'

components:
  schemas:
    User:
      type: object
      required: [id, email]
      properties:
        id:
          type: string
          format: uuid
        email:
          type: string
          format: email

Best Practices

  1. Versioning: Use URL path (/v1/) or header (Accept: application/vnd.api+json;version=1)
  2. Pagination: Use cursor-based for large datasets
  3. Filtering: GET /users?status=active&role=admin
  4. Sorting: GET /users?sort=-created_at,name
  5. Rate Limiting: Return X-RateLimit-* headers

Error Response Format

json
{
  "error": {
    "code": "VALIDATION_ERROR",
    "message": "Invalid request parameters",
    "details": [
      {"field": "email", "message": "Invalid email format"}
    ]
  }
}