Confluent Schema Registry:POST 简单 JSON 模式,对象只有一个 属性

Confluent Schema Registry: POST simple JSON schema with object having single property

OS:  Ubuntu 18.x
docker image (from dockerhub.com, as of 2020-09-25):  confluentinc/cp-schema-registry:latest

我正在研究 Confluent Schema Registry 的 HTTP API。首先,关于注册表采用的 JSON 架构定义的哪个版本,是否有明确的断言?现在,我假设 Draft v7.0。更广泛地说,我认为 API returns 支持的模式应该列出版本。例如,而不是:

$ curl -X GET http://localhost:8081/schemas/types
["JSON","PROTOBUF","AVRO"]

你会:

$ curl -X GET http://localhost:8081/schemas/types
[{"flavor": "JSON", "version": "7.0"}, {"flavor": "PROTOBUF", "version": "1.2"}, {"flavor": "AVRO", "version": "3.5"}]

所以至少程序员会明确知道 Schema Registry 假定的内容。

除了这个问题,我似乎无法 POST 一个相当琐碎的 JSON 注册表模式:

$ curl -X POST -H "Content-Type: application/vnd.schemaregistry.v1+json" --data '{ "schema": "{ \"type\": \"object\", \"properties\": { \"f1\": { \"type\": \"string\" } } }" }' http://localhost:8081/subjects/mytest-value/versions
{"error_code":42201,"message":"Either the input schema or one its references is invalid"}

我在这里 POST 将架构发送到 mytest 主题。模式,顺便说一句,我从 Confluent 文档中抓取,然后相应地转义它。

你能说出为什么这个模式没有 POST 到注册表吗?更一般地说,我可以假设完全支持 JSON 架构定义的 Draft v7.0 吗?

您需要传递 schemaType 标志。 “如果未提供 schemaType,则假定 schemaType 为 AVRO。” https://docs.confluent.io/current/schema-registry/develop/api.html#post--subjects-(string-%20subject)-versions:

'{"schemaType":"JSON","schema":"{\"type\":\"object\",\"fields\":[{\"name\":\"f1\",\"type\":\"string\"}]}"}'

我同意支持版本的输出会有所帮助。