背景
随着serverless的兴起,阿里云也推出了函数计算。目前函数计算用得最多的就是HTTP触发器。但是默认的HTTP触发器比较原始。所有的东西都需要自己解析。如果能像spring一样,通过
@GetMapping("/{id}")
public void test(@PathVariable("id") Long id){
}
这样的方式来写代码当然最爽了。
虽然python有自己的web框架,但是在函数计算里又没必要引入一个复杂的web框架。所以我自己写了一个简易的web框架,让函数计算可以像spring一样通过注解(python里面叫装饰器)写HTTP触发器。源码在文章最后。
使用
1. 新建服务和函数
- 进入函数计算控制台 - 服务列表 - 新建服务(服务名【demo】)
- 进入服务【demo】 - 点击新建函数(函数名【test-web】),除了我下面红框标识的,其余全部采用默认值就行。
2. 编写测试代码
新建完函数后会自动打开代码编辑器
2.1 在左侧空白处点右键,把alifcweb框架的源码上传上去
PS:你也可以通过本地工具fun上传,更方便,结构更合理
上传完成后目录结构如下:
2.2 修改index.py里的代码
修改完成记得点保存
import json
import logging
from AliFCWeb import fcIndex, get, post, put, delete, ResponseEntity
log = logging.getLogger()
@fcIndex()
def handler(environ, start_response):
pass
@get()
def ggg(data, environ, start_response):
print('收到get请求, 请求内容:')
print(json.dumps(data))
return ResponseEntity.ok('get')
@post()
def ppp(data, environ, start_response):
print('收到post请求, 请求内容:')
print(json.dumps(data))
return ResponseEntity.ok('post')
@put()
def ppput(data, environ, start_response):
print('收到put请求, 请求内容:')
print(json.dumps(data))
return ResponseEntity.ok('put')
@delete()
def ddd(data, environ, start_response):
print('收到delete请求, 请求内容:')
print(json.dumps(data))
return ResponseEntity.ok('delete')
2.3 执行测试代码
点击控制台下方的执行,随便填几个参数。可以看到系统打印的日志和控制台返回的结果。其余方法同理。
2.4 测试路径模板
在get方法上添加以下路径模板
保存并执行,可以看到控制台已经成功解析了id
源码
整个框架源码我已经放到了git上,可以通过下面的命令上传
git clone https://github.com/xingluoxingkong/ali-fc-web.git
另外我也上传了一份到PyPI上,也可以通过下面的命令下载到本地
pip install AliFCWeb