当前位置:网站首页>从 flask 服务端代码自动生成客户端代码 -- flask-native-stubs 库介绍
从 flask 服务端代码自动生成客户端代码 -- flask-native-stubs 库介绍
2022-07-03 15:19:00 【Likianta Me】
flask-native-stubs 项目灵感来源 swagger 的 codegen 工具. 用来从服务端的路由函数自动生成对应的客户端接口函数.
你将会体验到如同 “本地函数调用” 般的快捷和自然. 如同下面这样:
服务端代码:
from flask_native_stubs import app, auto_route @auto_route() def hello_world(a: int, b: bool, c: str) -> str: print('received from client side:', a, b, c) return 'hello from server side!' app.run(host='127.0.0.1', port=8080)客户端代码:
# client side from flask_native_stubs import setup_client # 注: 将 flask_native_stubs 自动生成的代码 (假如叫 "server_stubs.py") 放在能 # 够导入的地方. from my_lib.server_stubs import hello_world # 配置 host 和 port 端口. setup_client(host='127.0.0.1', port=8080) # 如同调用一个本地函数一样. 无论是传参写法, 还是 ide 类型提示, 代码补全等功 # 能, 都完全按照普通函数调用的习惯去实现即可! response = hello_world(a=123, b=True, c='hello from client!') print(response) # -> 'hello from server side!'使用 flask_native_stubs 自动生成的代码 (上面代码块中引用的 “server_stubs.py”) 看起来长什么样:
from flask_native_stubs.stubgen import magic_route # 这是一个没有任何功能的 "假函数" def hello_world(a: int, b: bool, c: str) -> str: ... # 这里就是三个点. # 最后用 magic_route 魔术方法将本模块的 hello_world 函数嫁接到 request # 装饰器. [magic_route(x) for x in ('hello_world',)]
运行截图:


什么是存根文件 (stubs)
“stub” 引用自 java j2ee 的 stub 概念:
为屏蔽客户调用远程主机上的对象, 必须提供某种方式来模拟本地对象, 这种本地对象称为存根 (stub). 存根负责接收本地方法调用, 并将它们委派给各自的具体实现对象.
在 python 中, 也有 stub 的概念, 主要用于类型检查的增强体验. (随着 python 类型注解的愈趋完善, 也有人认为 stub 在这方面的作用被削弱了.)
我们借助服务器端原函数的壳, 生成的外形相似但不具备任何真实业务逻辑的 “伪函数”, 将其称为 stubs, 在概念和使用目的上来说与上述是一致的.
如何生成存根文件 (stubs)
生成 flask-native-stubs 的存根文件方法非常简单. 只需将 app.run 改为 app.generate_stubs 即可:
# server side
from flask_native_stubs import app, auto_route
@auto_route()
def hello_world(a: int, b: bool, c: str) -> str:
print('received from client side:', a, b, c)
return 'hello from server side!'
# app.generate_stubs(output_dir: str, filenames_map: dict = None)
# args:
# output_dir: 将生成的存根文件放在哪个目录下.
# filenames_map: (可选) 自定义输入和输出文件名. 键是输入的文件路径, 值是输
# 出的文件路径.
# 路径可以使用相对或绝对路径.
# 使用相对路径时, 输入端是相对于当前工作目录; 输出端是相对于 # output_dir 参数.
app.generate_stubs(
output_dir='../lib',
filenames_map={
'server.py': 'server_stubs.py'
}
)
将生成后的存根文件复制到客户端项目中, 放到客户端能够导入的地方. (比如加入到 sys.path, 或者加入到 PYTHONPATH 环境变量中.)
边栏推荐
- 【日常训练】395. 至少有 K 个重复字符的最长子串
- [probably the most complete in Chinese] pushgateway entry notes
- socket. IO build distributed web push server
- Influxdb2 sources add data sources
- Baidu AI Cloud helps Shizuishan upgrade the smart health care model of "Internet + elderly care services"
- Global and Chinese market of transfer case 2022-2028: Research Report on technology, participants, trends, market size and share
- Global and Chinese markets for indoor HDTV antennas 2022-2028: Research Report on technology, participants, trends, market size and share
- Idea does not specify an output path for the module
- Didi off the shelf! Data security is national security
- Global and Chinese market of optical fiber connectors 2022-2028: Research Report on technology, participants, trends, market size and share
猜你喜欢

Characteristics of MySQL InnoDB storage engine -- Analysis of row lock

高并发下之redis锁优化实战

Jvm-03-runtime data area PC, stack, local method stack
![[cloud native training camp] module VIII kubernetes life cycle management and service discovery](/img/87/92638402820b32a15383f19f6f8b91.png)
[cloud native training camp] module VIII kubernetes life cycle management and service discovery

Jvm-06-execution engine

Jvm-09 byte code introduction

Visual upper system design and development (Halcon WinForm) -1 Process node design

Incluxdb2 buckets create database

【Transform】【NLP】首次提出Transformer,Google Brain团队2017年论文《Attention is all you need》

Tensorflow realizes verification code recognition (I)
随机推荐
视觉上位系统设计开发(halcon-winform)-1.流程节点设计
Redis主从、哨兵、集群模式介绍
视觉上位系统设计开发(halcon-winform)-6.节点与宫格
Kubernetes advanced training camp pod Foundation
Jvm-06-execution engine
Kubernetes带你从头到尾捋一遍
Solve the problem that pushgateway data will be overwritten by multiple push
Kubernetes - YAML文件解读
Using notepad++ to build an arbitrary language development environment
如何使用 @NotNull等注解校验 并全局异常处理
Tensorflow realizes verification code recognition (I)
What is embedding (encoding an object into a low dimensional dense vector), NN in pytorch Principle and application of embedding
Global and Chinese markets of AC electromechanical relays 2022-2028: Research Report on technology, participants, trends, market size and share
Global and Chinese markets for indoor HDTV antennas 2022-2028: Research Report on technology, participants, trends, market size and share
Jvm-04-runtime data area heap, method area
Halcon与Winform学习第二节
Global and Chinese market of trimethylamine 2022-2028: Research Report on technology, participants, trends, market size and share
mysql innodb 存储引擎的特性—行锁剖析
Analysis of development mode process based on SVN branch
视觉上位系统设计开发(halcon-winform)-2.全局变量设计