Pyramid addon for openapi 3 validation
pyramid-openapi3的Python项目详细描述
根据OpenAPI 3.0文档验证金字塔视图
安心
这个包存在的原因是为了在提供restful api时让您安心。你可以专注于生活中更重要的事情,而不是追查可预防的错误并向消费者道歉。
- 您的api文档永远不会过期,因为它是从您编写的api文档中生成的。
- 文档附带了针对api中每个端点的试用示例。您不必提供(和维护)
curl
命令来展示您的api是如何工作的。用户可以在浏览器中自己尝试。 - 您的api文档总是有效的,因为如果文档不符合openapi 3.0规范,您的金字塔应用程序甚至都不会启动。
- 自动请求有效载荷验证和净化。您的视图不需要任何代码f或验证和输入卫生。视图代码只处理业务逻辑。无需编写大量的测试,因为每个请求及其有效负载在到达您的视图代码之前都会根据您的api文档进行验证。
- 您的api响应始终与api文档匹配。视图中的每个响应都将根据文档进行验证,如果响应与文档中指定的某个api端点的输出不完全匹配,则返回
500内部服务器错误
。 - 唯一的真理来源。由于上面概述的检查,您可以确保您的api文档所说的事实上是实际发生的事情。当你问一个与api相关的问题,比如"再次提醒我,endpoint/user/info返回哪个字段"时,你只有一个可以参考的事实来源。
- 基于金字塔,成熟的python web框架。Mozilla、Yelp、Rollbar和SurveyMonkey等公司的信任金字塔也运行在金字塔上。Pyramid经过了全面的测试,并记录了,提供了灵活性、性能和大量的生态系统。g-pyramid.html" rel="nofollow">高质量附加组件
功能
- 使用openapi规范验证器根据openapi 3.0规范验证api文档(例如,
openapi.yaml
或openapi.json
)。 - 为您的api生成并提供招摇过市的试用文档。
- 使用openapi core根据api文档验证传入请求和传出响应。
开始
在棱锥图项目中声明
棱锥图openapi3
为依赖项。包括以下行:
config.include("pyramid_openapi3")config.pyramid_openapi3_spec('openapi.yaml',route='/api/v1/openapi.yaml')config.pyramid_openapi3_add_explorer(route='/api/v1/')
- 使用
openapi
视图谓词来启用请求/响应验证:
@view_config(route_name="foobar",openapi=True,renderer='json')defmyview(request):returnrequest.openapi_validated.parameters
对于请求,request.openapi_validated
有两个字段可用:参数
和正文
。
对于响应,如果负载与API文档不匹配,则会引发异常。
演示/示例
此软件包提供了两个示例:
- 一个相当简单的提供Hello World API的单文件应用程序。
- 一个稍微多一点的内置应用程序提供了一个todo应用程序api
这两个例子都附带了测试,这些测试展示了金字塔OpenAPI的错误处理和验证功能。
a完全构建的应用程序,100%测试覆盖,提供arealworld.ioAPI,可在niteoweb/pyramid realworld示例应用程序获得。它是一个Heroku可部署的金字塔应用程序,为类似medium.com的社交应用程序提供了一个API。我们鼓励您使用它作为下一个项目的脚手架。
设计防御
金字塔的作者认为h验证手动编写的api文档的方法优于从python代码生成api文档的方法。原因如下:
a)文档的生成和验证都是有损过程。运行生成/验证的底层库总是缺少某些内容。要么是来自最新openapi规范的特性,要么是实现缺陷。为了生成api文档中可能只用于前端的部分,必须派生底层库是很不幸的。
另一方面,验证允许跳过尚未支持的验证部分,并且不阻止团队发送文档。
b)验证方法确实牺牲了干性,必须先编写api文档,然后在金字塔中编写(视图)代码。一开始觉得有点多余。然而,这提供了意图和实现之间的明确分离。
c)生成方法的缺点是,即使是对于金字塔后端不处理的api文档部分,也必须编写python代码,因为它可能由不同的系统处理,或者只针对文档,或者只针对api的客户端。这会用不属于金字塔的代码填充金字塔代码基。
运行测试
您需要在计算机上安装pipenv和python 3.7。然后您可以运行:
$ make tests
相关套餐
这些包处理相同的问题空间:
- 金字塔oas3似乎做的事情与金字塔openapi3非常相似,但文档不是英文的,很遗憾,我们不能完全理解它只是阅读代码所做的事情。
- pyramid\u swagger也有类似的功能 事情,但对于夸张的2.0文档。
- connexion采用与金字塔OpenAPI3相同的"先编写规范,后编写代码"方法,但基于Flask。
- 瓶子摇晃也采用相同的"先写规范,后编码"方法,但基于瓶子。
- 金字塔apispec使用 APISpec和棉花糖验证库的帮助。请参见上文为什么我们更喜欢验证而不是生成
在野外使用
在生产中使用金字塔OpenAPI3的几个项目:
- Woocart API-Woocart管理的Woocommerce服务的用户控制面板。
更改日志
0.4.0(2019-08-05)
修复头和cookie中的处理参数。[GWei]
引入requestvalidationerror和responsevalidationerror异常 赞成金字塔openapi3_validation_error_view指令。 [GWei]
0.3.0(2019-05-22)
- 添加了类型提示。[ZUPO]
- 添加了对覆盖相同问题空间的其他包的附加引用。[ZUPO]
- 将回购转移到Pylons Github组织。[Stevepiercy,祖波]
- 添加了一个更内置的todo应用程序示例。[ZUPO]
0.2.8(2019-04-17)
- 修正双重注册视图。[ZUPO]
- 添加了单个文件示例。[ZUPO]
0.2.7(2019-04-14)
- 调整发布过程。[ZUPO]
0.2.6(2019-04-14)
- 增加了一系列测试。[ZUPO]
0.2.5(2019-04-08)
- 通过Circleci自动释放。[ZUPO]
0.1.0(2019-04-08)
- 初次发布。[ZUPO]