Skip to content

RESTful API 示例

完整的 RESTful API 客户端实现。

定义类型

typescript
interface User {
  id: number;
  name: string;
  email: string;
  createdAt: string;
}

interface CreateUserDto {
  name: string;
  email: string;
}

interface UpdateUserDto {
  name?: string;
  email?: string;
}

创建 API 客户端

typescript
import { Request } from '@ureq/core';
import { FetchRequestor } from '@ureq/impl-fetch';

const request = new Request(
  new FetchRequestor({
    baseURL: 'https://api.example.com',
    headers: {
      'Content-Type': 'application/json'
    }
  }),
  {
    retry: { maxRetries: 3 },
    cache: { ttl: 60000 },
    timeout: { timeout: 5000 }
  }
);

// 添加认证
request.interceptors.addRequestInterceptor({
  onRequest: (config) => {
    const token = localStorage.getItem('token');
    if (token) {
      config.headers = {
        ...config.headers,
        'Authorization': `Bearer ${token}`
      };
    }
    return config;
  }
});

API 方法

typescript
class UserAPI {
  // 获取用户列表
  static async getUsers(params?: {
    page?: number;
    limit?: number;
    sort?: string;
  }): Promise<User[]> {
    return request.get<User[]>('/users', { params });
  }

  // 获取单个用户
  static async getUser(id: number): Promise<User> {
    return request.get<User>(`/users/${id}`);
  }

  // 创建用户
  static async createUser(data: CreateUserDto): Promise<User> {
    return request.post<User>('/users', data);
  }

  // 更新用户
  static async updateUser(id: number, data: UpdateUserDto): Promise<User> {
    return request.put<User>(`/users/${id}`, data);
  }

  // 部分更新用户
  static async patchUser(id: number, data: Partial<User>): Promise<User> {
    return request.patch<User>(`/users/${id}`, data);
  }

  // 删除用户
  static async deleteUser(id: number): Promise<void> {
    return request.delete(`/users/${id}`);
  }

  // 搜索用户
  static async searchUsers(keyword: string): Promise<User[]> {
    return request.get<User[]>('/users/search', {
      params: { q: keyword }
    });
  }
}

使用示例

typescript
async function main() {
  try {
    // 获取用户列表
    const users = await UserAPI.getUsers({ page: 1, limit: 10 });
    console.log('Users:', users);

    // 创建新用户
    const newUser = await UserAPI.createUser({
      name: 'John Doe',
      email: 'john@example.com'
    });
    console.log('Created:', newUser);

    // 获取用户详情
    const user = await UserAPI.getUser(newUser.id);
    console.log('User:', user);

    // 更新用户
    const updated = await UserAPI.updateUser(newUser.id, {
      name: 'Jane Doe'
    });
    console.log('Updated:', updated);

    // 部分更新
    const patched = await UserAPI.patchUser(newUser.id, {
      email: 'jane@example.com'
    });
    console.log('Patched:', patched);

    // 搜索用户
    const searchResults = await UserAPI.searchUsers('jane');
    console.log('Search results:', searchResults);

    // 删除用户
    await UserAPI.deleteUser(newUser.id);
    console.log('Deleted');
  } catch (error) {
    console.error('Error:', error);
  }
}

main();

错误处理

typescript
class UserAPI {
  static async getUser(id: number): Promise<User | null> {
    try {
      return await request.get<User>(`/users/${id}`);
    } catch (error) {
      if (error.status === 404) {
        return null;
      }
      throw error;
    }
  }

  static async createUser(data: CreateUserDto): Promise<User> {
    try {
      return await request.post<User>('/users', data);
    } catch (error) {
      if (error.status === 422) {
        throw new Error('数据验证失败: ' + error.response?.message);
      }
      throw error;
    }
  }
}

相关

Released under the MIT License.