43

干货 | 用Serverless快速在APP中构建调研问卷

 4 years ago
source link: https://www.tuicool.com/articles/ZFJj2iJ
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

qMBjuqj.jpg!web

Serverless 计算将会成为云时代默认的计算范式,并取代 Serverful (传统云)计算模式,因此也就意味着服务器 -- 客户端模式的终结。

------《简化云端编程:伯克利视角下的 Serverless计算》

前言

Serverless计算让开发者能够以更高的灵活性和更低的成本构建现代应用程序。开发者无需配置和管理服务器等基础设施,可将全部精力投入核心业务。

Serverless相比传统的serverful开发方式有着本质的区别:

  1. 计算和存储的解耦;它们独立扩展,独立定价;

  2. 代码的执行不再需要手动分配资源;

  3. 按使用量计费。

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

bodyevent [ '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_'versionversion )

data = { 'pin' : pin,  'version'version'topic' : topic}

data = json.dumps( data )

result = {

'statusCode'200 ,

'headers' : {},

'body'data ,

}

return

result

函数测试

jaqARvq.jpg!web

创建函数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

bodyevent [ '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

函数测试

IZ7Jviy.png!web

Step 3:创建发布API

在API网关创建两个API,作为触发器绑定至对应函数,通过function响应API请求,并将API发布至测试环境。

jcloud-app-survey-topic函数绑定API触发器如下:

fYnQfm3.png!web

jcloud-app-survey-submit函数绑定API触发器如下:

2yiEzuQ.png!web

Step 4:验证上线

通过本地API接口测试工具验证API接口无误,即可与前端H5页面开发联调,测试完成后,可通过函数版本、别名功能管理线上函数迭代发布。

问卷提交页

FFFfiiV.jpg!web

以上,快速完成APP后端上线,只等活动上线

ymUJber.jpg!web

最终效果

最后,APP调查问卷效果如下:

z26jQb3.jpg!web

BvQjqam.png!web

E7b2qub.gif

V7ZBBbQ.gif


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK