api-organization
使用5文件模式组织API
API代码在代码库中变得分散且不一致。本技能提供了一个标准化的5文件模式,用于组织API端点、类型和客户端,具有完整的TypeScript安全性和基于角色的访问控制。
Baixar o ZIP da skill
Upload no Claude
Vá em Configurações → Capacidades → Skills → Upload skill
Ative e comece a usar
Testar
A utilizar "api-organization". How do I organize API endpoints for a new 'expenses' feature?
Resultado esperado:
- 在src/lib/api/中创建这些文件:
- • endpoint-types.ts - 定义Expense和CreateExpenseDto类型,添加到EndpointParams/Responses/Bodies接口
- • endpoints.ts - 添加expenses: { list, get, create, update, delete }函数返回URL
- • api-client.ts - 使用getAuthHeaders()自动提取Supabase令牌
- • admin-api-client.ts - 为管理员操作添加checkAdminPermission()
- • protected-endpoints.ts - 导出api.expenses对象,具有类型安全的包装函数
Auditoria de Segurança
SeguroPure documentation skill containing only markdown files with architectural guidance. All static findings are false positives triggered by code examples in documentation blocks. No executable code, network calls, file system access beyond its own files, or code execution capabilities exist. The backticks, environment variable references, and URLs detected are documentation examples, not actual shell commands, credential access, or network requests.
Fatores de risco
⚙️ Comandos externos (235)
🌐 Acesso à rede (7)
🔑 Variáveis de ambiente (18)
📁 Acesso ao sistema de arquivos (1)
Pontuação de qualidade
O Que Você Pode Construir
设置API架构
学习5文件模式,在Next.js项目中组织带有Supabase认证的API代码。
强制执行API标准
通过类型安全模式和基于角色的访问,在团队中建立一致的API结构。
文档化认证流程
了解Supabase认证如何与API客户端集成以实现自动认证。
Tente Estes Prompts
展示如何在endpoint-types.ts中为新的'transactions'域添加CRUD操作的类型。包括参数、响应和请求体类型。
我应该如何为'budgets'资源构建endpoints.ts?展示列表、获取、创建、更新和删除操作的模式。
在protected-endpoints.ts中为'categories'域创建包装函数。包括通过Supabase的自动认证。
如何为'users'域添加仅管理员端点?展示带有角色检查的admin-api-client模式。
Melhores Práticas
- 在实现端点函数之前定义所有TypeScript类型以确保类型安全
- 在api-client中使用getAuthHeaders()自动提取Supabase访问令牌
- 在任何仅管理员API操作之前调用checkAdminPermission()
- 将端点URL保存在一个集中的文件中以便维护
Evitar
- 硬编码URL而不是使用API_ENDPOINTS常量
- 跳过类型定义并对API响应使用'any'
- 直接进行API调用而不使用protected-endpoints包装器
- 在管理员操作之前忘记调用checkAdminPermission()