🤗 ApiHug × {Postman|Swagger|Api...} = 快↑ 准√ 省↓
- GitHub - apihug/apihug.com: All abou the Apihug
- apihug.com: 有爱,有温度,有质量,有信任
- ApiHug - API design Copilot - IntelliJ IDEs Plugin | Marketplace
使用 Proto Buffer 实现DSL, DSL 描述 OAS OpenAPI Specification
docs/handbook/003_protobuf_and_dsl_basic.md · dearxuecom/apihug.com - Gitee.com
DSL是“领域特定语言”(Domain-Specific Language)的缩写。它是一种专门针对特定领域问题而设计的编程语言或表达方式。与通用编程语言(如Java、Python等)不同,DSL通常专注于解决特定类型的问题或执行特定类型的任务,因此它的语法和功能集通常更加简洁和高效。
DSL可以是外部DSL,具有自己的语法和解析器,也可以是内部DSL,即在通用编程语言中定义的一组专用的库和API。通过使用DSL,开发者可以提高在特定领域的生产力,因为DSL提供了更加直观和表达性强的方式来描述问题和解决方案。
例如,在API设计领域,可以使用DSL来定义API的接口和行为,使得API的设计更加清晰和易于管理。在软件开发中,DSL可以用来描述用户界面、业务规则或数据模型等。
总的来说,DSL是一种强大的工具,它可以帮助开发者更加高效和精确地解决特定领域的问题。
定义
- Protobuf 即Protocol Buffers,是Google公司开发的一种跨语言和平台的序列化数据结构的方式,包含GRPC
- The OpenAPI Specification 定义了一个标准、跟编程语言无关的 HTTP API接口描述 (defines a standard, programming language-agnostic interface description for HTTP APIs);
- 领域特定语言(domain-specific language)(DSL),是一种旨在特定领域下的上下文的语言。这里的领域是指某种商业上的(例如银行业、保险业等)上下文,也可以指某种应用程序的(例如 Web 应用、数据库等)上下文。
目的
借助 Protobuf 实现 DSL 用以定义 OpenAPI; WHY?
- 更易用: Protobuf 语法极简,长时间业界实践, OAS, 通用标准,简单易懂。
- 更结构化:严格于 json/yml 纯格式, 静态语法校验, 更结构化,更严谨,完善包分发体系。
- 更平滑:protoc 和各宿主语言之间的桥梁, 让设计和实现之间无缝平移。
基石
当然这样的设想不是 Hope
首创, 已经有很多的先例在尝试这样的方式,定义和分享 Api, 比如; gRPC-Gateway 用以打通grpc 和 RESTful JSON API 之间的桥梁:
以及整个 google 系 API的 protobuf 定义 Google Open API Protos
参考
- gRPC-Gateway ,gRPC-Gateway is a plugin of protoc. It reads a gRPC service definition and generates a reverse-proxy server which translates a RESTful JSON API into gRPC.
- Google Open API Protos ; public Google APIs that support both REST and gRPC protocols.
- The OpenAPI Specification
- Jetbrains Domain-Specific Languages
- ApiHug101-Bilibili
- ApiHug101-Youtube