1.2. Service Registry 中的 schema 和 API 工件
存储在 Service Registry 中的项目(如事件模式和 API 设计)被称为 registry 工件。下面显示了一个简单共享价格应用程序的 JSON 格式的 Apache Avro 模式工件示例:
Avro 模式示例
{ "type": "record", "name": "price", "namespace": "com.example", "fields": [ { "name": "symbol", "type": "string" }, { "name": "price", "type": "string" } ] }
当将模式或 API 设计添加为 Service Registry 中的工件时,客户端应用程序可以使用该模式或 API 设计来验证客户端消息在运行时是否符合正确的数据结构。
模式和 API 组
工件组是一个可选的 命名集合,即 schema 或 API 工件的集合。每个组都包含一组逻辑相关的模式或 API 设计,通常由单个实体管理,属于一个特定的应用程序或机构。
您可以在添加模式和 API 设计时创建可选的工件组,以便在 Service Registry 中组织它们。例如,您可以创建组来匹配 development
和 production
的应用程序环境,或 sales
和 engineering
机构。
模式和 API 组可以包含多个工件类型。例如,您可以在同一个组中都有 Protobuf, Avro, JSON Schema, OpenAPI, 或 AsyncAPI 工件。
您可以使用 Service Registry web 控制台、REST API、命令行、Maven 插件或 Java 客户端应用程序创建模式和 API 工件和组。以下简单示例演示了使用 Core Registry REST API:
$ curl -X POST -H "Content-type: application/json; artifactType=AVRO" \ -H "X-Registry-ArtifactId: share-price" \ --data '{"type":"record","name":"price","namespace":"com.example", \ "fields":[{"name":"symbol","type":"string"},{"name":"price","type":"string"}]}' \ https://my-registry.example.com/apis/registry/v2/groups/my-group/artifacts
本例创建一个名为 my-group
的工件组,并添加带有 share-price
的工件 ID 的 Avro 模式。
在使用 Service Registry web 控制台时指定组是可选的,并自动创建一个 default
组。在使用 REST API 或 Maven 插件时,如果您不想创建唯一组,请在 API 路径中指定 默认组
。
其他资源
- 有关支持的工件类型的信息,请参考 第 9 章 Service Registry 工件参考。
- 有关 Core Registry API 的详情,请查看 Apicurio Registry REST API 文档。
对其他模式和 API 的引用
有些 Service Registry 工件类型可能会包括从一个 工件文件到另一个工件引用。您可以通过定义可重复使用的模式或 API 组件来创建效率,然后从多个位置引用它们。例如,您可以使用 $ref
语句在 JSON Schema 或 OpenAPI 中指定引用,或使用 import
语句在 Google Protobuf 中指定,或使用嵌套命名空间在 Apache Avro 中指定。
以下示例显示了一个名为 TradeKey
的简单 Avro 模式,其中包含使用嵌套命名空间对名为 Exchange
的另一个模式的引用:
带有嵌套交换模式的 Tradekey 模式
{ "namespace": "com.kubetrade.schema.trade", "type": "record", "name": "TradeKey", "fields": [ { "name": "exchange", "type": "com.kubetrade.schema.common.Exchange" }, { "name": "key", "type": "string" } ] }
Exchange 模式
{ "namespace": "com.kubetrade.schema.common", "type": "enum", "name": "Exchange", "symbols" : ["GEMINI"] }
工件引用存储在 Service Registry 中,作为从工件类型特定引用到内部 Service Registry 引用的工件元数据集合。Service Registry 中的每个工件引用都由以下内容组成:
- 组 ID
- 工件 ID
- 工件版本
- 工件引用名称
您可以使用 Service Registry 核心 REST API、Maven 插件和 Java serializers/反序列化器(SerDes)来管理工件引用。Service Registry 存储工件引用以及工件内容。Service Registry 还维护所有工件引用的集合,以便您可以搜索或列出特定工件的所有引用。
支持的工件类型
Service Registry 目前仅支持对以下工件类型的工件引用:
- Avro
- protobuf
- JSON 架构
- OpenAPI
- AsyncAPI
其他资源
有关管理工件引用的详情,请参考:
- 有关 Java 示例,请参阅 带有参考演示的 Apicurio Registry SerDes。