通過OPTIONS交換schema

简介: 通过OPTIONS交换MetaMessage Schema,实现前后端接口格式自动校验与统一。服务端提供结构化schema定义,客户端据此验证请求/响应,配合缓存(Access-Control-Max-Age)与版本控制(Schema-Md5),兼顾性能与一致性。支持多框架(FastAPI/Flask/Django/Gin/Echo等)。

通過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(原生)。

目录
相关文章
|
1月前
|
人工智能 自然语言处理 API
【Azure AI Search】Index的字段使用默认Analyzer(standard.lucene) 和 en.microsoft 有什么不同?
Azure AI Search英文检索因词形差异(如brief/briefs)无法匹配,根源在于analyzer选择:默认standard.lucene不处理词形还原,而en.microsoft支持lemmatization,可将变体还原为基本形式。需通过新增字段并配置en.microsoft analyzer解决,兼顾检索质量与业务需求。
265 124
|
11天前
|
人工智能
告别排版噩梦:一个开源SKILL,让我彻底告别公众号排版的“噩梦”
**gzh-design-skill**,一个专门为公众号排版设计的 Skill,面向 AI Agent(如 Claude Code、Codex、Cursor 等)使用。 你写完 Markdown,它按你选的主题,生成样式**全内联**的 HTML——粘贴到公众号编辑器后**格式不丢、样式不掉**。自动编章节号、标关键词下划线、配引言卡与目录、处理代码块和图片、合并作者签名,并用校验脚本兜住公众号平台的各种坑。
193 1
告别排版噩梦:一个开源SKILL,让我彻底告别公众号排版的“噩梦”
|
1月前
|
人工智能 小程序 程序员
Skill详解(2万字详细教程),Skills是什么,如何安装并使用Skills
AI时代必备技能!Skills(智能体技能)是Anthropic提出的可复用能力包,以文件夹形式封装指令、脚本与资源,实现“按需加载”,大幅节省Token。它让大模型从聊天工具升级为专业助手——非技术岗也能零代码快速上手,真正实现人人可用、岗岗必备。
Skill详解(2万字详细教程),Skills是什么,如何安装并使用Skills
|
19天前
|
人工智能 缓存 JavaScript
保姆级教程:OpenCode 14 个社区插件 + 6 个实战案例,建议收藏,手把手带你打造最强 AI 编码环境
OpenCode 插件使用保姆级教程:14 个社区插件 + 6 个实战案例,从加载规则到开发实战,手把手带你打造最强 AI 编码环境。建议收藏!
425 10
|
12天前
|
人工智能 Shell 开发工具
Claude Code 配置文件怎么写:settings.json 与 CLAUDE.md 完整指南
本文详解Claude Code三大配置文件:`settings.json`(技术强制,权限/环境/模型)、`CLAUDE.md`(行为引导,编码规范/架构)、`.mcp.json`(MCP接入)。涵盖四层作用域、优先级规则、权限合并机制及团队协作最佳实践,助开发者安全高效定制AI编程体验。(239字)
266 1
|
19天前
|
人工智能 文字识别 并行计算
离谱!我以为 OCR 还在一页页抠字,结果百度 1.2 万 Star Unlimited-OCR 直接把长文档一口气读完
百度开源 Unlimited-OCR,把图片、长文档、多页 PDF 这类非结构化资料推进到 Markdown、表格和可检索文本,适合 RAG、知识库和 Agent 文档入口。
155 7
|
1月前
|
消息中间件 运维 测试技术
Skills实战:从0到1实现“多环境切换”Skill,测试不再改代码
本文直击SaaS团队多环境运维痛点:配置硬编码导致“改一行等半小时”“换环境必出错”。揭示问题本质——环境信息与业务逻辑耦合,并提出落地性强的“可切换环境Skill”方案:统一配置中心、依赖注入式加载、配置校验与版本管理,实现同一份代码零修改跑通开发、测试、预发布、生产全环境。
|
1月前
|
运维 监控 前端开发
一个运维人的“断舍离”:我如何用不到30MB的 MSRM3 替换掉了桌面上的六个工具
本文讲述一位资深运维人从多工具切换的疲惫,到遇见轻量、开箱即用的MSRM3监控平台的心路历程。它仅30MB单文件、免依赖、跨平台,集成IP定位、全能工具箱与零代码大屏,让运维回归问题本身——工具隐形,效率可见。(239字)
|
17天前
|
人工智能 安全 网络安全
Hermes Agent 进阶教程:技能自进化、MoA 模型委员会与多后端部署实战
Hermes Agent 是 Nous Research 开源的自我改进型 AI 智能体(MIT 协议),首创内置学习闭环:自主创建技能、使用中持续优化、跨会话构建用户画像。截至2026年7月2日,GitHub Star 20.7万,v0.18.0版新增 /learn 技能蒸馏、双层记忆治理、MoA模型委员会、/goal 证据化完成判定等六大进阶能力,支持本地/Docker/SSH/Modal 等安全后端部署。(239字)
331 1