标准答案
- JSON 可读、生态广、调试方便,适合浏览器 API、开放接口和对可观察性要求高的业务场景。
- Protobuf 依赖明确 schema,二进制体积小、编码效率高、跨语言代码生成成熟,适合内部 RPC、消息和高吞吐链路。
- MessagePack 比 JSON 更紧凑,接入成本较低,但模式约束和演进治理通常不如 Protobuf 明确。
- 无论选择哪种格式,都要定义字段兼容规则、未知字段处理、默认值、枚举扩展和版本发布流程。
- 性能比较必须在真实负载、压缩、网络和 CPU 条件下测量;小响应可能因编解码和网关转换而看不到明显收益。
题目解析
格式选择会影响日志可读性、抓包调试、SDK 生成、存储成本和跨团队协作。对外接口通常更重视兼容和易用性,对内高频链路更重视契约和效率。
二进制格式并不自动安全。字段校验、长度限制、反序列化边界和权限校验仍然必须在服务端完成。
常见误区
- 只因为二进制更小就把所有公开 API 改成二进制协议。
- 认为 JSON 没有 schema 就不需要字段契约和兼容策略。
- 忽略客户端、网关和日志平台是否能处理选定格式。