zoukankan      html  css  js  c++  java
  • 干货 | 用Serverless快速在APP中构建调研问卷

    Alt

    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
    
    
        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
    

    函数测试

    Alt

    创建函数2

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

    函数测试

    Alt

    Step 3:创建发布API

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

    Alt

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

    Alt

    Step 4:验证上线

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

    问卷提交页

    Alt

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

    Alt

    最终效果

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

    Alt
    点击“京东云”了解更多关于队列服务

    Alt

    Alt

  • 相关阅读:
    Codeforces Round #652 (Div. 2) A. FashionabLee(几何)
    轻量应用服务器如何通过修改apache配置文件实现非https的访问多域名到不同子目录程序?
    在Windows环境下使用hexo搭建博客以及部署到gitee / github
    使用WordPress搭建个人手机博客(阿里云)
    访问自己服务器的ip地址
    php环境无法上传文件的解决方法
    SSRF漏洞
    CSRF全家桶(含义,防御,攻击)
    JS实现HTML实体与字符的相互转换
    CentOS系统下载及应用部署
  • 原文地址:https://www.cnblogs.com/jdclouddeveloper/p/11764832.html
Copyright © 2011-2022 走看看