惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
美团技术团队
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
月光博客
月光博客
J
Java Code Geeks
Jina AI
Jina AI
罗磊的独立博客
宝玉的分享
宝玉的分享
S
SegmentFault 最新的问题
D
DataBreaches.Net
博客园 - 叶小钗
腾讯CDC
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Last Week in AI
Last Week in AI
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Google DeepMind News
Google DeepMind News
阮一峰的网络日志
阮一峰的网络日志
B
Blog
V
Visual Studio Blog
雷峰网
雷峰网
博客园 - 【当耐特】
Apple Machine Learning Research
Apple Machine Learning Research
Engineering at Meta
Engineering at Meta
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报

博客园 - 张占岭

keycloak~缓存对象的介绍与作用 wso2-apim-mcp2改版分析 mcp1和mcp2对比 为什么前端项目使用ts比js要多了 多个IDP的用户联合方案的分析 apisix~forward-auth外部认证 apisix~response-rewrite响应头重写 springboot~关于构造方法注入和字段注入的选择 apisix~OpenResty各阶段的介绍 keycloak~aud受众字段的作用及如何生成 wso2~关于workbuddy中mcp在wso2中的授权端点 k8s~避免调度资源碎片化 WEB安全~csrf介绍 WEB安全~DPoP的介绍 WEB安全~csp的介绍 什么是中间人攻击 WEB安全~xss的介绍 k8s~pod资源限制和JVM的XMX配置 关于对wso2和keycloak的token交换的调研 keycloak~实现OAuth 2.0 Token Exchange backstage~实体的介绍及它们的关系 backstage~将java服务添加到backstage backstage~对接github和gitlab backstage~开始一个backstage应用 apisix~graphQL的支持 wso2几个核心项目介绍 docker~BuildKit的介绍 k8s~secret资源的使用 算法~时间戳计算两个日期是否为同天同时同分 wso2~4.5升级到4.6需要更新的数据表
backstage~openapi的接入与protobuf的对比
张占岭 · 2026-04-17 · via 博客园 - 张占岭

swagger外部文档

apiVersion: backstage.io/v1alpha1
kind: API
metadata:
  name: petstore
  description: The Petstore API
spec:
  type: openapi
  lifecycle: production
  owner: petstore@example.com
  definition:
    $text: https://petstore.swagger.io/v2/swagger.json

嵌入openapi文档

apiVersion: backstage.io/v1alpha1
kind: API
metadata:
  name: artist-api
  description: Retrieve artist details
spec:
  type: openapi
  lifecycle: production
  owner: artist-relations-team
  system: artist-engagement-portal
  definition: |
    openapi: "3.0.0"
    info:
      version: 1.0.0
      title: Artist API
      license:
        name: MIT
    servers:
      - url: http://artist.spotify.net/v1
    paths:
      /artists:
        get:
          summary: List all artists
    ...

占位符$text解释当前仓库相对路径

apiVersion: backstage.io/v1alpha1
kind: API
metadata:
  name: pet-store-api
spec:
  type: openapi
  lifecycle: experimental
  owner: guests
  system: user-system
  # 使用 $text 占位符和相对路径引用同一仓库内的 OpenAPI 文件
  # 路径相对于 catalog-info.yaml 文件的位置
  definition:
    $text: ./src/main/resources/petstore.yaml

openapi和protobuf的对比

简单来说:OpenAPI 是 API 的描述规范和文档标准,而 Protobuf 是一种高效的数据序列化协议和接口定义语言。 它们常常结合使用,但核心目标不同。

以下是详细的对比:

维度 OpenAPI (Swagger) Protobuf (Protocol Buffers)
核心定位 API 描述规范文档标准。专注于定义 RESTful API 的契约,包括路径、参数、请求/响应格式、认证等。 接口定义语言 (IDL)序列化协议。专注于定义数据结构服务接口,并生成高效、跨平台的序列化代码。
主要产出 机器可读的 API 规范文件 (YAML/JSON) 和交互式 API 文档 平台相关的代码(如 .pb.go, .pb.cs 文件)和序列化后的二进制数据流
数据格式 通常使用人类可读的 JSONYAML 编写规范,API 通信也常用 JSON/XML。 使用自定义的 .proto 文本格式定义接口,但传输和存储时使用紧凑的二进制格式
主要场景 对外暴露的 HTTP API,特别是面向 Web、移动端或第三方开发者的 RESTful 服务。强调可读性、易用性和标准化。 内部服务间的 RPC 通信(如 gRPC)、需要高性能和强类型约束的后端微服务、数据存储。
性能 规范文件本身是文本,较大。API 通信使用 JSON/XML,序列化/反序列化开销较大,数据体积也较大 二进制编码,序列化/反序列化极快,生成的数据体积非常小,网络传输效率高。
工具生态 围绕文档生成客户端 SDK 生成Mock 服务器代码生成测试等。是一个强大的 API 开发生命周期工具链。 围绕代码生成RPC 框架。最经典的搭配是 Protobuf + gRPC,提供完整的 RPC 解决方案。
开发体验 面向开发者友好,前端、后端、测试人员可以通过一个文档页面清晰地了解和使用 API。 面向机器和系统友好,通过强类型接口和自动生成的代码,保障了前后端的类型安全,但需要一定的学习成本。

核心关系与如何选择

  1. 不是“二选一”,而是“如何搭配”

    • 你可以用 Protobuf 定义内部微服务接口(通过 gRPC),然后用 OpenAPI 定义对外的 RESTful API 网关。网关负责将外部 REST 调用转换为内部的 gRPC 调用。
    • 也有工具(如 grpc-gateway)能从一个 .proto 文件同时生成 gRPC 服务代码和对应的 OpenAPI 规范,实现“一套定义,两种暴露”。
  2. 选择建议

    • 选择 OpenAPI 当
      • 你的 API 主要给浏览器、移动 App 或第三方开发者调用。
      • API 文档易用性是首要考虑。
      • 你需要与现有的、基于 HTTP/JSON 的生态系统(如大多数云服务、前端框架)集成。
    • 选择 Protobuf (gRPC) 当
      • 你的系统是内部微服务架构,服务间需要高性能、低延迟的通信。
      • 强类型安全接口契约对团队协作至关重要。
      • 你需要支持流式通信(如 gRPC 的流)。
      • 网络带宽和性能是瓶颈。

总结

特性 OpenAPI Protobuf
强项 标准化、文档化、生态工具链、对人类友好 性能、体积、类型安全、对机器友好
典型搭配 RESTful API, HTTP/JSON, 文档站点 gRPC, 二进制流, 微服务间通信
类比 建筑的“设计蓝图”和“使用说明书”,所有人都能看懂。 建筑预制件的“标准化模具”和“组装接口”,用于高效、精确地搭建。

在现代云原生架构中,两者通常协同工作:用 Protobuf/gRPC 构建高效、稳定的后端服务网格,然后用基于 OpenAPI 的 API 网关作为统一、安全的对外入口。