بنقرة واحدة
api-development
API 開發流程引導技能,協助開發者選擇合適的開發流程(API First 或 Code First),並提供 OpenAPI 規格管理、程式碼產生等自動化支援。
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
القائمة
API 開發流程引導技能,協助開發者選擇合適的開發流程(API First 或 Code First),並提供 OpenAPI 規格管理、程式碼產生等自動化支援。
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
استنادا إلى تصنيف SOC المهني
BDD 測試實作技能,協助開發者使用 Reqnroll 撰寫行為驅動開發測試,包含 Gherkin 語法、測試步驟實作與 Docker 測試環境設定。
快取策略與多層快取設計技能,協助開發者實作 L1 Memory + L2 Redis 分層快取,包含 TTL 管理、版本控制與失效策略。
EF Core 操作與最佳化技能,協助開發者正確使用 Entity Framework Core,包含 DbContextFactory 模式、查詢最佳化、Migration 管理與反向工程。
專案初始化與配置技能,負責引導使用者完成新專案的初始化、配置設定、GitHub 範本套用與專案狀態檢測。
Repository 設計指導技能,協助開發者根據業務需求選擇最合適的 Repository 設計策略(資料表導向 vs 需求導向 vs 混合模式)。
GitHub Copilot Skill 與 Agent 設計指導技能,協助開發者設計與實作高品質的 Skill 和 Agent,包含架構設計、最佳實踐、工作流程規劃與常見反模式識別。
| name | api-development |
| description | API 開發流程引導技能,協助開發者選擇合適的開發流程(API First 或 Code First),並提供 OpenAPI 規格管理、程式碼產生等自動化支援。 |
本 SKILL 須搭配閱讀:
API 開發流程引導技能,協助開發者選擇合適的開發流程(API First 或 Code First),並提供 OpenAPI 規格管理、程式碼產生等自動化支援。
dotnet-project-template/doc/openapi.yml 編輯
node .claude/skills/shared/FileResolver.js get-content dotnet-project-template/doc/openapi.yml協助開發者根據專案需求選擇合適的 API 開發流程:
task codegen-api-servertask codegen-api-client@workspace 我想要開發新的 API 端點
使用 api-development 開發 API
graph TD
A[啟動 Skill] --> B{詢問 API 開發流程}
B -->|API First| C[檢查 OpenAPI 規格狀態]
B -->|Code First| D[跳過規格,直接實作]
C -->|已定義| E[提醒已存在定義]
C -->|需更新| F[協助更新 OpenAPI 規格]
C -->|尚未定義| G[協助建立 OpenAPI 規格]
F --> H[執行 codegen-api-server]
G --> H
H --> I[產生 Controller 骨架]
I --> J[提供 Controller 實作範本]
J --> K[詢問是否產生 Client SDK]
K -->|是| L[執行 codegen-api-client]
K -->|否| M[完成]
L --> M
D --> N[提供 Code First 指導]
N --> O[提醒後續需手動維護 OpenAPI]
O --> M
請選擇 API 開發流程:
1️⃣ API First(推薦)
✅ API 文件與實作 100% 同步
✅ 前後端可並行開發
✅ 自動產生 Client SDK
✅ 編譯時契約檢查
⚠️ 需先設計 API 規格
適用場景:
- 前後端分離且團隊並行開發
- 需要提供 Client SDK 給第三方
- API 穩定性要求高
- 多個客戶端(Web、Mobile、Desktop)
2️⃣ Code First
✅ 快速啟動開發
✅ 直接實作程式碼
⚠️ 需手動維護 API 文件
⚠️ 文件與實作可能不同步
適用場景:
- 快速原型驗證
- 內部小型專案
- API 結構仍在快速變動中
- 單人開發或小團隊
請確認 OpenAPI 規格狀態:
1️⃣ 已定義
- doc/openapi.yml 已包含此 API 的端點定義
- 我只需要產生程式碼
2️⃣ 需要更新
- doc/openapi.yml 存在但需要加入新的端點
- 我需要協助修改規格
3️⃣ 尚未定義
- doc/openapi.yml 不存在或沒有此端點
- 我需要從頭建立規格
請確認此專案的 API 開發方式:
1️⃣ API First(推薦用於團隊協作、Client SDK 需求)
- 預先定義 OpenAPI 規格(openapi.yaml)
- 自動產生 Controller 骨架
- 命名約定:XxxControllerImpl
- 適用:公開 API、大型團隊、Client SDK 分發
2️⃣ Code First(推薦用於快速原型、內部小型專案)
- 直接編寫 Controller 類別,無預先規格
- 使用 Route 和 HttpMethod 特性定義端點
- 命名約定:XxxController(無 Impl 後綴)
- 適用:快速原型、內部 API、小型團隊
⚠️ 重要:同一專案內只能選擇一種方式,不得混用
請選擇需要實作的分層(可多選):
☑️ Controller
- HTTP 請求處理與路由
- 請求驗證
- HTTP 狀態碼對應
☑️ Handler
- 業務邏輯處理
- 流程協調
- 錯誤處理與結果封裝
☑️ Repository
- 資料存取邏輯
- EF Core 操作
- 資料庫查詢封裝
提示:通常需要三層都實作以完成完整功能
是否需要產生 Client SDK?
1️⃣ 是,產生 Client SDK
- 自動產生強型別 API 客戶端
- 前端可直接使用
- 完整的 IntelliSense 支援
- 產生位置:JobBank1111.Job.Contract/AutoGenerated/
2️⃣ 否,暫不產生
- 僅產生 Server Controller
- 後續可隨時執行 task codegen-api-client
paths:
/api/v1/members:
post:
summary: 建立新會員
operationId: CreateMember
tags:
- Member
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CreateMemberRequest'
responses:
'201':
description: 會員建立成功
content:
application/json:
schema:
$ref: '#/components/schemas/MemberResponse'
'400':
description: 請求驗證失敗
content:
application/json:
schema:
$ref: '#/components/schemas/Failure'
'409':
description: Email 已被使用
content:
application/json:
schema:
$ref: '#/components/schemas/Failure'
'500':
description: 內部伺服器錯誤
content:
application/json:
schema:
$ref: '#/components/schemas/Failure'
components:
schemas:
CreateMemberRequest:
type: object
required:
- email
- name
properties:
email:
type: string
format: email
example: "user@example.com"
name:
type: string
minLength: 1
maxLength: 100
example: "張三"
phone:
type: string
pattern: '^\d{10}$'
example: "0912345678"
MemberResponse:
type: object
properties:
id:
type: string
format: uuid
email:
type: string
name:
type: string
createdAt:
type: string
format: date-time
# 執行 Taskfile 命令
task codegen-api-server
# 產生位置
# JobBank1111.Job.WebAPI/Contract/AutoGenerated/
# 執行 Taskfile 命令
task codegen-api-client
# 產生位置
# JobBank1111.Job.Contract/AutoGenerated/
產生的 Controller 骨架需要實作自動產生的介面,整合以下元件:
命名約定:使用 XxxControllerImpl 命名(Impl 後綴表示 API First 實作)
完整實作範本請參考生產代碼(透過 FileResolver):
node .claude/skills/shared/FileResolver.js get-content \
JobBank1111.Job.WebAPI/Member/MemberV1ControllerImpl.cs
無需實作自動產生的介面,直接建立 Controller 類別實作業務邏輯:
命名約定:使用 XxxController 命名(無 Impl 後綴表示 Code First 實作)
重要提醒:Code First 開發完成後,需手動維護 OpenAPI 規格文件以保持文件同步。
| 比較項目 | API First(推薦) | Code First |
|---|---|---|
| 文件同步 | ✅ 自動 100% 同步 | ❌ 需手動維護 |
| 前後端協作 | ✅ 可並行開發 | ⚠️ 需等後端完成 |
| 契約保證 | ✅ 編譯時檢查 | ❌ 執行時才發現 |
| Client SDK | ✅ 自動產生 | ❌ 需手動實作 |
| 開發速度 | ⚠️ 需先設計 API | ✅ 快速啟動 |
| 維護成本 | ✅ 低(自動同步) | ❌ 高(手動維護) |
| 團隊協作 | ✅ 優秀 | ⚠️ 一般 |
| 適用場景 | 中大型專案、團隊協作 | 小型專案、快速原型 |
編輯 doc/openapi.yml,新增 API 端點定義。
OpenAPI 規格會自動透過 FileResolver 取得(本地優先,找不到時從 GitHub 下載並快取)。開發者可在本地
dotnet-project-template/doc/openapi.yml直接編輯。
task codegen-api-server
產生檔案:
JobBank1111.Job.WebAPI/Contract/AutoGenerated/IMemberApi.cs(介面)建立 MemberController.cs 實作自動產生的介面:
[ApiController]
[Route("api/v1/members")]
public class MemberController(MemberHandler handler) : ControllerBase, IMemberApi
{
public async Task<IActionResult> CreateMember(
CreateMemberRequest request,
CancellationToken cancellationToken = default)
{
var result = await handler.CreateMemberAsync(request, cancellationToken);
return result.Match(
success => StatusCode(201, success),
failure => StatusCode(
FailureCodeMapper.ToHttpStatusCode(failure.Code),
failure)
);
}
}
Code First 開發方式適用於快速原型、內部小型專案或需要高度定制的場景。與 API First 不同,Code First 無需預先定義 OpenAPI 規格,而是直接撰寫 Controller 類別。
無需預先產生 OpenAPI 規格,直接建立 MemberController.cs(無 Impl 後綴):
[ApiController]
[Route("api/v2/members")]
public class MemberController(MemberHandler handler) : ControllerBase
{
[HttpPost]
[ProducesResponseType(typeof(MemberDto), StatusCodes.Status201Created)]
[ProducesResponseType(typeof(FailureResponse), StatusCodes.Status400BadRequest)]
public async Task<IActionResult> CreateMember(
[FromBody] CreateMemberRequest request,
CancellationToken cancellationToken = default)
{
var result = await handler.CreateMemberAsync(request, cancellationToken);
return result.Match(
success => StatusCode(201, success),
failure => StatusCode(
FailureCodeMapper.ToHttpStatusCode(failure.Code),
failure)
);
}
[HttpGet("{id}")]
[ProducesResponseType(typeof(MemberDto), StatusCodes.Status200OK)]
[ProducesResponseType(typeof(FailureResponse), StatusCodes.Status404NotFound)]
public async Task<IActionResult> GetMember(
[FromRoute] int id,
CancellationToken cancellationToken = default)
{
var result = await handler.GetMemberAsync(id, cancellationToken);
return result.Match(
success => Ok(success),
failure => StatusCode(
FailureCodeMapper.ToHttpStatusCode(failure.Code),
failure)
);
}
[HttpPut("{id}")]
[ProducesResponseType(StatusCodes.Status204NoContent)]
[ProducesResponseType(typeof(FailureResponse), StatusCodes.Status404NotFound)]
public async Task<IActionResult> UpdateMember(
[FromRoute] int id,
[FromBody] UpdateMemberRequest request,
CancellationToken cancellationToken = default)
{
var result = await handler.UpdateMemberAsync(id, request, cancellationToken);
return result.Match(
success => NoContent(),
failure => StatusCode(
FailureCodeMapper.ToHttpStatusCode(failure.Code),
failure)
);
}
[HttpDelete("{id}")]
[ProducesResponseType(StatusCodes.Status204NoContent)]
[ProducesResponseType(typeof(FailureResponse), StatusCodes.Status404NotFound)]
public async Task<IActionResult> DeleteMember(
[FromRoute] int id,
CancellationToken cancellationToken = default)
{
var result = await handler.DeleteMemberAsync(id, cancellationToken);
return result.Match(
success => NoContent(),
failure => StatusCode(
FailureCodeMapper.ToHttpStatusCode(failure.Code),
failure)
);
}
}
關鍵特徵:
與 API First 完全相同,實作 MemberHandler 和相關的 DTO、實體。
使用工具產生初始 OpenAPI 規格,或手動編寫規格文件以保持一致性:
docs/openapi.yaml 手動編寫規格,並定期與代碼同步Code First 開發完成後,可選擇自動產生 Client SDK 或手動實作 HTTP 客戶端。
| 階段 | API First | Code First |
|---|---|---|
| 規格設計 | 1-2 小時 | 0 小時(無預先規格) |
| Code 產生 | 10 分鐘 | 0 小時(無自動產生) |
| 實作階段 | 2-3 小時 | 2-3 小時 |
| 文件同步 | 0 小時 | 1-2 小時(手動維護) |
Code First 推薦:
API First 推薦:
生產代碼範例(透過 FileResolver):
node .claude/skills/shared/FileResolver.js get-content \
JobBank1111.Job.WebAPI/Member/MemberController.cs
task codegen-api-client
產生檔案:
JobBank1111.Job.Contract/AutoGenerated/IMemberApi.cs(Client 介面)JobBank1111.Job.Contract/AutoGenerated/MemberApiClient.cs(Client 實作)💡 獨立用戶提示:所有檔案參考自動使用 FileResolver 工具。 即使您沒有下載完整專案,SKILL 也會自動從 GitHub 取得所需的範本與文檔。 無需手動下載
dotnet-project-template。
💡 所有範本已改為使用 FileResolver 動態取得真實項目代碼,確保始終同步更新。
取得真實實作範例:
# Controller 實作
node .claude/skills/shared/FileResolver.js get-content \
JobBank1111.Job.WebAPI/Member/MemberV1ControllerImpl.cs
# Handler 實作
node .claude/skills/shared/FileResolver.js get-content \
JobBank1111.Job.WebAPI/Member/MemberHandler.cs
XxxControllerImpl 命名(Impl 後綴表示由規格自動產生的實作)XxxController 命名(無 Impl 後綴表示直接實作)❌ 錯誤:無法產生程式碼
執行命令:task codegen-api-server
錯誤訊息:OpenAPI 規格格式錯誤
建議:
1. 檢查 doc/openapi.yml 格式是否正確
2. 使用線上驗證工具:https://editor.swagger.io/
3. 確認 YAML 縮排正確(使用空格,不使用 Tab)
❌ 錯誤:Controller 編譯失敗
錯誤訊息:CS0535: 'MemberController' does not implement interface member 'IMemberApi.CreateMember'
建議:
1. 確認方法簽章與介面定義完全一致
2. 檢查參數名稱、類型、回傳類型
3. 參考專案內的實際 Controller 實作
API 開發方式相關:
/api-development - API First vs Code First 決策與流程選擇與開發方式無關的實作 Skills(API First 和 Code First 均適用):
/handler - Handler 業務邏輯實作(兩種方式通用)/error-handling - Result Pattern 錯誤處理(兩種方式通用)/bdd-testing - API 端點 BDD 測試(兩種方式通用)/repository-design - 資料存取層設計(兩種方式通用)/ef-core - EF Core 最佳化(兩種方式通用)/caching-strategy - 快取設計(兩種方式通用)相關文檔:
feature-development-agent - 完整功能開發流程(整合此 skill 的決策節點)architecture-review-agent - 架構檢視(驗證 API 層設計是否遵循原則)