用于访问启用Swagger 1.1的API的异步库
项目描述
关于
aioswagger11是swagger.py的异步兼容克隆,能够理解Swagger 1.1定义(仅限)。
由于swagger已被重命名为OpenAPI,现在已有3.0版本(并且有一个实际的规范 – 与Swagger 1.1不同),因此这个库(主要)仅可用于Asterisk,它仍然使用Swagger 1.1声明。
Aioswagger11支持WebSocket扩展,允许对WebSocket进行文档化,并自动生成WebSocket客户端代码。
从swagger.py
Swagger.py是一个Python库,用于使用Swagger定义的API。
Swagger本身最好在Swagger主页上描述
Swagger是一个用于描述、生成、消费和可视化RESTful Web服务的规范和完整的框架实现。
Swagger规范 定义了如何使用Swagger描述API。
使用方法
从PyPI安装最新版本。
$ sudo pip install aioswagger11
或者使用setup.py脚本从源代码安装。
$ sudo ./setup.py install
API
aioswagger11将从启用Swagger的RESTful API动态构建对象模型。
以下是一个简单的示例,使用Asterisk REST接口
#!/usr/bin/env python3
import json
import asyncio
import aiohttp
from aioswagger11.client import SwaggerClient
from aioswagger11.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 asyncio.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_str in ws:
if msg.type in {aiohttp.WSMsgType.CLOSED, aiohttp.WSMsgType.CLOSING}:
break
elif msg.type != aiohttp.WSMsgType.TEXT:
continue # ignore
msg_json = json.loads(msg_str)
if msg_json['type'] == 'StasisStart':
asyncio.ensure_future(run(ari,msg_json))
if __name__ == "__main__":
loop = asyncio.get_event_loop()
loop.run_until_complete(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。
请注意,测试此模块需要与 aiohttp 兼容的 httpretty 版本。
许可协议
版权(c)2013,Digium,Inc. 版权(c)2018,Matthias Urlichs
aioswagger11 使用 BSD 3-Clause License 许可。
当前作者谦逊地请求您分享此代码的任何进一步的错误修复或增强。
项目详情
aioswagger11-0.9.1.tar.gz 的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 6d7ac31699d5e5db0287e143226545d02a689ab4ce10af506a0872f2a8489a03 |
|
MD5 | 71009c2ab49c6b92a19872f754d367ad |
|
BLAKE2b-256 | ed426badef3819b597622f95a3c35d1bd6d1ab9d7218c60bcc538cf7eeb9025e |