解析swagger/openapi 2.0和3.0.0解析器
prance的Python项目详细描述
用法
安装
prance可从pypi获得,并可通过pip安装:
$ pip install prance
注意,这将安装代码,但必须指定其他子包 解锁各种功能。至少,解析后端必须是 安装。对于cli功能,您需要进一步的依赖。
建议的安装将安装cli、使用icu并安装一个验证 后端:
$ pip install prance[osv,icu,cli]
确保您已安装了icu unicode库, 以及在运行上述命令之前的python dev库。如果没有,请使用 以下命令:
###ubuntu
$ sudo apt-get install libicu-dev $ sudo apt-get install python3-dev
命令行界面
安装prance之后,cli可用于验证(和解析 规范中的外部参考:
# Validates with resolving $ prance validate path/to/swagger.yml # Validates without resolving $ prance validate --no-resolve path/to/swagger.yml # Fetch URL, validate and resolve. $ prance validate http://petstore.swagger.io/v2/swagger.json Processing "http://petstore.swagger.io/v2/swagger.json"... -> Resolving external references. Validates OK as Swagger/OpenAPI 2.0!
验证不是prance的唯一特征。副作用之一 解析是指从具有引用的规范中,可以创建完全解析的 输出规格。在过去,这是通过 validate 命令的选项来完成的, 但现在有一个特定的命令专门用于此目的:
# Compile spec
$ prance compile path/to/input.yml path/to/output.yml
最后,随着openapi 3.0.0的到来,使用工具 将旧规格转换为新标准。而不是重新发明轮子, prance只提供了一个cli命令,用于将规范传递给 swagger2openapi -a工作 因此,此命令需要Internet连接:
# Convert spec
$ prance convert path/to/swagger.yml path/to/openapi.yml
代码
很可能您有spec文件并希望对其进行分析:
frompranceimportResolvingParserparser=ResolvingParser('path/to/my/swagger.yaml')parser.specification# contains fully resolved specs as a dict
prance还包括一个不遵循json的非解析解析器。 推荐信,以备不时之需。
frompranceimportBaseParserparser=BaseParser('path/to/my/swagger.yaml')parser.specification# contains specs as a dict still containing JSON references
在windows上,如果您传递类似posix的路径,代码将正确响应 ( /c:/swagger )或路径是否相对。如果你通过绝对 windows路径(如 c:\ swagger.yaml ),您可以使用 prance.util.fs.abspath 转换它们。
URL也可以解析:
parser=ResolvingParser('http://petstore.swagger.io/v2/swagger.json')
基本上,就是这样。有很多实用程序代码 或者可能也没用。有关详细信息,请参阅完整的文档。
兼容性
不同的验证后端支持不同的功能。
<表> < COLGROUP > < COL/> < COL/> < COL/> < COL/> < COL/> < COL/> < COL/> <广告> 后端 python版本 OpenAPI版本 严格模式 注释 可从 链接 < /广告> <正文> 虚张声势规格验证程序 2和3 仅限2.0您可以在解析器的构造函数中选择后端:
$ pip install prance0
依赖项中不包括后端;它们在运行时被检测到。如果你安装它们, 他们可以使用:
$ pip install prance1
关于严格模式的说明: openapi规范有点模棱两可。一方面,他们使用json 引用和json模式。但另一方面,他们指定的例子 不总是与json规范匹配。
最值得注意的是,json只接受对象中的字符串键。然而,规范中的一些键往往是 整数值,尤其是响应的状态码。严格模式拒绝非字符串键; 默认的宽大模式接受它们。
因为 flex 验证器不是基于json的,所以它没有这个问题。 严格选项 因此,此处不适用。
关于flex用法的说明: 虽然flex是最快的验证后端,但不幸的是它不再是 已维护,其依赖项存在问题。首先,它取决于pyyaml的一个版本。 包含安全缺陷。另一方面,它明确地依赖于旧版本的 单击
因此,如果您使用flex子包,您将自行承担风险。
关于json引用的注释
rfc中json引用的相关部分可以这样压缩:
< Buff行情>json引用是一个json对象,它包含一个名为 "$ref",它有一个json字符串值。例子:
{"$ref":"http://example.com/example.json\foo/bar" rel="nofollow">http://example.com/example.json\foo/bar"}
(…)
json引用对象中除"$ref"之外的任何成员都应是 被忽略。
(…)
json引用对象的解析应该产生 json值。实现可以选择将引用替换为 参考值。
prance对于忽略额外的键是严格的,并通过将引用替换为 参考值。
实际上,这意味着给定这样一个引用:
$ pip install prance2
然后,经过解析,结果如下:
$ pip install prance3
也就是说,根据规范的要求,忽略键foo。这就是openapi 规范倾向于在 schema 对象中使用json引用,并放置任何其他参数 作为 模式对象的兄弟对象。
扩展名
prance包括引用外部夸张定义的能力 在外部python包中。这样的包必须已经是可导入的 (即已安装),并可通过 资源管理器api (更多信息请参见此处的"包含数据文件" rel="nofollow")。
例如,您可以使用文件创建一个包 base.yaml 包含定义
$ pip install prance4
在 setup.py 中,对于 common\u swag 您可以添加如下行
$ pip install prance5
然后,在某个应用程序中安装了 common_swag ,就可以 现在写入
$ pip install prance6