用于访问启用Swagger-1.1的API的异步库
项目描述
关于
trio_swagger11是swagger.py的trio兼容版本,能够理解Swagger 1.1定义(仅限于此)。
由于swagger已被重命名为OpenAPI,现在已发布3.0版本(并且有一个实际的规范 – 与Swagger 1.1不同),因此此库(主要)只能与Asterisk一起使用,Asterisk仍然使用Swagger 1.1声明。
Trio-swagger11支持WebSocket扩展,允许对WebSocket进行文档记录,并自动生成WebSocket客户端代码。
来自swagger.py
Swagger.py是一个用于使用Swagger定义的API的Python库。
Swagger的最好描述可以在Swagger主页上找到
Swagger是一个用于描述、生成、消费和可视化RESTful Web服务的规范和完整的框架实现。
Swagger规范 定义了如何使用Swagger描述API。
用法
从PyPI安装最新版本。
$ sudo pip install trio_swagger11
或者使用 setup.py 脚本从源安装。
$ sudo ./setup.py install
API
trio_swagger11将动态从启用Swagger的RESTful API构建一个对象模型。
以下是一个使用Asterisk REST接口的简单示例
#!/usr/bin/env python3
import json
import trio
from trio_swagger11.client import SwaggerClient
from trio_swagger11.http_client import AsynchronousHttpClient
http_client = AsynchronousHttpClient()
http_client.set_api_key('localhost', 'hey:peekaboo')
async def run(ari,msg_json):
channelId = msg_json['channel']['id']
await ari.channels.answer(channelId=channelId)
await ari.channels.play(channelId=channelId,
media='sound:hello-world')
# In a real program you should wait for the PlaybackFinished event instead
await trio.sleep(3)
await ari.channels.continueInDialplan(channelId=channelId)
async def main():
ari = SwaggerClient(
"http://localhost:8088/ari/api-docs/resources.json",
http_client=http_client)
ws = ari.events.eventWebsocket(app='hello')
async for msg in ws:
if not isinstance(msg, WebsocketDataMessage):
break
elif not isinstance(msg, WebsocketTextMessage):
continue # ignore bytes
msg_json = json.loads(msg.data)
if msg_json['type'] == 'StasisStart':
await nursery.start_soon(run,ari,msg_json)
if __name__ == "__main__":
trio.run(main)
数据模型
由 swagger_model 模块提供的数据模型几乎与原始 Swagger API 资源列表和 API 声明相同。这意味着如果您在文档中添加额外的自定义元数据(例如 _author 或 _copyright 字段),它们将传递到对象模型中。我建议在自定义字段前加上下划线,以避免与 Swagger 的未来版本冲突。
有一些有意义的差异。
资源列表
添加了 file 和 base_dir 字段,引用了原始的 .json 文件。
资源列表的 resource_listing 中的 api 数组对象包含一个 api_declaration 字段,这是从引用的 API 文档中处理后的结果。
API 声明
添加了一个 file 字段,引用了原始的 .json 文件。
开发
代码使用 Sphinx 进行了注释,这允许 IntelliJ IDEA 在自动完成时更好地推断类型。
为了保持隔离,我还建议安装(并使用)virtualenv。
$ sudo pip install virtualenv $ mkdir -p ~/virtualenv $ virtualenv ~/virtualenv/swagger $ . ~/virtualenv/swagger/bin/activate
Setuptools 用于构建。使用 Pytest 进行单元测试,并安装了 coverage 插件以生成代码覆盖率报告。使用 --with-coverage 生成代码覆盖率报告。报告的 HTML 版本放在 cover/index.html。
$ ./setup.py develop # prep for development (install deps, launchers, etc.) $ ./setup.py pytest # run unit tests $ ./setup.py bdist_egg # build distributable
测试
只需运行 python3 setup.py pytest。
注意,目前无法独立测试此模块。以前的版本需要 httpretty 的修改版本。
TODO:使用本地服务器代替。
许可协议
版权(c)2013,Digium,Inc. 版权(c)2018,Matthias Urlichs
trio_swagger11 使用 BSD 3-Clause License 许可。
当前作者谦逊地请求您分享任何进一步的错误修复或对此代码的改进。
项目详情
trio_swagger11-0.11.1.tar.gz 的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 663b5792e408d38cf754bc6e277c9699afce9e62e88e77491a8bf92387e9cb9b |
|
MD5 | 54b28d7db47f54974ced4c65dd6ddd37 |
|
BLAKE2b-256 | ff563ea68d157e852d01dd8e74bab651e7bafb1313f0fc6be52d5bfe72b26a25 |