Chuyển đến nội dung chính

BA 的 REST API 與資料驗證:理解 API 合約與資料品質規則

Duy Tran9 分鐘
BA 的 REST API 與資料驗證:理解 API 合約與資料品質規則

許多 BA 在開發人員談論 API、資料庫架構和資料驗證時會略過。其後規格就缺乏細節。本指南幫助 BA 獲得信心審查 API 合約和撰寫資料品質要求。


1. BA 何時需要理解 API?

並非總是,但確實需要在以下情況理解:

  • AI 功能從外部服務消費 API(LLM API、支付閘道、知識庫)
  • BA 需要驗證前端 ↔ 後端之間的資料合約
  • 為錯誤處理撰寫驗收標準(逾時、無效回應)
  • 審查來自來源資料庫的資料品質規則

2. 基本請求/回應

每個 API 呼叫包括:

Request:
  - Method (GET, POST, PUT, DELETE)
  - URL/Endpoint
  - Headers (authorization, content-type)
  - Body (JSON, form data)

Response:
  - Status code (200, 400, 500, etc.)
  - Headers
  - Body (通常為 JSON)

實世界示例 — 呼叫 AI 模型 API:

POST /v1/messages
Content-Type: application/json
Authorization: Bearer YOUR-API-KEY

{
  "model": "claude-opus-4-7",
  "max_tokens": 1024,
  "messages": [{"role": "user", "content": "What is BA?"}]
}

Response (200 OK):
{
  "id": "msg_123",
  "content": [{"type": "text", "text": "Business Analyst is..."}],
  "usage": {"input_tokens": 50, "output_tokens": 200},
  "stop_reason": "end_turn"
}

BA 需要檢查的事項:

  • 哪些欄位是必需的?(model、max_tokens)
  • 回應中有哪些欄位?(id、content、usage)
  • 資料型別:string vs number vs object?

3. BA 應知道的 HTTP 狀態碼

碼意義處理
200OK — 成功處理回應
400Bad request — 無效輸入在發送前驗證輸入
401Unauthorized — 認證失敗檢查 API 金鑰
403Forbidden — 無權限檢查使用者權限
404Not found驗證端點 URL
429Rate limit exceeded延遲後重試
500Server error — API 服務停止重試、上報
503Service unavailable重試、備用

AC 範例:

Scenario: API 返回 429(速率限制)
Given AI 服務已在 1 分鐘內處理 100 個請求
When 使用者發送第 101 個請求
Then API 返回狀態 429 並帶有標頭 Retry-After: 60
And 系統顯示「請求太多。請於 60 秒後重試。」
And 如果使用者緊急,則上報給人工代理

4. 錯誤處理與冪等性

錯誤處理

當 AI API 失敗時,需要明確的政策:

Scenario: AI API 逾時
Given 逾時閾值 = 30 秒
When AI 服務在 30 秒內不回應
Then:
  - 觸發逾時例外
  - 使用請求 ID 記錄錯誤
  - 如果 retry_count < 3:再重試一次
  - 否則:上報給人工代理
  - 通知使用者:「處理需要更長時間。專家將幫助您。」

冪等性

相同請求在重試時不應被處理兩次(對於支付、AI 費用很重要):

{
  "idempotency_key": "request_12345_user_789",
  "messages": [...]
}

BA 必須檢查: 如果網路失敗且系統自動重試,會被重複收費嗎?


5. 資料驗證驗收標準

進入 AI 系統的資料必須通過驗證。BA 為每個規則撰寫 AC:

Scenario: 電子郵件驗證
Given 使用者在表單中輸入電子郵件
When 電子郵件格式無效(例如:"user@")
Then 系統顯示錯誤「無效的電子郵件格式」
And 表單不提交

Scenario: 電話驗證
Given 電話號碼欄位只接受數字
When 使用者輸入字母
Then 系統拒絕並要求重試

Scenario: AI 輸入淨化
Given AI 功能接收使用者文字輸入
When 文字包含 SQL 注入酬載(例如:"'; DROP TABLE users;")
Then 文字必須在添加到提示前進行轉義/淨化
And 不應執行任何資料庫命令

6. 資料品質規則

BA 應在開發前定義的規則:

資料品質檢查清單:
☐ Null 處理:允許哪些 null 值?哪些必需?
☐ 範圍:數值欄位的最小/最大值
☐ 格式:電子郵件正規表達式、電話模式、日期格式
☐ 唯一性:哪些欄位在整個資料庫中必須唯一?
☐ 參考完整性:外鍵限制
☐ 新鮮度:最大資料年齡?

實世界範例 — AI 功能使用知識庫:

知識庫資料品質:
- Document ID:必需、唯一
- Content:必需、長度 50~50000 字元
- Language:必需,[en、vi、ja、zh-tw] 之一
- Last updated:必需、日期時間,不超過 30 天
- Embedding version:必需、必須符合目前模型版本
- Accuracy tag:選擇性、列舉 [verified、draft、deprecated]

警示條件:當超過 5% 文件超過 30 天時,觸發審查工作流程

7. OpenAPI 規範 — 基本理解

OpenAPI(Swagger)是記錄 API 的標準:

openapi: 3.0.0
info:
  title: AI Message API
  version: 1.0
paths:
  /v1/messages:
    post:
      summary: 向 AI 發送訊息
      parameters:
        - name: Authorization
          in: header
          required: true
          schema: { type: string }
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                model: { type: string }
                messages: { type: array }
              required: [model, messages]
      responses:
        '200':
          description: 成功
          content:
            application/json:
              schema:
                type: object
                properties:
                  id: { type: string }
                  content: { type: array }
        '400':
          description: Bad request

BA 應在規範中檢查:

  • 哪些端點是必需的,哪些是選擇性的?
  • 請求體中的必需欄位是什麼?
  • 回應結構是什麼?
  • 可能的錯誤碼?

工具:Swagger UI、Postman — 用於直接測試。


總結

現代 BA 需要讀取 API 合約以便:

  1. 驗證資料整合:前端/後端正確通信
  2. 撰寫錯誤處理 AC:系統如何處理 API 失敗?
  3. 定義資料品質:哪些驗收標準、哪些拒絕標準?
  4. 更快地故障排除:QA 報告錯誤時,BA 知道如何調查

無需編寫 API,但足以審查 OpenAPI 規範、為錯誤案例撰寫測試,以及定義資料品質驗收標準。