GH GambleHub

API兼容性和更新

1)互操作性基本原則

Additive-first:添加新字段而不破壞舊字段(新可選字段/端點,新的enum值)。
穩定的合同:「規範中承諾的東西既有效又有效」;行為記錄在案。
Backward> Forward:向後兼容性優先級;通過tolerant閱讀器允許前進。
文檔是主要的:唯一的真相來源是註冊表中的架構版本(OpenAPI/AsyncAPI/Proto)。
顯而易見的演變:破裂-僅通過新的主要版本和遷移指南。

2)變更分類法

2.1兼容(MINOR/PATCH)

添加可選的字段/頭部、新的尾部、帶有默認值的查詢參數。
增加限制(「page_size」,TTL),在不更改代碼/語義的情況下澄清錯誤。
如果客戶端忽略了「陌生人」(tolerant-reader),則添加enum值。

2.2模棱兩可(Behavioral)

更改違約,排序順序,精細的時間表,配額-可以「打破」業務邏輯。需要RFC+公告和金絲雀。

2.3折斷(MAJOR)

重命名/刪除字段,更改類型/格式,替換錯誤代碼,反向合同/身份驗證方案不兼容。

3)考試政策

策略:「path versioning」(「/v1」,「/v2」)。
小調/補丁:「添加,不要打破」。
過時的標題(dop.):「X-API-Version-Date」,用於溫和的漸進式更改。
媒體類型(opz。): `Accept: application/vnd.acme.v1+json'用於細顆粒。

4)去除和日落

4.1通訊頭條


Deprecation: true
Sunset: 2026-03-31T00:00:00Z
Link: </guides/reports-v2>; rel="successor-version"

4.2輸出順序

1.在門戶/通訊/SDK發布註釋中宣布。
2.警告窗口≥ 90-180天。
3.Dashboard adoption中的狀態。
4.在日落之後-410 Gone或「read-only」模式,如果同意的話。

5)遷移和共享版本

過渡時期的雙寫作/雙讀取和報告對賬。
適配器(臨時):舊付費的網關轉換→新方案;適配器的壽命受到限制。
SDK幫助:支持兩個版本的版本,帶有解密警告(每個過程1次)。
Fich-flags: 在鍵/tenant列表中包含新的語義。

6)背面和前方兼容性

6.1 Backward(舊客戶端↔新服務器)

不要更改類型/強制格式。
新字段-僅可選。
錯誤-以前的「error_code」、新代碼添加、不替換。

6.2 Forward(新客戶端↔舊服務器)

通過「OPTIONS」/「/versions」檢查能力(機會)。
格雷斯行為:客戶必須容忍缺席的犯規。

7)合同和自動檢查

註冊:保留方案的版本;公關部門→報告「破解/不破解」。
Linter:名稱/類型,等效性,分期,穩定代碼。
CDC(消費者驅動合同):供應商的CI(Pact和類似物)中的集成商測試。
蓋特:公關在沒有「專業大滿貫」/RFC的情況下被鎖定。

CI步驟示例:
yaml
- name: API Diff run: api-diff --from main --to $PR_SHA --fail-on=breaking --format junit --out diff. xml

8)金絲雀發行和回程

金絲雀:10% → 25% → 50% → 100%的流量;SLO惡化時的自動回滾(5xx/latency/429)。
Beta密鑰:通過allowlist訪問新版本。
釋放凍結:在燃燒錯誤預算時。
接受分析:新版本的流量/客戶比例,遷移時間。

9)詳細兼容性: 錯誤,分離,相容性

9.1個錯誤

不要更改現有腳本中的HTTP狀態。
'error_code'-穩定;僅添加新代碼。
「application/problem+json」是單一格式。

9.2分離

如果支持舊的「offset/limit」,則切換到cursor/keyset=MINOR。
記錄「(updated_at,id)」排序和光標穩定性。

9.3 Idempotency

對於寫作-沖突中的"Idempotency-Key"+"409 IDEMP_REPLAY'。
遷移不應改變冪等語義。

10)網關轉型(適當時)

Map v1→v2字段,規範錯誤,轉換日期/貨幣格式。
Guardrails:轉換透明且可邏輯;不要隱藏斷裂,而是用作限時橋梁。

11)通訊和門戶

Changelog с датами (`added/changed/deprecated/removed/fixed`).

版本卡:狀態(beta/GA/deprecated),日落日期,指向海德的鏈接。

通知的Webhooks: 'deprecation。notice`, `version.released`, `plan.change`.

SDK發布註釋+門戶網站上的橫幅。

12)成功指標

Adoption rate v2(按請求/客戶端)。
Backward-compat incidents(「折紙」)。
發行前/發行後的Error mix(4xx/5xx/429份額)。
時間到中位數。
支持負載(tikets/ned)。
Cost-to-Serve(每個呼叫的基礎架構成本)。

13)模板和示例

13.1版本和刪除標題


X-API-Version: v1
Deprecation: true
Sunset: 2026-03-31T00:00:00Z
Link: </v2/reports>; rel="successor-version"

13.2版本策略(YAML片段)

yaml versioning:
strategy: "path"
compatibility:
minor: "additive-only"
patch: "bugfix/perf, no schema change"
deprecation:
min_notice_days: 120 rollout:
canary_steps: [10,25,50,100]
rollback_checks: ["5xx_rate","p95_latency","429_rate","adoption"]

13.3 OpenAPI:兼容字段添加

yaml components:
schemas:
Report:
type: object required: [id, createdAt]
properties:
id: { type: string }
createdAt: { type: string, format: date-time }
cursor: { type: string, description: "optional for v1. 2+" } # additive

14)發行支票清單(MINOR/MAJOR)

MINOR

  • DIFF:非突破,linter綠色
  • 文檔/SDK更新(示例/編解碼器)
  • 金絲雀+在SLO上自動回滾
  • Comm Plan,門戶網站頁面
  • Dashbords adoption和錯誤

MAJOR

  • RFC/ADR、日落日期和窗口≥90 -180天
  • v1↔v2橋(gateway)和遷移指南
  • 雙重寫作/閱讀和對賬
  • 具有兩個API+警告的SDK
  • 具有關鍵集成商的飛行員

15)實施計劃(3次叠代)

1.基礎(2周):

CI中的Registry電路,lint和auto-diff;互操作性政策;標題「Deprecation/Sunset」。

2.托管版本(3-4周):

金絲雀,幻燈片,SLO-Alerta;版本門戶;支持2個分支的SDK版本。

3.自動化和規模(連續):

CI中的消費者疾病預防控制中心測試,日落趨勢預測,自動符號化和提醒。

16)迷你常見問題

可以在沒有專業的情況下更改字段類型嗎?

沒有。甚至「stroka→chislo」都是斷裂。輸入新字段,舊字段為deprecate。

Enum: 可以添加值嗎?

是的,如果客戶是tolerant讀者。否則-首先是警報和beta。

多少保留舊版本?

到目前為止,adoption是新的≥95%,並且經過了消除窗口。在政策中記錄最後期限。

底線

API兼容性是一門學科:additive方法,正式方案和difs,金絲雀版本,清晰的解密和管理的遷移。穩固變更策略,自動化驗證和通信,測量適應-您的更新將停止破壞客戶,並且演變速度將增長而不會失去可靠性。

Contact

與我們聯繫

如有任何問題或支援需求,歡迎隨時聯絡我們。我們隨時樂意提供協助!

Telegram
@Gamble_GC
開始整合

Email 為 必填。Telegram 或 WhatsApp 為 選填

您的姓名 選填
Email 選填
主旨 選填
訊息內容 選填
Telegram 選填
@
若您填寫 Telegram,我們將在 Email 之外,同步於 Telegram 回覆您。
WhatsApp 選填
格式:國碼 + 電話號碼(例如:+886XXXXXXXXX)。

按下此按鈕即表示您同意我們處理您的資料。