阿夫罗·舍马·帕塞尔
AsyncAPI schema parser for Avro 1.x schemas. 中国植物物种信息数据库.
说明 版本 +++
2.0.0此软件包仅由@asyncapi/parser翻译:2.0.0。 。 。 .
说明 此软件包在
asyncapi/parser-js单列波, 下packages/avro-schema-parser。它仍然作为 npm 发布@asyncapi/avro-schema-parser和同一个公共API。 请解开问题并拉动请求parser-js仓库.软件包规格 :
docs/avro-schema-parser/spec.md。 。 。 .
安装
npm install @asyncapi/avro-schema-parser
// OR
yarn add @asyncapi/avro-schema-parser
使用量
import { Parser } from '@asyncapi/parser';
import { AvroSchemaParser } from '@asyncapi/avro-schema-parser';
const parser = new Parser();
parser.registerSchemaParser(AvroSchemaParser());
const asyncapiWithAvro = `
asyncapi: 2.0.0
info:
title: Example with Avro
version: 0.1.0
channels:
example:
publish:
message:
schemaFormat: 'application/vnd.apache.avro;version=1.9.0'
payload: # The following is an Avro schema in YAML format (JSON format is also supported)
type: record
name: User
namespace: com.company
doc: User information
fields:
- name: displayName
type: string
- name: email
type: string
- name: age
type: int
`
const { document } = await parser.parse(asyncapiWithAvro);
const { Parser } = require('@asyncapi/parser');
const { AvroSchemaParser } = require('@asyncapi/avro-schema-parser');
const parser = new Parser();
parser.registerSchemaParser(AvroSchemaParser());
const asyncapiWithAvro = `
asyncapi: 2.0.0
info:
title: Example with Avro
version: 0.1.0
channels:
example:
publish:
message:
schemaFormat: 'application/vnd.apache.avro;version=1.9.0'
payload: # The following is an Avro schema in YAML format (JSON format is also supported)
type: record
name: User
namespace: com.company
doc: User information
fields:
- name: displayName
type: string
- name: email
type: string
- name: age
type: int
远程参考使用
import { Parser } from '@asyncapi/parser';
import { AvroSchemaParser } from '@asyncapi/avro-schema-parser';
const parser = new Parser();
parser.registerSchemaParser(AvroSchemaParser());
const asyncapiWithAvro = `
asyncapi: 2.0.0
info:
title: Example with Avro
version: 0.1.0
channels:
example:
publish:
message:
schemaFormat: 'application/vnd.apache.avro;version=1.9.0'
payload:
$ref: 'https://schemas.example.com/user'
`
const { document } = await parser.parse(asyncapiWithAvro);
const { Parser } = require('@asyncapi/parser');
const { AvroSchemaParser } = require('@asyncapi/avro-schema-parser');
const parser = new Parser();
parser.registerSchemaParser(AvroSchemaParser());
const asyncapiWithAvro = `
asyncapi: 2.0.0
info:
title: Example with Avro
version: 0.1.0
channels:
example:
publish:
message:
schemaFormat: 'application/vnd.apache.avro;version=1.9.0'
payload:
$ref: 'https://schemas.example.com/user'
`
const { document } = await parser.parse(asyncapiWithAvro);
使用本地参考文献
import { Parser } from '@asyncapi/parser';
import { AvroSchemaParser } from '@asyncapi/avro-schema-parser';
const parser = new Parser();
parser.registerSchemaParser(AvroSchemaParser());
const asyncapiWithAvro = `
asyncapi: 2.0.0
info:
title: Example with Avro
version: 0.1.0
channels:
example:
publish:
message:
schemaFormat: 'application/vnd.apache.avro;version=1.9.0'
payload:
$ref: 'local/path/to/file/user'
`
const { document } = await parser.parse(asyncapiWithAvro);
const { Parser } = require('@asyncapi/parser');
const { AvroSchemaParser } = require('@asyncapi/avro-schema-parser');
const parser = new Parser();
parser.registerSchemaParser(AvroSchemaParser());
const asyncapiWithAvro = `
asyncapi: 2.0.0
info:
title: Example with Avro
version: 0.1.0
channels:
example:
publish:
message:
schemaFormat: 'application/vnd.apache.avro;version=1.9.0'
payload:
$ref: 'local/path/to/file/user'
`
const { document } = await parser.parse(asyncapiWithAvro);
与逻辑 Schema 登记处的使用
创建 API 密钥
复制密钥和秘密
在您的 AsyncAPI 文档中使用
import { Parser } from '@asyncapi/parser';
import { AvroSchemaParser } from '@asyncapi/avro-schema-parser';
const parser = new Parser();
parser.registerSchemaParser(AvroSchemaParser());
const asyncapiWithAvro = `
asyncapi: 2.0.0
info:
title: Example with Avro
version: 0.1.0
channels:
example:
publish:
message:
schemaFormat: 'application/vnd.apache.avro;version=1.9.0'
payload:
$ref: 'https://LY422RBU2HN6JQ5T:+f8wz9a0iM06AX7xfwbzSM9YPw/JIkr22Cvl5EKT5Hb1d/nz5nOpbXV/[email protected]/subjects/test/versions/1/schema'
`
const { document } = await parser.parse(asyncapiWithAvro);
const { Parser } = require('@asyncapi/parser');
const { AvroSchemaParser } = require('@asyncapi/avro-schema-parser');
const parser = new Parser();
parser.registerSchemaParser(AvroSchemaParser());
const asyncapiWithAvro = `
asyncapi: 2.0.0
info:
title: Example with Avro
version: 0.1.0
channels:
example:
publish:
message:
schemaFormat: 'application/vnd.apache.avro;version=1.9.0'
payload:
$ref: 'https://LY422RBU2HN6JQ5T:+f8wz9a0iM06AX7xfwbzSM9YPw/JIkr22Cvl5EKT5Hb1d/nz5nOpbXV/[email protected]/subjects/test/versions/1/schema'
`
const { document } = await parser.parse(asyncapiWithAvro);
特征
Avro计划验证
AsyncAPI 文档中包含的 Avro 计划使用 亚军编辑 parser.validate(...) 函数返回所有验证问题.
import { Parser } from '@asyncapi/parser';
import { AvroSchemaParser } from '@asyncapi/avro-schema-parser';
const parser = new Parser();
parser.registerSchemaParser(AvroSchemaParser());
const asyncapiWithInvalidAvro = `
asyncapi: 2.0.0
info:
title: Example with Avro
version: 0.1.0
channels:
example:
publish:
message:
schemaFormat: 'application/vnd.apache.avro;version=1.9.0'
payload:
type: notAValidAvroType
`;
const diagnostics = await parser.validate(asyncapiWithInvalidAvro);
// Custom schema issues are stored by the code "asyncapi-schemas-v2"
const avroDiagnostics = diagnostics.filter(d => d.code === 'asyncapi-schemas-v2');
console.log(avroDiagnostics);
const { Parser } = require('@asyncapi/parser');
const { AvroSchemaParser } = require('@asyncapi/avro-schema-parser');
const parser = new Parser();
parser.registerSchemaParser(AvroSchemaParser());
const asyncapiWithInvalidAvro = `
asyncapi: 2.0.0
info:
title: Example with Avro
version: 0.1.0
channels:
example:
publish:
message:
schemaFormat: 'application/vnd.apache.avro;version=1.9.0'
payload:
type: notAValidAvroType
`;
const diagnostics = await parser.validate(asyncapiWithInvalidAvro);
// Custom schema issues are stored by the code "asyncapi-schemas-v2"
const avroDiagnostics = diagnostics.filter(d => d.code === 'asyncapi-schemas-v2');
console.log(avroDiagnostics);
说明
parser.parse(...)函数也返回diagnostics与所有验证问题相关的数据.
所需属性的支持
需要的字段是没有默认值且没有 "null" 工会因素.
支持 Avro 规格之上的额外属性
未定义的附加属性 Avro 规格 允许,并按规格作为元数据处理。 为了提高生成的AsyncAPI文档的人类可读性,并利用JSON schema中更多的特性,我们包含了对可被添加到Avro文档中的额外属性的支持.
列出所有支持的额外属性
example- 可用于从给定字段的商业领域定义示例值。 价值将传播到 示例属性 在使用一些 AsyncAPI 文档生成器时,将选择生成的“有效载荷实例”.
数字实例 :
multipleOf- 可用于定义 数值的倍数编辑multipleOf必须是数字, 绝对大于 0 .maximum- 可用于定义 数字实例的最大值。 。 。 .exclusiveMaximum- 可用于定义 数字实例的专属最大值。 。 。 .minimum- 可用于定义 数字实例的最小值。 。 。 .exclusiveMinimum- 可用于定义 数字实例的最小值。 。 。 .
字符串实例 :
maxLength- 可用于定义 字符串实例的最大值。此关键字的值必须是非负整数.minLength- 可用于定义 字符串实例的最小值。此关键字的值必须是非负整数.pattern- 可用于定义 字符串实例的图案值。 。 。 .
对于矩阵实例 :
maxItems- 可用于定义 字符串实例的最大项目值。此关键字的值必须是非负整数.minItems- 可用于定义 字符串实例的项目值。此关键字的值必须是非负整数.uniqueItems- 可用于定义 字符串实例中唯一的项目值。此关键字的值必须是布尔值.
对名称和命名空间的支持
如果在Avro schema的顶级,定义了"名"属性,则会被复制到相应的JSON schema的"x-parser-schema-id"属性. 如果Avro schema也有"namespace"属性的定义,那么这个schema完全合格的名称将被放入该属性. 完全合格的名称由命名空间来定义,后为点,后为名.
如果有两个方案决定了同一个完全合格的名称,则只有最后一个由解析器返回。 确定你的计划是独一无二的.
如果不存在名称属性, “ x- parser- schema- id” 将有一个生成的独特 id , 其名称像主 parser 生成的 “ 匿名- schema-1 ” 。 "x-parser-schema-id"是" is"的一种 自定义扩展 由解析器支持.
限制
浮和双精度数字
JSON数字(RFC 4627, 第2.4节),不定义数字的规模和/或精确度的任何限制. 这么说,我们可以强制限制 int 财务报告和审定财务报表 long 但我们不能强制他们 float 财务报告和审定财务报表 double 因为他们不能精确地在JSON Schema上被代表.
因为我们支持额外的属性 在字段,你可以设置
minimum财务报告和审定财务报表maximum属性在浮标和双类型上显示数字限制.
硬码密钥和密钥
这不是对这个一揽子方案本身的限制,而是对以下内容的限制: JSON 参考文献 RFC。到目前为止,您只能为 key 财务报告和审定财务报表 secret 编辑 $ref URL (中文(简体) ).
贡献者
感谢这些伟大的人emoji 密钥:
弗朗·门德斯 💻 🚧 👀 🤔 |
卢卡斯·戈尔尼茨基 🚧 👀 🚇 |
卢多维奇·杜萨尔 💻 🚧 👀 |
戴尔·莱恩 💻 🚧 👀 |
乔纳森 💻 |
拉迪姆·洛斯克特 💻 |
迈克尔·戴维斯 💻 |
赫尔曼·施奈德 💻 |
本项目遵循 全部贡献者 规格。 任何捐款都欢迎!