MetaMessage,開啟了API革命!

简介: MetaMessage是AI时代新型结构化数据协议,自描述、自约束、自示例,支持JSONC注释语法(如`// mm: type=email; desc=邮箱`),实现跨语言精准交互、零损耗Schema传递与实时API契约验证,彻底告别过时文档与解析歧义。(239字)

截屏2026-05-26 00.30.21.png

傳統api調用存在很多問題。

  1. 很多應用,api是沒有文檔的,調用者根本無法得知api的請求參數和返回數據是什麼樣的,規範是什麼。
  2. 發佈一個api,可能還得發佈文檔,比如Swagger。大多數開發者很難寫好文檔,文檔質量參差不齊。
  3. 文檔發佈地址就是一個問題。即使有文檔,也很難找。還有一些文檔受限於網絡、權限等,看不了。
  4. 文檔可能和api脫節,更新不及時。甚至造成各種歧義。
  5. 文檔很難管理,丟失、遺忘等問題很常見。
  6. 開發者、調用者之間協作困難,甚至相互誤解。
    ...

問題太多了,這只是冰山一角。而MetaMessage的出現,可能真正改變了這種局面。

MetaMessage,自描述、自規範、自示例。比如,輸出為一個文本格式jsonc:

{
  // mm: type=datetime; desc=創建時間
  "create_time": "2026-01-01 00:00:00",
}

看起來很簡單,type表示了數據格式,各種語言實現一致,不會出現某個語言解釋為字符串的問題。desc可以描述字段含義、使用方法等。
當然還有更多標籤,這些標籤共同描述了一種精確、完整的數據。

開發者可以直接從各語言的數據對象直接生成mm,也可以通過比如jsonc字符串生成mm。代表的數據是完全一致的。
說到這裡,對於多語言間的數據對比,實際很困難,甚至說還沒有一個好的方法真正能做到,對於測試來說就是一個很大的問題。
而都轉成mm,對比文本非常方便。

還有一些其他的優點,比如可以生成緊湊的二進制,可以生成更多文本格式等等。未來,一個mm可以生成jsonc、toml、yaml等格式,作為配置文件的轉換非常方便。

遠了。

我們在調用一個api的時候,能不能直接獲取它的請求方法?我想到一個方法,我們可以利用resful的options方法。options方法設計之初就是資源探測,但是幾十年來,大家僅僅是用來表示cors,描述跨域問題。太浪費了。而且瀏覽器默認會在post等請求前,調用下options方法,我們是沒辦法取消的,有點可笑了。我們可以把請求參數方法放在options返回的body中,這樣調用方不就能獲得實時的、準確的請求方法了嗎?

OPTIONS /api/v1/users/1:

// mm: example
{

        // mm: nullable; desc="用戶名稱"
        "name": "",

        // mm: type=email; nullable; desc="電子郵箱"
        "email": "",

        // mm: type=u8; nullable; desc="年齡"
        "age": 0,

        // mm: nullable; desc="是否激活"
        "is_active": false,
}

這時一個修改用戶的api,當我們看到這個結果,我們就能知道name可以為null,age必須是uint8.當然整體上還能得出這是個example示例數據。

我們請求的時候,只要完全符合,那麼就是安全合法的。

實踐

我們來做一個golang gin的中間件,實現這樣的功能:

  1. 對於post、put、patch方法,把請求參數自動包裝、暴露到options
  2. 自動以mm對請求進行編碼
  3. 對返回結果自動解嗎

為了方便使用和演示,我們還可以做個客戶端:

  1. 請求的時候,自動探測schema,也就是請求options
  2. 自動驗證請求合法性

當然服務端和客戶端都會自動驗證。

server:

...

type CreateUserRequest struct {
    Name  string `mm:"desc=用戶名稱; min=1; max=50"`
    Email string `mm:"type=email; desc=電子郵箱"`
    Age   uint8  `mm:"desc=年齡; min=0; max=150"`
}

mmgin.POST("/users", createUser)

func createUser(c *gin.Context, req *CreateUserRequest) {
    newUser := User{
        ID:       int64(len(users) + 1),
        Name:     req.Name,
        Email:    req.Email,
        Age:      req.Age,
        IsActive: true,
    }
    users = append(users, newUser)

    mmgin.RespondWithStatus(c, http.StatusCreated, APIResponse{
        Code:    0,
        Message: "user created",
        Data:    &newUser,
    }, "")
}
...

client:

...

type CreateUserRequest2 struct {
    Name  string `mm:"desc=用戶名稱; min=1; max=50"`
    Email string `mm:"type=email; desc=電子郵箱"`
    Age   uint8  `mm:"desc=年齡; min=0; max=150"`
}

createReq := &CreateUserRequest2{
    Name:  "David",
    Email: "david@example.com",
    Age:   28,
}
resp3, err := client.POST[CreateUserRequest2, APIResponse]("/api/v1/users", createReq)
if err != nil {
    fmt.Printf("  [Error] %v\n", err)
    return
}
fmt.Printf("  [OK] Message: %s\n", resp3.Message)
fmt.Printf("     New User: %+v\n", resp3.Data)
...

以上可以看到,使用非常簡單,甚至無感。
完整示例可參見"metamessage/mm-gin"項目

可測試的結果是,只要請求數據不合法,在options階段就會失敗。

注意這是強一致的,是實時驗證的。

未來

api不用寫文檔,代碼就是文檔。

每個api接口,自動生成一個schema

陌生的api,沒關係,自動獲取請求參數;api更新,沒關係,自動獲得更新後的請求參數。

特別是眾多瀏覽器,怎麼也不會想到options還能這麼用,如果內置這種用法,對各種api更是幫助巨大。

MetaMessage作為基礎協議,會在各種場景有更多重要應用。

目录
相关文章
|
7天前
|
机器学习/深度学习 算法 数据挖掘
数据挖掘是什么?数据分析、数据挖掘、数据统计三者的区别是什么
本文用大白话厘清数据分析、数据挖掘、数据统计的本质区别:数据分析解决具体业务问题,重在“解释过去”;数据挖掘从海量数据中发现未知规律,重在“预测未来”;数据统计通过样本科学推断总体,重在“验证因果”。三者路径不同、目标各异,明确差异才能准确定位、选对方法、少走弯路。
|
传感器 安全 中间件
深入浅出:SOME/IP协议中的服务发现机制解析
深入浅出:SOME/IP协议中的服务发现机制解析
1326 1
|
4月前
|
BI
春节复工后,2026年1688店铺想突围,这份操作运营指南请收好!
春节后1688运营必做清单:分三阶段——急救重启(发货清零、视觉焕新)、赛道布局(定位选品、数据诊断)、流量抢跑(搜索优化、老客召回)。聚焦金冠培育、新品破零、层级提升,踩准平台节奏,抢占开年红利!
|
30天前
|
JSON JavaScript 前端开发
在TypeScript和JavaScript如何使用MetaMessage?
MetaMessage 是一种跨语言数据交换协议,支持 TypeScript/JavaScript(通过装饰器自动类型转换)、JSONC 文本与紧凑二进制 wire 格式,兼顾可读性、精度(如 bigint 表示 int64)与性能,旨在替代 JSON、Protobuf 等传统序列化方案。
224 125
|
8月前
|
人工智能 供应链 小程序
高效赋能数字人:2025 精选工具大推荐
2025 年,生成式 AI 技术推动数字人工具从 “单一功能落地” 迈向 “全链路价值赋能”,不仅能解决 “降本增效” 的基础需求,更能助力个人与企业解锁 “场景创新”。以下精选 5 款能力差异化的数字人工具,从核心技术、适配场景、实用价值等维度拆解,帮你找到能真正落地的数字人解决方案。
1663 10
|
7天前
|
存储 人工智能 运维
千亿级 AI 搜索的效能实战:从混合检索到 Agentic RAG 的三年实战
本文为2026 Elastic中国大会演讲实录,直击千亿级AI搜索三大挑战:搜索融合(关键词+向量+稀疏检索原生一体)、极致效能(冷热分层、硬件降级、自研FalconSeek引擎)与Agentic RAG演进(结构化知识图谱+智能体自主推理),揭示企业级AI搜索从“能用”到“好用”再到“自进化”的实战路径。
301 8
|
7天前
|
缓存 前端开发 安全
ReAct推理链的工程化实现与最佳实践
本文介绍向量空间JBoltAI平台基于Spring Boot 3.x与Java 21实现的企业级ReAct推理链架构,涵盖分层设计、模板方法、Function Calling驱动、并发安全机制及推理可视化等核心实践,助力LLM能力可靠落地。
|
7天前
|
人工智能 安全 算法
GEO 行业大清洗:倒闭的不是公司,是整个行业的投机小聪明
本文深度剖析GEO行业2026年集体暴雷的根源:AI技术迭代彻底颠覆旧有商业逻辑。指出虚假繁荣源于信息差红利,而今算法升级、监管加码与品牌认知觉醒共同终结“铺量套利”模式。文章穿透表象,从商业本质、技术底层、人性痛点、产业终局四维拆解,宣告低端中介退场,真GEO已升级为以AI认知基建、品牌信用沉淀为核心的高价值赛道。(239字)
|
7天前
|
存储 人工智能 安全
OpenHuman:本地优先的开源Agent
OpenHuman 展示了一条本地优先的 Agent 路线:把个人记忆、数据连接、自动更新结合,让 Agent 更懂你,也更尊重数据边界。
185 1
|
7天前
|
算法 NoSQL Java
Java在分布式ID生成器(雪花算法)中的实现与优化
在分布式系统中,需要全局唯一、趋势递增、高性能的ID(如订单号、消息ID)。数据库自增ID在分库分表后不再唯一;UUID无序且过长,影响索引性能。
223 1

热门文章

最新文章