跳转到主要内容

解析Swagger/OpenAPI 2.0和3.0.0解析器

项目描述

License PyPI Python Versions Package Format Package Status

Logo

Prance为Python提供了Swagger/OpenAPI 2.0和3.0 API规范的解析器。它使用openapi_spec_validatorswagger_spec_validatorflex来验证规范,但还根据OpenAPI规范解析JSON引用。

后者主要涉及处理非URI引用;OpenAPI可以提供相对文件路径,而JSON引用则需要URI。

使用方法

安装

Prance可在PyPI获得,并且可以通过pip安装。

$ pip install prance

请注意,这将安装代码,但还需要指定额外的子包来解锁各种功能。至少需要安装解析后端。对于 CLI 功能,您需要进一步的依赖项。

推荐的安装方式会安装 CLI,使用 ICU 并安装一个验证后端

$ pip install prance[osv,icu,cli]

确保在运行上述命令之前已经安装了 ICU Unicode Library 以及 Python 开发库。如果没有,请使用以下命令

$ sudo apt-get install libicu-dev python3-dev # Ubuntu/Debian
$ sudo dnf install libicu-devel python3-devel # Fedora

命令行界面

安装 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 的网络 API,因此需要网络连接才能使用此命令

# Convert spec
$ prance convert path/to/swagger.yml path/to/openapi.yml

代码

您很可能有一个规范文件并希望解析它

from prance import ResolvingParser
parser = ResolvingParser('path/to/my/swagger.yaml')
parser.specification  # contains fully resolved specs as a dict

Prance 还包括一个不解析 JSON 引用的解析器,以防您更喜欢这种选择。

from prance import BaseParser
parser = 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')

基本上就是这样。还有一整套可能有用也可能不用的实用代码。有关详细信息,请参阅 完整文档

兼容性

Python 版本

0.16.2 版是最后一个支持 Python 2 的版本。它于 2019 年 11 月 12 日发布。Python 2 于 2019 年年底结束支持。如果您希望更新支持 Python 2 的包,请直接联系维护者。

直到最近,我们还使用 PyPy 进行了测试。不幸的是,Travis 不太擅长支持它。因此,在没有空闲时间的情况下,它们被禁用了。《问题 50》跟踪了这方面的进展。

同样,但不太关键的是,Python 3.4 已不再受到 CI 供应商的很多关注,因此不再支持该版本的自动构建。

后端

不同的验证后端支持不同的功能。

后端

Python 版本

OpenAPI 版本

严格模式

备注

可用自

链接

swagger-spec-validator

2 和 3

仅 2.0

慢;不接受整数键(见严格模式)。

prance 0.1

swagger_spec_validator

flex

2 和 3

仅 2.0

n/a

最快;不幸的是已弃用。

prance 0.8

flex

openapi-spec-validator

2 和 3

2.0 和 3.0

慢;不接受整数键(见严格模式)。

prance 0.11

openapi_spec_validator

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

parser = ResolvingParser('http://petstore.swagger.io/v2/swagger.json', backend = 'openapi-spec-validator')

依赖项中不包含任何后端;它们在运行时检测。如果您安装了它们,就可以使用

$ pip install openapi-spec-validator
$ pip install prance
$ prance validate --backend=openapi-spec-validator path/to/spec.yml

关于 flex 使用的说明:虽然 flex 是最快的验证后端,但不幸的是它不再维护,并且其依赖项存在问题。一方面,它依赖于包含安全漏洞的 PyYAML 版本。另一方面,它明确依赖于较旧的 click 版本。

如果您使用flex子包,那么请自行承担风险。

兼容性

有关已知问题列表,请参阅COMPATIBILITY.rst

部分引用解析

可以指示解析器仅解析某些类型的引用。例如,可以解析来自外部URL的引用,同时保持本地引用(即对本地文件或文件内部的引用)完整。

from prance import ResolvingParser
from prance.util.resolver import RESOLVE_HTTP

parser = ResolvingParser('/path/to/spec', resolve_types = RESOLVE_HTTP)

可以通过按位或操作常量来指定多种类型

from prance import ResolvingParser
from prance.util.resolver import RESOLVE_HTTP, RESOLVE_FILES

parser = ResolvingParser('/path/to/spec', resolve_types = RESOLVE_HTTP | RESOLVE_FILES)

扩展

Prance包括在Python外部包中引用swagger定义外部的功能。这样的包必须已经可导入(即已安装),并且可以通过ResourceManager API(更多信息这里)访问。

例如,您可能创建一个名为common_swag的包,其中包含文件base.yaml,包含以下定义

definitions:
  Severity:
    type: string
    enum:
    - INFO
    - WARN
    - ERROR
    - FATAL

common_swagsetup.py中,您会添加如下行

packages=find_packages('src'),
package_dir={'': 'src'},
package_data={
    '': '*.yaml'
}

然后,将common_swag安装到某个应用程序中后,现在可以编写以下内容

definitions:
  Message:
    type: object
    properties:
      severity:
        $ref: 'python://common_swag/base.yaml#/definitions/Severity'
      code:
        type: string
      summary:
        type: string
      description:
        type: string
    required:
    - severity
    - summary

贡献

有关详细信息,请参阅CONTRIBUTING.md

通过finkhaeuser咨询提供专业支持。

许可

基于MIT许可。有关详细信息,请参阅LICENSE.txt文件。

“Prancing unicorn”标志图像版权所有(c)Jens Finkhaeuser。由Moreven B制作。在Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International license下允许使用此标志。

项目详情


下载文件

下载适合您平台文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源代码分发

prance-23.6.21.0.tar.gz (2.8 MB 查看哈希值

上传时间 源代码

构建分发

prance-23.6.21.0-py3-none-any.whl (36.3 kB 查看哈希值

上传时间 Python 3

由以下支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面