4.3. 使用 Service Registry REST API 命令管理工件引用


服务 Registry 工件类型,如 Apache Avro、Protobuf 和 JSON Schema 可以包括从一个 工件文件到另一个工件文件中的工件引用。您可以通过定义可重复使用的模式和 API 工件来创建效率,然后从多个位置引用它们。

本节演示了一个简单的基于 curl 的示例,它使用了 Service Registry 核心 REST API 来添加和检索到 Service Registry 中简单 Avro 模式工件的工件引用。

这个示例首先创建一个名为 ItemId 的 schema 工件:

ItemId 模式

{
    "namespace":"com.example.common",
    "name":"ItemId",
    "type":"record",
    "fields":[
        {
            "name":"id",
            "type":"int"
        }
    ]
}

然后,创建名为 Item 的 schema 构件,其中包含对嵌套 ItemId 构件的引用。

项 schema 带有嵌套的 ItemId 模式

{
    "namespace":"com.example.common",
    "name":"Item",
    "type":"record",
    "fields":[
        {
            "name":"itemId",
            "type":"com.example.common.ItemId"
        },
    ]
}

前提条件

  • Service Registry 在您的环境中安装并运行

流程

  1. 添加您要创建嵌套工件引用的 ItemId 模式工件,以使用 /groups/{group}/artifacts 操作:

    $ curl -X POST MY-REGISTRY-URL/apis/registry/v2/groups/my-group/artifacts \
       -H "Content-Type: application/json; artifactType=AVRO" \
       -H "X-Registry-ArtifactId: ItemId" \
       -H "Authorization: Bearer $ACCESS_TOKEN" \
       --data '{"namespace": "com.example.common", "type": "record", "name": "ItemId", "fields":[{"name":"id", "type":"int"}]}'
    • 这个示例添加了一个 Avro schema 工件,其工件 ID 为 ItemId。如果没有指定唯一的工件 ID,Service Registry 会自动生成一个作为 UUID。
    • MY-REGISTRY-URL 是在其上部署 Service Registry 的主机名。例如: my-cluster-service-registry-myproject.example.com
    • 本例在 API 路径中指定 my-group 的组 ID。如果没有指定唯一组 ID,则必须在 API 路径中指定 ./groups/default
  2. 验证响应是否包含预期的 JSON 正文,以确认添加了构件。例如:

    {"name":"ItemId","createdBy":"","createdOn":"2022-04-14T10:50:09+0000","modifiedBy":"","modifiedOn":"2022-04-14T10:50:09+0000","id":"ItemId","version":"1","type":"AVRO","globalId":1,"state":"ENABLED","groupId":"my-group","contentId":1,"references":[]}
  3. 使用 /groups/{group}/artifacts 操作添加包含对 Item Id 架构的 artifact 引用的 Item 模式工件:

    $ curl -X POST MY-REGISTRY-URL/apis/registry/v2/groups/my-group/artifacts \
    -H 'Content-Type: application/create.extended+json' \
    -H "X-Registry-ArtifactId: Item" \
    -H 'X-Registry-ArtifactType: AVRO' \
    -H "Authorization: Bearer $ACCESS_TOKEN" \
    --data-raw '{
        "content": "{\r\n \"namespace\":\"com.example.common\",\r\n  \"name\":\"Item\",\r\n  \"type\":\"record\",\r\n  \"fields\":[\r\n   {\r\n  \"name\":\"itemId\",\r\n   \"type\":\"com.example.common.ItemId\"\r\n        }\r\n    ]\r\n}",
        "references": [
            {
                "groupId": "my-group",
                "artifactId": "ItemId",
                "name": "com.example.common.ItemId",
                "version": "1"
            }
        ]
    }'
    • 对于工件引用,您必须指定自定义内容类型 application/create.extended+json,这会扩展 application/json 内容类型。
  4. 验证响应是否包含预期的 JSON 正文,以确认已使用引用创建工件。例如:

    {"name":"Item","createdBy":"","createdOn":"2022-04-14T11:52:15+0000","modifiedBy":"","modifiedOn":"2022-04-14T11:52:15+0000","id":"Item","version":"1","type":"AVRO","globalId":2,"state":"ENABLED","groupId":"my-group","contentId":2,"references":[1]}
  5. 通过指定包含引用的工件的工件 ID,从 Service Registry 检索工件引用。在本例中,指定的全局 ID 是 2:

    $ curl MY-REGISTRY-URL/apis/registry/v2/ids/globalIds/2/references
  6. 验证响应是否包含此工件引用的预期的 JSON 正文。例如:

    [{"groupId":"my-group","artifactId":"ItemId","version":"1","name":"com.example.common.ItemId"}]

其他资源

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.