本项目是扫描仙人和其私有化输出的基础框架之一。
这个项目可以快速将你的python代码,包装成生产环境可用的服务,主要包含以下功能
- 以统一的方式实现API接口,统一请求和响应的格式
- 提供监控,日志,多环境配置等实用功能
- 实现私有交付中的加密,许可证等需求
- 协助构建docker镜像
本项目最初是同事和我在阿里云工作时开发的algorithm-base框架 。由于当时需要满足商业项目需求,框架内耦合了冗余逻辑。我从阿里云离职后,fork了该项目,保留了最常用的功能,并进行了一定优化。
我们用一个极简的例子,为你的API构建镜像并发布服务。
- 当前框架只支持X86架构的MacOS和Linux
- 目前仅在python3.8版本测试过
- 详见 安装
pip install python-fast-service
进入examples/simple目录。这即是日后创建项目用的模板,也是hello-world程序。
对于simple项目, 你需要在api目录下实现你的API(相当于服务的控制器层)。
例子中提供了一个demo.py,其中实现了若干API。如下代码,这段被@api装饰器修饰的方法,将会被自动暴露为路径是/api/add
的RESTFUL API。详见 服务与API
from ab.core import api
@api()
def add(a: int, b: int) -> int:
"""
一个简单的加法算法示例
:param a: 第一个参数
:param b: 第二个参数
:return:
"""
return a + b
在simple根目录下,确保8000端口没有被占用,键入如下命令启动服务
pfs
服务成功启动后,看到类似如下输出,代表启动成功
[2023-02-01 13:07:33 +0800] [12257] [INFO] Starting gunicorn 20.0.4
[2023-02-01 13:07:33 +0800] [12257] [DEBUG] Arbiter booted
[2023-02-01 13:07:33 +0800] [12257] [INFO] Listening at: http://0.0.0.0:8000 (12257)
[2023-02-01 13:07:33 +0800] [12257] [INFO] Using worker: sync
[2023-02-01 13:07:33 +0800] [12267] [INFO] Booting worker with pid: 12267
[2023-02-01 13:07:33] [12267] [DEBUG] algorithms: {('add', 'python'): add(a: int, b: int) -> int,
[2023-02-01 13:07:33] [12267] [DEBUG] fixtures: {}
[2023-02-01 13:07:33 +0800] [12257] [DEBUG] 2 workers
[2023-02-01 13:07:33] [12268] [DEBUG] algorithms: {('add', 'python'): add(a: int, b: int) -> int,
[2023-02-01 13:07:33] [12268] [DEBUG] fixtures: {}
你可以通过如下命令访问前面定义的接口
curl --location --request POST 'localhost:8000/api/add' \
--header 'Content-Type: application/json' \
--data-raw '{
"args": {"a": 1, "b": 2}
}'
如下输出,返回了加法算法的结果
{"code":0,"data":3}
Fast Service框架默认将API统一暴露在/api路径下,你当然也可以增加新的路径。你需要在项目根目录的api文件夹下,创建一个python
module,如endpoint.py,
这样,就可以同构/api/document/add来访问该API了
from ab.endpoint.registry import register_endpoint
register_endpoint('/api/document/<string:api_name>')
你可以返回flask的Response对象,用来替换Fast Service的默认响应体结构。详见 定制响应结构
from flask import Response
return Response(f"Hello, {a - b}", status=200, mimetype='text/plain')
在simple项目根目录下键入如下命令
sh build.sh
至此,你已经对Fast Service框架有了初步印象, 详细文档见用户指南。
- 安装
- 服务能力
- 性能相关
- 运维能力
- 最佳实践
- 0.2.0
- feature:
redissupport - feature: async request support
- feature: