'use client'; import { useState } from 'react'; import { loginApiV1AuthLoginPost, registerApiV1AuthRegisterPost, getCurrentUserApiV1AuthMeGet, getAllUsersApiV1AuthUsersGet, logoutApiV1AuthLogoutPost, rootGet, healthCheckHealthGet, type UserLogin, type UserRegister, type ApiResponse } from '@/lib/api'; import { Button } from '@/components/ui/button'; import { Input } from '@/components/ui/input'; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card'; import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs'; import { Badge } from '@/components/ui/badge'; import { Alert, AlertDescription } from '@/components/ui/alert'; import { ScrollArea } from '@/components/ui/scroll-area'; import { Separator } from '@/components/ui/separator'; export default function ApiExamplePage() { const [loading, setLoading] = useState(false); const [results, setResults] = useState([]); const [errors, setErrors] = useState([]); // 登录表单状态 const [loginData, setLoginData] = useState({ username: '', password: '' }); // 注册表单状态 const [registerData, setRegisterData] = useState({ username: '', password: '' }); // 添加结果到显示列表 const addResult = (type: string, input: any, output: any, error?: string) => { const result = { id: Date.now(), type, input, output, error, timestamp: new Date().toLocaleTimeString() }; setResults(prev => [result, ...prev]); if (error) { setErrors(prev => [error, ...prev]); } }; // 清空结果 const clearResults = () => { setResults([]); setErrors([]); }; // 用户登录 const handleLogin = async () => { setLoading(true); try { addResult('用户登录', '登录请求', '发送中...'); const response = await loginApiV1AuthLoginPost({ body: loginData }); if (response.data) { addResult('用户登录', loginData, response.data); } else if (response.error) { addResult('用户登录', loginData, null, JSON.stringify(response.error)); } } catch (error: any) { addResult('用户登录', loginData, null, error.message); } finally { setLoading(false); } }; // 用户注册 const handleRegister = async () => { setLoading(true); try { addResult('用户注册', '注册请求', '发送中...'); const response = await registerApiV1AuthRegisterPost({ body: registerData }); if (response.data) { addResult('用户注册', registerData, response.data); } else if (response.error) { addResult('用户注册', registerData, null, JSON.stringify(response.error)); } } catch (error: any) { addResult('用户注册', registerData, null, error.message); } finally { setLoading(false); } }; // 获取当前用户信息 const handleGetCurrentUser = async () => { setLoading(true); try { addResult('获取当前用户', 'GET /api/v1/auth/me', '发送中...'); const response = await getCurrentUserApiV1AuthMeGet({}); if (response.data) { addResult('获取当前用户', '无参数', response.data); } else if (response.error) { addResult('获取当前用户', '无参数', null, JSON.stringify(response.error)); } } catch (error: any) { addResult('获取当前用户', '无参数', null, error.message); } finally { setLoading(false); } }; // 获取所有用户 const handleGetAllUsers = async () => { setLoading(true); try { addResult('获取所有用户', 'GET /api/v1/auth/users', '发送中...'); const response = await getAllUsersApiV1AuthUsersGet({}); if (response.data) { addResult('获取所有用户', '无参数', response.data); } else if (response.error) { addResult('获取所有用户', '无参数', null, JSON.stringify(response.error)); } } catch (error: any) { addResult('获取所有用户', '无参数', null, error.message); } finally { setLoading(false); } }; // 用户登出 const handleLogout = async () => { setLoading(true); try { addResult('用户登出', 'POST /api/v1/auth/logout', '发送中...'); const response = await logoutApiV1AuthLogoutPost({}); if (response.data) { addResult('用户登出', '无参数', response.data); } else if (response.error) { addResult('用户登出', '无参数', null, JSON.stringify(response.error)); } } catch (error: any) { addResult('用户登出', '无参数', null, error.message); } finally { setLoading(false); } }; return (

OpenAPI 接口测试

交互式测试 接口示例
{/* 左侧:API 操作面板 */} API 操作 使用 @hey-api/openapi-ts 生成的接口函数 认证操作 用户操作 {/* 登录表单 */}

用户登录

setLoginData(prev => ({ ...prev, username: e.target.value }))} /> setLoginData(prev => ({ ...prev, password: e.target.value }))} />
{/* 注册表单 */}

用户注册

setRegisterData(prev => ({ ...prev, username: e.target.value }))} /> setRegisterData(prev => ({ ...prev, password: e.target.value }))} />
{/* 右侧:结果显示面板 */} 请求 & 响应结果 显示 API 调用的输入和输出结果
{results.length === 0 ? (

暂无 API 调用记录

请在左侧面板中操作 API 接口

) : ( results.map((result) => (

{result.type}

{result.timestamp} {result.error ? ( 错误 ) : ( 成功 )}
{/* 输入数据 */}

输入数据:

                              {JSON.stringify(result.input, null, 2)}
                            
{/* 输出数据 */}

{result.error ? '错误信息:' : '响应数据:'}

                              {result.error || JSON.stringify(result.output, null, 2)}
                            
)) )}
{/* 错误提示 */} {errors.length > 0 && (
最近发生了 {errors.length} 个错误,请查看右侧结果面板中的详细信息。
)}
); } // API示例页面组件 function ApiExamplesPage() { const [examplesLoading, setExamplesLoading] = useState>({}); const [examplesResults, setExamplesResults] = useState>({}); // API示例配置 - 基于openapi.json const apiExamples = [ { id: 'login', method: 'POST', path: '/api/v1/auth/login', title: '用户登录', description: '用户登录接口', exampleParams: { username: 'admin', password: 'admin123' }, expectedOutput: { success: true, message: '登录成功', data: { token: 'jwt_token_here' } } }, { id: 'register', method: 'POST', path: '/api/v1/auth/register', title: '用户注册', description: '用户注册接口', exampleParams: { username: 'newuser', password: 'newpassword' }, expectedOutput: { success: true, message: '注册成功', data: { user_id: 1, username: 'newuser' } } }, { id: 'me', method: 'GET', path: '/api/v1/auth/me', title: '获取当前用户信息', description: '获取当前登录用户的信息', exampleParams: null, expectedOutput: { success: true, message: '获取用户信息成功', data: { user_id: 1, username: 'admin' } } }, { id: 'logout', method: 'POST', path: '/api/v1/auth/logout', title: '用户登出', description: '用户登出接口', exampleParams: null, expectedOutput: { success: true, message: '登出成功', data: null } }, { id: 'users', method: 'GET', path: '/api/v1/auth/users', title: '获取所有用户列表', description: '获取系统中所有用户的列表 (仅用于演示)', exampleParams: null, expectedOutput: { success: true, message: '获取用户列表成功', data: [{ user_id: 1, username: 'admin' }] } }, { id: 'root', method: 'GET', path: '/', title: '根路径', description: 'API根路径,用于测试连接', exampleParams: null, expectedOutput: {} }, { id: 'health', method: 'GET', path: '/health', title: '健康检查', description: 'API健康检查接口', exampleParams: null, expectedOutput: { status: 'healthy' } } ]; // 调用示例API const callExampleApi = async (example: typeof apiExamples[0]) => { setExamplesLoading(prev => ({ ...prev, [example.id]: true })); try { let response; switch (example.id) { case 'login': response = await loginApiV1AuthLoginPost({ body: example.exampleParams }); break; case 'register': response = await registerApiV1AuthRegisterPost({ body: example.exampleParams }); break; case 'me': response = await getCurrentUserApiV1AuthMeGet({}); break; case 'logout': response = await logoutApiV1AuthLogoutPost({}); break; case 'users': response = await getAllUsersApiV1AuthUsersGet({}); break; case 'root': response = await rootGet({}); break; case 'health': response = await healthCheckHealthGet({}); break; default: throw new Error('Unknown API example'); } setExamplesResults(prev => ({ ...prev, [example.id]: { success: !response.error, data: response.data, error: response.error, input: example.exampleParams, timestamp: new Date().toLocaleTimeString() } })); } catch (error: any) { setExamplesResults(prev => ({ ...prev, [example.id]: { success: false, error: error.message, input: example.exampleParams, timestamp: new Date().toLocaleTimeString() } })); } finally { setExamplesLoading(prev => ({ ...prev, [example.id]: false })); } }; // 批量调用所有示例 const callAllExamples = async () => { // 先调用登录接口获取token await callExampleApi(apiExamples[0]); // 然后调用其他接口 for (const example of apiExamples.slice(1)) { await new Promise(resolve => setTimeout(resolve, 100)); // 间隔100ms await callExampleApi(example); } }; return (

接口示例集合

基于OpenAPI规范自动生成的所有接口示例,点击按钮即可测试

{apiExamples.map((example) => (
{example.title} {example.method} {example.path}
{example.method}

{example.description}

{/* 示例参数 */}

示例参数:

{example.exampleParams ? (
                    {JSON.stringify(example.exampleParams, null, 2)}
                  
) : (

无参数

)}
{/* 预期输出 */}

预期输出:

                  {JSON.stringify(example.expectedOutput, null, 2)}
                
{/* 实际结果 */} {examplesResults[example.id] && (

实际结果 ({examplesResults[example.id].timestamp})

{examplesResults[example.id].success ? '成功' : '失败'}
                    {examplesResults[example.id].error
                      ? JSON.stringify(examplesResults[example.id].error, null, 2)
                      : JSON.stringify(examplesResults[example.id].data, null, 2)
                    }
                  
)}
))}
{/* 统计信息 */} 测试统计

{Object.values(examplesResults).filter(r => r?.success).length}

成功

{Object.values(examplesResults).filter(r => r?.success === false).length}

失败

{apiExamples.length}

总计

); }