通過OPTIONS交換schema

举报
大漠孤煙 发表于 2026/06/15 21:30:19 2026/06/15
【摘要】 通過OPTIONS交換schema在web開發中,經常遇到的一個問題是接口調用方和提供方經無法有效協調接口,導致前後端扯皮時有發生。實際上,這主要是沒有統一的驗證標準,文檔理解不同,校驗邏輯不同。出錯的時候,分不清是調用方傳參錯誤還是服務端接口錯誤。跨團隊、跨框架、跨語言還會放大這個問題。通過OPTIONS交換schema這套方案,以上就不是問題了,OPTIONS提供的schema就是標準...

通過OPTIONS交換schema

在web開發中,經常遇到的一個問題是接口調用方和提供方經無法有效協調接口,導致前後端扯皮時有發生。

實際上,這主要是沒有統一的驗證標準,文檔理解不同,校驗邏輯不同。出錯的時候,分不清是調用方傳參錯誤還是服務端接口錯誤。

跨團隊、跨框架、跨語言還會放大這個問題。

通過OPTIONS交換schema這套方案,以上就不是問題了,OPTIONS提供的schema就是標準,提供者可以驗證自己提供的api對不對,調用者可以直接驗證自己的請求對不對。

簡單示例:

客戶端                          服務端
  │                               │
  ├── OPTIONS /api/v1/users ──────►
  │◄──── MetaMessage Schema ──────┤
       (struct definition)       │
  │                               │
  ├── POST /api/v1/users ────────►
  │◄──── MetaMessage Response ────┤

服務端的請求綁定了這個Schema,只有符合這個Schema才能合法請求;而客戶端發出的請求也必須符合這個Schema。

同時,因為這個OPTIONS是和正常的數據接口同時提供的,所以客戶端可以通過這個OPTIONS接口來獲取這個Schema。

Schema保證了客戶端和服務端的請求和響應格式一致,避免了因格式不一致導致的問題。

做完這些,考慮到實際應用中的問題,我們還需要考慮到以下問題:

OPTIONS是否需要每次請求都發送一次?

我們可以通過緩Schema來避免每次請求都發送一次。

對於服務端,由於接口程序啟動後就不會變了,實際只需要緩存一次,每次請求,直接返回就行了,基本沒有開銷。服務端返回的header中有Access-Control-Max-AgeSchema-Md5這兩個字段。

對於客戶端,通過Access-Control-Max-Age字段,我們可以知道服務端缓存的時間,從而知道是否需要每次請求都發送一次。
通過Schema-Md5字段,我們可以知道服務端返回的Schema是否變了,從而知道是否需要重新發送請求。

比如把Access-Control-Max-Age設置為24小時,那麼客戶端在24小時內,不需要每次發送請求都發送一次OPTIONS。
如果24小時內,服務端返回錯誤信息(服務端驗證Schema-Md5),說Schema變了,那麼客戶端需要重新發送OPTIONS請求,獲取最新的Schema保存起來。

metamessage/mm-web-py提供了python服務端的客戶端的相關實現,大家可以直接使用來簡化這些操作。這個倉庫提供了fastapi、flask、django的封裝。

metamessage/mm-web-go是golang的實現,支持gin、echo、fiber、chi、net/http(原生)。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。