iT邦幫忙

2026 iThome 鐵人賽

DAY 13
0
Vibe Coding

Vibe Coding的30天,自然語言與AI共舞,從Prompt到高品質原型落地系列 第 13

Day 13|後端API設計叫AI幫你畫Sequence Diagram與API規格

  • 分享至 

  • xImage
  •  

我們將正式踏入Phase3:後端邏輯、API與資料庫串接。

許多人在開發後端時,習慣直接動手寫APIRoute,結果寫到一半才發現:欸?這個欄位前端有傳嗎?、刪除失敗時錯誤碼該回傳400還是404?、更新狀態需要哪些QueryParameters?。

先設計,後編碼(Design-FirstArchitecture)是確保前後端開發不踩坑的核心原則。今天我們將學習如何引導AI繪製Mermaid時序圖(SequenceDiagram)來釐清邏輯,並產出一份符合OpenAPI/RESTful規範的後端API規格書!

1.為什麼要先叫AI畫SequenceDiagram?
時序圖(SequenceDiagram)是釐清多個角色/系統間互動時間軸的最佳工具。透過視覺化的圖表,能幫我們在動筆寫程式碼前,看清以下細節:

認證與權限檢查點(例如:JWT權限驗證放在哪一步?)。

資料庫讀寫時間點(例如:是否需要先SELECT檢查存在,再執行UPDATE?)。

錯誤處理與異常分支(例如:資料不存在時要回傳什麼HTTPCode?)。

[Client]  ---( 1. POST /api/v1/skills )--->  [Next.js API Route]        
                                                    |                    
                                           ( 2. Auth & Zod Validation )  
                                                    |                   
                                              [ Prisma ORM ]             
                                                    |                    
 [Client]  <---( 3. 201 Created + JSON )---   [ Database ]               

2.實戰步驟1:請AI生成Mermaid時序圖
開啟Cursor,對著@docs/api-sequence.md發送Prompt,讓AI繪製新增/更新/刪除技能的互動時序圖:
你是一位資深後端架構師。請幫我為VibePulse的技能管理模組(SkillResource)繪製Mermaid.js的SequenceDiagram,並儲存在docs/api-sequence.md中。

時序圖需求:
1.參與者(Participants):
-Client(前端ReactApp)
-APIHandler(Next.jsAppRouterAPIRoute)
-Validator(ZodSchemaValidation)
-Database(PrismaORM+PostgreSQL)

2.核心流程涵蓋:
-POST/api/skills(建立技能):包含Zod欄位驗證失敗(400)與成功寫入資料庫(201)的ALT分支。
-DELETE/api/skills/:id(刪除技能):包含檢查技能是否存在(404)與成功刪除(200)的ALT分支。

3.格式要求:使用標準sequenceDiagram語法,加入簡明註解。
AI產出的Mermaid時序圖語法:
程式碼片段

sequenceDiagram
    autonumber
    actor Client as 前端 Client
    participant API as API Handler (/api/skills)
    participant Val as Zod Validator
    participant DB as Prisma / Database

    %% POST 流程
    rect rgb(240, 248, 255)
    note over Client, DB: 1. 新增技能流程 (POST)
    Client->>API: POST /api/skills (JSON Payload)
    API->>Val: 執行 safeParse(body)
    
    alt 驗證失敗 (Invalid Payload)
        Val-->>API: 返回 Error Details
        API-->>Client: 400 Bad Request { success: false, error: ... }
    else 驗證成功
        Val-->>API: 返回 Valid Data
        API->>DB: prisma.skill.create({ data })
        DB-->>API: 返回 Created Skill Object
        API-->>Client: 201 Created { success: true, data: skill }
    end
    end

    %% DELETE 流程
    rect rgb(255, 245, 238)
    note over Client, DB: 2. 刪除技能流程 (DELETE)
    Client->>API: DELETE /api/skills/:id
    API->>DB: prisma.skill.findUnique({ where: { id } })
    
    alt 找不到資料 (Not Found)
        DB-->>API: null
        API-->>Client: 404 Not Found { success: false, message: "Skill not found" }
    else 找到資料
        DB-->>API: skill object
        API->>DB: prisma.skill.delete({ where: { id } })
        DB-->>API: Deleted Record
        API-->>Client: 200 OK { success: true, message: "Skill deleted successfully" }
    end
    end

3.實戰步驟2:請AI產出RESTfulAPI規格文件
有了清晰的時序圖後,我們緊接著引導AI將規格標準化,產出一份給前後端團隊(或給AIAgent自己)閱讀的OpenAPI規格草案:
@docs/api-sequence.md(請參考時序圖邏輯)

請根據剛才生成的時序圖,為VibePulse撰寫一份極度嚴謹的API規格文件docs/api-spec.md

規格要求:
1.端點清單:
-GET/api/skills:支援QueryParams(category,search,status)。
-POST/api/skills:建立新技能。
-PATCH/api/skills/:id:更新熟練度(proficiency)或最後練習時間。
-DELETE/api/skills/:id:刪除指定技能。
2.統一回應格式(UnifiedResponseStandard):
-成功Response:{"success":true,"data":T,"meta"?:{"total":number}}
-失敗Response:{"success":false,"error":{"code":string,"message":string,"details"?:any}}
3.HTTP狀態碼說明:明確標註200,201,400,404,500的觸發條件與ResponseJSON範例。
AI產出的docs/api-spec.md精選片段:

端點:GET /api/skills
Method: GET

URL: /api/skills

Query Parameters:

category (optional): 'Frontend'  'Backend'  'AI'  'DevOps'

search (optional): string (搜尋標題或標籤)

Response 200 (OK):

{
  "success": true,
  "data": [
    {
      "id": "sk-01",
      "title": "Next.js App Router & Server Actions",
      "category": "Frontend",
      "proficiency": 85,
      "lastPracticedAt": "2026-08-11T14:30:00Z",
      "tags": ["React", "Next.js"],
      "status": "learning",
      "notesCount": 12
    }
  ],
  "meta": {
    "total": 1,
    "page": 1
  }
}

4.Design-First架構檢視與API評估重點
在將這份規格交付給下階段實作APIRoute前,請檢查以下三個重點:

語意化HTTP動詞:

GET:僅用於讀取,不改變伺服器狀態。

POST:建立全新資源。

PATCH:部分更新(例如只更新proficiency欄位,而非覆蓋整個物件)。

DELETE:移除資源。

錯誤結構的一致性:

前端攔截器(Interceptor)只需要判斷res.data.success是否為false,就能統一彈出Toast或錯誤處理,無需為不同端點寫不同的error解析邏輯。

保留Pagination&Metadata擴充空間:

即便MVP目前資料量不大,GETResponse也必須保留meta欄位,以便未來擴充分頁功能。

今天我們正式揭開了後端開發的序幕:

透過自然語言指揮AI生成了Mermaid時序圖,視覺化釐清了API互動與例外分支。

建立了標準化的RESTfulAPI規格書與統一Response/Error格式。

為明天開始的Next.jsAPIRoutes實作奠定了堅實且不會踩坑的基礎!


上一篇
Day 12|階段性驗收第一階段MVP畫面展示與Code Review
下一篇
Day 14|Next.js Route Handlers實作用Zod驗證Request Body與Error Handling
系列文
Vibe Coding的30天,自然語言與AI共舞,從Prompt到高品質原型落地14
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言