Práctica de API RESTful

Mejores prácticas de seguridad

1. Autenticación y autorización

// 使用 JWT Token 进行身份验证
GET /api/users/profile
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...

// API 响应包含用户权限检查
{
  "success": true,
  "data": {
    "id": 123,
    "name": "张三",
    "role": "user"
  }
}

2. Validación de entrada

// 服务器端验证示例
POST /api/users
{
  "email": "[email protected]",
  "password": "123"  // 密码太短
}

// 验证失败响应
{
  "success": false,
  "error": {
    "code": "VALIDATION_ERROR",
    "message": "密码长度至少为8位"
  }
}

3. HTTPS y cifrado de datos

  • ✅ https://api.example.com/users
  • ❌ http://api.example.com/users

Prácticas de optimización del rendimiento

1. Paginación de datos

// 避免一次返回大量数据
GET /api/users?page=1&limit=20

{
  "success": true,
  "data": [...], // 只返回20条记录
  "pagination": {
    "currentPage": 1,
    "totalPages": 50,
    "totalItems": 1000
  }
}

2. Filtrado de campos

// 只返回需要的字段
GET /api/users?fields=id,name,email

{
  "success": true,
  "data": [
    {
      "id": 1,
      "name": "张三",
      "email": "[email protected]"
      // 不返回其他不需要的字段
    }
  ]
}

3. Estrategias de caché

// 使用缓存头
GET /api/users/123
Cache-Control: max-age=3600  // 缓存1小时

// 条件请求
GET /api/users/123
If-None-Match: "etag-value"

// 304 Not Modified (数据未变化)

Mejores prácticas de manejo de errores

Formato de error unificado

{
  "success": false,
  "error": {
    "code": "SPECIFIC_ERROR_CODE",    // 机器可读的错误码
    "message": "用户友好的错误信息",      // 人类可读的错误信息
    "details": {...},                // 详细错误信息(可选)
    "timestamp": "2024-01-15T10:00:00Z"
  }
}

Diseño de códigos de error comunes

const ERROR_CODES = {
  // 4xx 客户端错误
  'VALIDATION_ERROR': 400,        // 数据验证失败
  'UNAUTHORIZED': 401,            // 未授权
  'FORBIDDEN': 403,              // 禁止访问
  'NOT_FOUND': 404,              // 资源不存在
  'METHOD_NOT_ALLOWED': 405,     // 方法不允许
  'CONFLICT': 409,               // 资源冲突
  
  // 5xx 服务器错误
  'INTERNAL_ERROR': 500,         // 内部服务器错误
  'SERVICE_UNAVAILABLE': 503     // 服务不可用
}

Documentación de API

Uso de formato de documentación estandarizado

Se recomienda usar la especificación OpenAPI (Swagger):

# swagger.yaml 示例
openapi: 3.0.0
info:
  title: 用户管理 API
  version: 1.0.0
  description: 提供用户的增删改查功能

paths:
  /api/users:
    get:
      summary: 获取用户列表
      parameters:
        - name: page
          in: query
          description: 页码
          schema:
            type: integer
            default: 1
      responses:
        '200':
          description: 成功
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/User'

Estrategias de control de versiones

Control de versiones por URL (recomendado)

// 版本1
GET /api/v1/users

// 版本2(新增字段,保持向后兼容)
GET /api/v2/users
{
  "id": 1,
  "name": "张三",
  "email": "[email protected]",
  "avatar": "https://example.com/avatar.jpg"  // 新增字段
}

Manejo de compatibilidad

// 保持向后兼容的策略
{
  "deprecationWarning": "该 API 版本将在2024年6月1日后停止支持,请升级到 v2",
  "data": {...}
}

Ejercicios prácticos

Ejercicio 1: API de sistema de gestión de libros

Diseñe un sistema simple de gestión de libros con las siguientes funciones:

Análisis de requisitos

  • Gestionar información de libros (título, autor, ISBN, precio)
  • Gestionar categorías de libros
  • Compatible con alta, baja, modificación y consulta de libros
  • Compatible con filtrar libros por categoría

Ejercicio de diseño de API

Diseñe los siguientes endpoints de API:

// 你的任务:完善以下 API 设计

// 图书相关
GET    /api/books                    // 获取图书列表
GET    /api/books/{id}              // 获取特定图书
POST   /api/books                   // 创建新图书
PUT    /api/books/{id}              // 更新图书信息
DELETE /api/books/{id}              // 删除图书

// 分类相关
GET    /api/categories              // 获取分类列表
GET    /api/categories/{id}/books   // 获取分类下的图书

Estructura de datos de ejemplo:

{
  "id": 1,
  "title": "JavaScript 高级程序设计",
  "author": "Nicholas C. Zakas",
  "isbn": "9787115275790",
  "price": 99.00,
  "categoryId": 1,
  "category": {
    "id": 1,
    "name": "编程技术"
  },
  "publishedDate": "2012-03-01",
  "description": "深入理解JavaScript语言",
  "stock": 50
}

Tareas del ejercicio

  1. Diseñe la documentación de la API: escriba ejemplos detallados de solicitudes y respuestas para cada endpoint
  2. Manejo de errores: diseñe el formato de respuesta para diversas situaciones de error
  3. Validación de datos: enumere las reglas de validación para cada campo
  4. Casos de prueba: escriba comandos curl para probar cada API

Ejercicio 2: API de tareas pendientes

Cree una API de gestión de tareas pendientes:

Requisitos funcionales

  • Crear, ver, actualizar y eliminar tareas pendientes
  • Marcar el estado de completado de las tareas
  • Filtrar tareas por estado
  • Compatible con prioridad de tareas

Diseño del modelo de datos

{
  "id": 1,
  "title": "学习 RESTful API",
  "description": "完成 API 教程的学习",
  "status": "pending",  // pending, completed, cancelled
  "priority": "high",   // low, medium, high
  "dueDate": "2024-01-20",
  "createdAt": "2024-01-15T08:00:00Z",
  "updatedAt": "2024-01-15T08:00:00Z"
}

Tareas desafiantes

  1. Operaciones por lotes: diseñe una API para actualizar el estado de tareas en lote
  2. Función de búsqueda: compatible con búsqueda por título y descripción
  3. Información estadística: devuelve estadísticas sobre el estado de finalización de tareas

Ejercicio 3: API de red social

Diseñe la API de una plataforma de redes sociales simplificada:

Funciones principales

  • Registro e inicio de sesión de usuarios
  • Publicar y ver publicaciones
  • Seguir a otros usuarios
  • Me gusta y comentarios

Diseño de la estructura de la API

// 用户相关
POST /api/auth/register     // 用户注册
POST /api/auth/login        // 用户登录
GET  /api/users/profile     // 获取个人资料

// 动态相关
GET  /api/posts            // 获取动态列表
POST /api/posts            // 发布新动态
GET  /api/posts/{id}       // 获取特定动态
DELETE /api/posts/{id}     // 删除动态

// 互动相关
POST /api/posts/{id}/like     // 点赞动态
POST /api/posts/{id}/comments // 添加评论
GET  /api/posts/{id}/comments // 获取评论列表

Diseño de funciones avanzadas

  1. Sistema de seguimiento: relaciones de seguimiento entre usuarios
  2. Notificaciones push: mecanismo de notificación de nuevas interacciones
  3. Moderación de contenido: filtrado de contenido sensible
Otras extensiones