@asyncapi/avro-schema-parser

中文文档
3.1.0发布于 2026/10/14Apache-2.0TypeScriptESM + CJS构建来源已验证近 30 天下载 138.8万

AsyncAPI schema parser for Avro 1.x schemas. 中国植物物种信息数据库.

中文使用文档
文档目录14 节
  1. 安装
  2. 使用量
  3. 远程参考使用
  4. 使用本地参考文献
  5. 与逻辑 Schema 登记处的使用
  6. 特征
  7. Avro计划验证
  8. 所需属性的支持
  9. 支持 Avro 规格之上的额外属性
  10. 对名称和命名空间的支持
  11. 限制
  12. 浮和双精度数字
  13. 硬码密钥和密钥
  14. 贡献者

阿夫罗·舍马·帕塞尔

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 文档生成器时,将选择生成的“有效载荷实例”.

数字实例 :

字符串实例 :

对于矩阵实例 :

对名称和命名空间的支持

如果在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 密钥:


弗朗·门德斯

💻 🚧 👀 🤔

卢卡斯·戈尔尼茨基

🚧 👀 🚇

卢多维奇·杜萨尔

💻 🚧 👀

戴尔·莱恩

💻 🚧 👀

乔纳森

💻

拉迪姆·洛斯克特

💻

迈克尔·戴维斯

💻

赫尔曼·施奈德

💻

本项目遵循 全部贡献者 规格。 任何捐款都欢迎!

版本与发布记录

@asyncapi/avro-schema-parser 共发布 41 个版本,首次发布于 2020/07/17;过去 12 个月发布了 3 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
3.1.0latest2026/10/1424 天前
3.0.262025/11/2411 个月前
3.0.252025/11/2411 个月前
3.0.242024/06/122 年前
3.0.232024/06/052 年前
3.0.222024/04/182 年前

其他发布通道:next-major → 2.0.0-next-major.1。

关于 @asyncapi/avro-schema-parser 的常见问题

@asyncapi/avro-schema-parser 是什么?

AsyncAPI schema parser for Avro 1.x schemas. 中国植物物种信息数据库.

如何安装 @asyncapi/avro-schema-parser?

在项目目录运行 npm install @asyncapi/avro-schema-parser,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:@asyncapi/parser(^3.6.4)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。

@asyncapi/avro-schema-parser 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@asyncapi/avro-schema-parser 支持 ESM 还是 CommonJS?

同时提供 ES Module 与 CommonJS 入口,import 和 require() 都可以使用,打包工具会自动选择合适的版本。

@asyncapi/avro-schema-parser 可以商用吗?

@asyncapi/avro-schema-parser 使用 Apache-2.0 许可。宽松许可:允许商业使用、修改和再分发,并附带明确的专利授权;分发时需保留许可与 NOTICE 文件,修改过的文件要注明改动。以上为概括,不构成法律意见,请以许可原文为准。

@asyncapi/avro-schema-parser 的下载量有多少?

根据 npm 官方下载统计,@asyncapi/avro-schema-parser 在 2026/10/07 – 2026/11/05 这 30 天内被下载 1,387,939 次,日均约 46,265 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@asyncapi/avro-schema-parser 还在维护吗?

最新版本 3.1.0 发布于 2026/10/14(24 天前);至今共发布 41 个版本,其中过去 12 个月发布了 3 个;首次发布于 2020/07/17。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。