跳转到主要内容

用于访问启用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 发生冲突。

有几个有意义的差异。

  • 资源列表

  • 添加了 filebase_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 (28.2 kB 查看哈希)

上传时间 源代码

由以下支持

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