解析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 >是 慢速;不接受整数键(请参阅严格模式)。 prance 0.1 swagger\u spec\u验证程序 弯曲 2和3 仅限2.0 n/a 最快;不幸地被弃用。 跃变0.8 flex OpenAPI规范验证程序 2和3 2.0和3.0 >是 慢速;不接受整数键(请参阅严格模式)。 跃变0.11 OpenAPI规范验证器 <表>

您可以在解析器的构造函数中选择后端:

$ pip install prance
0

依赖项中不包括后端;它们在运行时被检测到。如果你安装它们, 他们可以使用:

$ pip install prance
1

关于严格模式的说明: 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 prance
2

然后,经过解析,结果如下:

$ pip install prance
3

也就是说,根据规范的要求,忽略键foo。这就是openapi 规范倾向于在 schema 对象中使用json引用,并放置任何其他参数 作为 模式对象的兄弟对象。

扩展名

prance包括引用外部夸张定义的能力 在外部python包中。这样的包必须已经是可导入的 (即已安装),并可通过 资源管理器api (更多信息请参见此处的"包含数据文件" rel="nofollow")。

例如,您可以使用文件创建一个包 base.yaml 包含定义

$ pip install prance
4

setup.py 中,对于 common\u swag 您可以添加如下行

$ pip install prance
5

然后,在某个应用程序中安装了 common_swag ,就可以 现在写入

$ pip install prance
6

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何正确测试和调试使用照相机闪光灯的应用程序?   组织。jboss。放松点。spi。未处理的异常:java。lang.NoSuchMethodError:org。冬眠SessionFactory。openSession()Lorg/hibernate/Session;   在同一行上声明多个Java数组?   java Spring批处理管理员,无法替换占位符“批处理”。商业模式。脚本'   使用JQuery的网站上出现java HtmlUnit“不支持浏览器”错误   java JavaFX如何将图形“裁剪”到按钮   java处理mysql中包含逗号的数字   java Hibernate语法错误:应为点   如何根据给定的日期在java中获取30天的回溯日期   java Servlet URL映射   线程“awteventque0”java中的多线程java JFrame异常。util。EmptyStackException,即使堆栈先初始化   JavaSpring控制器/组件实现可序列化   java如何在游戏完成时启动带有按钮的对话框?   java Hibernate双向多对多实现   如何使用Xpath Java修改XML中的属性值,包括注释部分   java Mockito模拟构造函数示例   java如何在不重写的情况下写入文本文件?