干货 | 用Serverless快速在APP中构建调研问卷
Serverless 计算将会成为云时代默认的计算范式,并取代 Serverful (传统云)计算模式,因此也就意味着服务器 — 客户端模式的终结。
——《简化云端编程:伯克利视角下的 Serverless计算》
前言
Serverless计算让开发者能够以更高的灵活性和更低的成本构建现代应用程序。开发者无需配置和管理服务器等基础设施,可将全部精力投入核心业务。
Serverless相比传统的serverful开发方式有着本质的区别:
-
计算和存储的解耦;它们独立扩展,独立定价;
-
代码的执行不再需要手动分配资源;
-
按使用量计费。
Serverless快速构建构建APP问卷调查
函数服务作为Serverless架构中的核心计算组件,可应用于各类Serverless架构,主要包括两大类:Web、移动、IoT、AI等无服务器后端和数据处理系统后端。
其中,Web、移动serverless后端的典型场景应用最为广泛,本文介绍如何使用函数服务+API网关分分钟在京东云APP中构建用户问卷调查。
构建APP问卷调查可由两个简单函数完成: 获取问卷内容和提交答案。
Step1:创建存储
创建一个用于存储问卷题库及用户答案的数据库或对象存储bucket,本示例创建一个云缓存Redis实例(主从4GB)。
Step2:创建函数
在函数服务中创建并测试两个函数(运行时:Python2.7)
创建函数1
创建函数 jcloud-app-survey-topic
:请求用户PIN,问卷版本version,从数据库获取问卷内容,将入口文件 index.py
与依赖库redis SDK打包上传至函数服务。
index.py
代码如下:
#coding=utf-8
import json
import
redis
”’
下载问卷
”’
def handler ( event , context ):
if not bool( event ):
result = {
‘statusCode’ : 200 ,
‘headers’ : {},
‘body’ : “” ,
}
return result
body = event [ ‘detail’ ][ ‘body’ ]
body = json.loads( body )
pin = body.get( ‘pin’ , “” )
version = body.get( ‘version’ , “” )
print(pin)
print( version )
r = redis.Redis(host= ‘redis-v214pzrgiicq-proxy-nlb.jvessel-open-hb.jdcloud.com’ , port= 6379 , db= 0 )
topic = r.hget( ‘topic_’ + version , version )
data = { ‘pin’ : pin, ‘version’ : version , ‘topic’ : topic}
data = json.dumps( data )
result = {
‘statusCode’ : 200 ,
‘headers’ : {},
‘body’ : data ,
}
return
result
函数测试
创建函数2
创建函数2 jcloud-app-survey-submit
:请求用户PIN,问卷版本version,用户答案submit,上传至数据库,将入口文件 index.py
与依赖库redis SDK打包上传至函数服务。
index.py
代码如下。
#coding=utf-8
import json
import
redis
”’
上传问卷结果
”’
def handler ( event , context ):
if not bool( event ):
result = {
‘statusCode’ : 200 ,
‘headers’ : {},
‘body’ : “” ,
}
return result
body = event [ ‘detail’ ][ ‘body’ ]
body = json.loads( body )
pin = body.get( ‘pin’ , “” )
version = body.get( ‘version’ , “” )
submit = body.get( ‘submit’ , “” )
print(pin)
print( version )
print(submit)
r = redis.Redis(host= ‘*********.jdcloud.com’ , port= 6379 , db= 0 )
old = r.hget( ‘submit_’ + version , pin)
if old != None :
data = { ‘code’ : 1 , ‘desc’ : ‘user have submitted’ }
data = json.dumps( data )
result = {
‘statusCode’ : 200 ,
‘headers’ : {},
‘body’ : data ,
}
return result
r.hset( ‘submit_’ + version , pin, submit)
data = { ‘code’ : 0 , ‘desc’ : ‘success’ }
data = json.dumps( data )
result = {
‘statusCode’ : 200 ,
‘headers’ : {},
‘body’ : data ,
}
return
result
函数测试
Step 3:创建发布API
在API网关创建两个API,作为触发器绑定至对应函数,通过function响应API请求,并将API发布至测试环境。
jcloud-app-survey-topic函数绑定API触发器如下:
jcloud-app-survey-submit函数绑定API触发器如下:
Step 4:验证上线
通过本地API接口测试工具验证API接口无误,即可与前端H5页面开发联调,测试完成后,可通过函数版本、别名功能管理线上函数迭代发布。
问卷提交页
以上,快速完成APP后端上线,只等活动上线
最终效果
最后,APP调查问卷效果如下: