知识卡片

用元数据描述一次接口,让序列化、文档、多语言绑定全部自动生成

专业/工作

内容

Facebook把内部方法开放成外部Web服务时,没有让每种语言、每种协议手写各自的转换代码,而是用Thrift这类工具先用一份中立的接口定义(类型、字段、方法签名)描述清楚数据长什么样,再从这一份定义自动生成PHP、Java、C++等各语言的数据结构代码、XML/JSON序列化逻辑,以及面向外部的Schema文档。这带来的好处不只是省事:字段改名或加类型这种变更只需要改一处定义,不必在十几个语言绑定里同步维护,而且自动生成的文档天然和真实接口保持一致,不会像手写手册那样逐渐腐化过时。这提示一个通用判断:一旦某个接口需要被多种语言、多个团队长期共同维护,与其手写多份重复实现,不如先投入一次性成本,把”接口定义”本身变成可执行的元数据。

参考来源

《架构之美》第6章《数据增长:Facebook平台的架构》