异步API

asyncapi的Python项目详细描述


Python异步API

asyncapi-python

用于将asyncapi规范转换为Python代码的Python库,无需生成代码。 在


AsyncAPI模式https://asyncapi.io


文档https://dutradda.github.io/asyncapi-python/

源代码https://github.com/dutradda/asyncapi-python


主要特点

  • 读取asyncapi规范并从中创建发布者和订阅服务器

  • 支持数据类的规范声明

  • 为创建订阅服务器提供应用程序

  • 支持kafka、redis和postgres协议(与广播程序库相同)

  • 额外支持google cloud pubsub服务

  • 在http中公开自动生成的规范

要求

  • Python 3.8+

  • 广播员

  • 松道拉

  • 请求(http规范可选)

  • typer(订户应用可选)

  • pyyaml(yaml规范可选)

  • apidaora(暴露规范可选)

  • 包额外安装:

    • http协议
    • 山药
    • 卡夫卡
    • 雷迪斯
    • 博士后
    • 认购人
    • 文件
    • 谷歌云pubsub

安装

$ pip install asyncapi[http,yaml,redis,subscriber,docs]

YAML规范示例

^{pr2}$

创建订户模块

# user_events.pyfromtypingimportAnyasyncdefreceive_user_update(message:Any)->None:print(f"Received update for user id={message.id}")

启动订阅服务器以侦听事件

PYTHONPATH=. asyncapi-subscriber \
    --url api-spec.yaml \
    --api-module user_events
Waiting messages...

发布更新

# publish.pyimportasynciofromasyncapiimportbuild_apiapi=build_api('api-spec.yaml')channel_id='user/update'message=api.payload(channel_id,id='fake-user',name='Fake User',age=33)asyncdefpublish()->None:awaitapi.connect()awaitapi.publish(channel_id,message)awaitapi.disconnect()asyncio.run(publish())print(f"Published update for user={message.id}")
python publish.py


Published update for user=fake-user

接收更新

Waiting messages...
Received update for user id=fake-user

暴露

asyncapi-docs --path api-spec.yaml
curl -i localhost:5000/asyncapi.yaml

Python规范示例

# specification.pyimportdataclassesfromtypingimportOptionalimportasyncapi@dataclasses.dataclassclassUserUpdatePayload:id:strname:Optional[str]=Noneage:Optional[int]=Nonedev_server=asyncapi.Server(url='localhost',protocol=asyncapi.ProtocolType.REDIS,description='Development Broker Server',)message=asyncapi.Message(name='userUpdate',title='User Update',summary='Inform about users updates',payload=UserUpdatePayload,)user_update_channel=asyncapi.Channel(description='Topic for user updates',subscribe=asyncapi.Operation(operation_id='receive_user_update',message=message,),publish=asyncapi.Operation(message=message),)spec=asyncapi.Specification(info=asyncapi.Info(title='User API',version='1.0.0',description='API to manage users',),servers={'development':dev_server},channels={'user/update':user_update_channel},components=asyncapi.Components(messages={'UserUpdate':message}),)

创建订户模块

# py_spec_user_events.pyimportspecificationspec=specification.specasyncdefreceive_user_update(message:specification.UserUpdatePayload,)->None:print(f"Received update for user id={message.id}")

启动订阅服务器以侦听事件

PYTHONPATH=. asyncapi-subscriber --api-module user_events
Waiting messages...

发布更新

# publish.pyimportasynciofromasyncapiimportbuild_api_auto_specapi=build_api_auto_spec('specification')channel_id='user/update'message=api.payload(channel_id,id='fake-user',name='Fake User',age=33)asyncdefpublish()->None:awaitapi.connect()awaitapi.publish(channel_id,message)awaitapi.disconnect()asyncio.run(publish())print(f"Published update for user={message.id}")
python publish.py


Published update for user=fake-user

接收更新

Waiting messages...
Received update for user id=fake-user

暴露规范

PYTHONPATH=. asyncapi-docs --api-module specification
curl -i localhost:5000/asyncapi.yaml

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
使用jaxb2annotateplugin和XJC工具的java自定义注释   java组织。xeustechnologies。jcl无法加载WstxInputFactory类   java JUnit在格式化字符串上比较失败   java Bukkit配置部分getKeys   如何关闭Java流?   java Struts2正则表达式配置   链式事务注释的java奇怪行为   java在两个JButton之间使用变量   java签署APK时内容会发生什么变化?   java LWJGL:Slick:3D世界中的绘图字体   如何分解Java数组?   在Java MySql中处理多个过滤器   java如何在Firebase数据库中跳过初始OnChildaded事件触发   java如何在PreviewView中使用CameraX?   在子类#中重写父类后访问父类原始方法的java已解决   java找不到类型的属性   游戏框架游戏!框架+Java