访问启用Swagger-1.1的API的异步库
项目描述
关于
asyncswagger11是swagger.py的anyio兼容克隆,能够理解Swagger 1.1定义(仅限于此)。
由于swagger已更名为OpenAPI,现在已发布3.0版本(并且有一个实际的规范——与Swagger 1.1不同),因此该库(主要)仅适用于Asterisk,Asterisk仍然使用Swagger 1.1声明。
asyncswagger11支持WebSocket扩展,允许记录WebSocket,并自动生成WebSocket客户端代码。
来自swagger.py
Swagger.py是一个用于使用Swagger定义的API的Python库。
Swagger本身最好在Swagger主页上描述
Swagger是一个用于描述、生成、消费和可视化RESTful Web服务的规范和完整框架实现。
Swagger规范定义了如何使用Swagger描述API。
用法
从PyPI安装最新版本。
$ sudo pip install asyncswagger11
或使用setup.py脚本来从源安装。
$ sudo ./setup.py install
API
asyncswagger11将从启用Swagger的RESTful API动态构建一个对象模型。
以下是一个使用Asterisk REST接口的简单示例
#!/usr/bin/env python3
import json
import anyio
from asyncswagger11.client import SwaggerClient
from asyncswagger11.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 anyio.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__":
anyio.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 版本。
待办事项:使用本地服务器代替。
许可协议
版权所有(c)2013,Digium,Inc. 版权所有(c)2018,Matthias Urlichs
asyncswagger11 采用 BSD 3-Clause License 许可。
当前作者谦逊地请求您分享任何对此代码的进一步错误修复或改进。
项目详情
下载文件
下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。
源分发
构建分发
asyncswagger11-0.12.4.tar.gz 的散列
算法 | 散列摘要 | |
---|---|---|
SHA256 | 1d0d18086351a01e82df74315828101338e018f1087fcb12bb63b2152afeb6e3 |
|
MD5 | c88390f58f7557cb87151f025a2aa02e |
|
BLAKE2b-256 | 9b45bb36cb4bed0923996e4999257ce9afab8ebab4e09535d9311bf1c184da09 |
asyncswagger11-0.12.4-py3-none-any.whl 的散列
算法 | 散列摘要 | |
---|---|---|
SHA256 | 83ba9ae4e236f185bb73d705be987dc9861eca170eaba7f19f0dadf3f9163899 |
|
MD5 | d5798ec4f474e27f5b91b1e8f5242402 |
|
BLAKE2b-256 | efeb25fca88bc9ee109cc16c6584b67d60548aa5a0ae3e77cc4e6663d47ee8a8 |