以翘曲速度从zserio服务创建python模块的便利功能。

zswag的Python项目详细描述


Zswag公司

以翘曲速度从zserio服务创建python模块的便利功能。 将Zserio服务翻译/验证为OpenAPI/Swagger,并在Flask/Connexion WSGI应用程序中提供服务。在

安装

快跑

pip3 install zswag

或者,克隆此存储库,然后运行

^{pr2}$

运行远程计算器测试示例

PYTHONPATH=$PWD/test
python3 -m calc server &
python3 -m calc client

从zserio创建一个招摇过市的服务

ZserioSwaggerApp赋予你嫁给用户编写的应用程序控制器的能力 使用zserio生成的app server类(参数解析器/响应序列化器) 以及一个合适的OpenAPI规范

示例

importzswagimportzserioimportmy.app.controllerzserio.generate("myapp/service.zs","myapp")frommyapp.serviceimportService# The OpenApi argument `yaml_path=...` is optionalapp=zswag.ZserioSwaggerApp(my.app.controller,Service)

在这里,API端点被路由到my/app/controller.py, 可能如下所示:

# Written by youdefmyApi(request):return"response"# Injected by ZserioSwaggerApp# _service = Service()# _service.myApi = lambda request: _service._myApiMethod(request)# _service._myApiImpl = my.app.controller.myApi

注意:当前生成的服务器使 zserio RPC方法参数应为Base64编码 名为requestData的字符串,放在URL查询部分。 计划在将来的版本中使其更加灵活。在

使用客户机

如果您有一个名为my.package.Service的服务,那么zserio 将自动为下的服务生成客户端 my.package.Service.Client。这个客户端可以实例化唉。。。在

frommy.packageimportServiceimportzswag_clientclient=Service.Client(zswag_client.HttpClient(spec=f"http://localhost:5000/openapi.json"))

zswag.HttpClient提供zserio期望的服务客户端接口。 它从openapiyaml或JSON规范中读取服务的HTTP细节 必须位于给定路径或URL下。 有关HttpClient构造函数的更多选项,请查看它的doc string。在

招摇过市用户界面

如果已安装pip install connexion[swagger-ui],则可以查看 [/prefix]/ui下服务的API文档。在

OpenAPI YAML规范

YAML文件位置/自动生成

  • 如果指定一个不存在的文件的非空路径,OpenAPI规范将在该位置自动生成。在
  • 如果指定空的YAML路径,则YAML文件将放在 <service>.zs源文件。在
  • 如果指定现有文件,zswag将只验证 zserio服务中指定的所有方法也反映在 OpenAPI规范

OpenAPI规范选项

选项概述

ZserioSwaggerApp和{} 在 OpenAPI YAML文件:

  • HTTP方法
  • 参数格式
  • Server URL基路径

选项:HTTP方法

要更改HTTP方法,只需放置所需的方法 作为方法路径下的键,例如在下面的示例中:

paths:/methodName:{get|post|put|patch|delete}:...

选项:Base64 URL参数格式

要使用Base64 URL参数格式,请使用方法规范中下面的代码片段

parameters:-description:''in:queryname:requestDatarequired:truex-zserio-request-part:"*"# The parameter represents the whole zserio request objectschema:format:bytetype:string

选项:二进制体参数格式

要使用二进制体参数格式,请使用方法规范中下面的代码段并删除requestData参数。在

requestBody:content:application/x-zserio-object:schema:type:string

选项:服务器URL基路径

OpenAPI允许规范中的servers字段列出URL路径前缀 在它下可以到达指定的API。一个zswag_client.HttpClient 实例查看此列表并确定其使用的URL基路径 此列表中的第一个条目。示例条目可能如下所示:

servers:
- http://unused-host-information/path/to/my/api

然后,zswag_client.HttpClient将使用指定的主机调用方法 和端口,但前缀为/path/to/my/api字符串。在

文档提取

当OpenAPI/Swagger YAML自动生成时,ZserioSwaggerApp 尝试填充服务/方法/参数/结果描述 从zserio源中提取的doc字符串。在

对于结构和服务,文档应该是 在声明前面用/*! .... !*/标记括起来:

/*!### My Markdown Struct DocI choose to __highlight__ this word.!*/structMyStruct{...}

对于服务方法,解析单行文档字符串 在声明之前:

/** This method is documented. */ReturnTypemyMethod(ArgumentType);

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

推荐PyPI第三方库


热门话题
带有服务类安卓的java altbeacon   java在OpenXava免费版本中可以创建多个用户吗?   java如何决定定义变量“private”?   java为什么GetMethodID()对不存在的方法不返回NULL?   java Get JComboBox项字符串表示法   java如何在ifs之间设置限制?   java Android错误:IllegalStateException   JavaSpring4MVC语言环境已更改,但JSP对此没有响应   java Netbeans:如何构建。jar文件随附外部文件。jar库?   Spring Petclinic项目Maven编译时出现java错误   声明Java数组增量元素的快速方法   java无法使用相对xpath找到元素   javascript无法更改标题,也无法在操作栏上显示图标   java标签不是一个接一个地动态创建的   java如何使用ThymeLeaf将对象的属性绑定到隐藏字段?   java从EJB无状态会话bean调用CDI会话范围的生产者方法   java为什么num+=array[i]与for循环中的num=num+array[i]的工作方式不同   使用jsonsimple实现jQuery UI自动完成的java JSON格式   JavaFaceletsUI:重复标记中断JSF表单验证