Skip to content
ADP
API Design PrincipleBETA

[ADP-307] 啟發性 URI 設計集合

本文件收集了從各種公開 API 文件中觀察到的啟發性 URI 設計模式。這些設計模式雖然可能超出傳統 RESTful API 的路徑設計範疇,但其語意表達清晰,往往能減少額外的 Header 或 Request 設計需求。

注意:這些設計模式僅供參考,不一定適用於所有 API 設計場景。

URI 設計模式分類

1. 修飾詞模式

透過在路徑末端添加修飾詞,用以表達資源的特定狀態或範圍:

http
GET /users/{username}/events/public      # 獲取公開事件
GET /user/marketplace_purchases/stubbed   # 獲取測試用的購買資訊
POST /applications/{client_id}/token/scoped  # 創建有特定範圍的令牌

2. 識別符設計模式

使用具有語意的識別符,提升 URL 的可讀性:

http
GET /apps/{app_slug}  # 使用可讀的 slug 而非 UUID

3. 資源關係表達模式

清晰表達資源之間的關係和操作:

http
GET /enterprises/{enterprise}/actions/permissions/selected-actions
GET /user/starred/{owner}/{repo}  # 檢查認證用戶是否標星該倉庫
GET /orgs/{org}/installations    # 獲取組織的安裝項目

4. 特定操作模式

針對特定資源的專門操作:

http
POST /repos/{owner}/{repo}/merge-upstream  # 合併上游變更
POST /repos/{owner}/{repo}/branches/{branch}/protection/enforce_admins  # 強制管理員保護

5. 資源狀態查詢模式

用於查詢特定資源的狀態或關聯資料:

http
GET /users/self/requested-by     # Instagram: 查詢請求關注的用戶
GET /user/starred               # 獲取已標星的項目
GET /v3/groups/owned           # GitLab: 獲取用戶擁有的群組

6. 單例資源模式

用於表示在特定上下文中只存在一個實例的資源:

http
GET /user/profile              # 獲取當前用戶的個人資料
GET /system/configuration      # 獲取系統配置
GET /apis/{api-id}/stages/dev  # 獲取特定 API 的開發環境階段

歡迎貢獻更多 API 設計範例,豐富這個集合。

Changelog

  • 2025.03.07: Fully rewrite this document