上云无忧 > 文档中心 > 使用百度智能云函数计算 CFC HTTP 触发器托管 API
函数计算CFC
使用百度智能云函数计算 CFC HTTP 触发器托管 API

文档简介:
在我们进行Web API的相关开发过程中,偶尔需要对系统进行 API 的增加或者迁移,在系统逻辑较为复杂的情况下,进行 API 的扩充或者迁移往往工作量较大。此时,使用 CFC 以及百度云 TableStorage 则可以简单地实现 API 的托管,从而减少系统的负载,同时增加接口的可移植性。
*此产品及展示信息均由百度智能云官方提供。免费试用 咨询热线:400-826-7010,为您提供专业的售前咨询,让您快速了解云产品,助您轻松上云! 微信咨询
  免费试用、价格特惠



概述

在我们进行Web API的相关开发过程中,偶尔需要对系统进行 API 的增加或者迁移,在系统逻辑较为复杂的情况下,进行 API 的扩充或者迁移往往工作量较大。此时,使用 CFC 以及百度云 TableStorage 则可以简单地实现 API 的托管,从而减少系统的负载,同时增加接口的可移植性。

适用场景

  • Web API托管
  • 插件式 API

方案优势

  • 托管 API 至CFC,可节约资源
  • 增加 API的可移植性
  • 减少 API 之间的耦合度

方案流程

一、创建 Table

1.1 开通百度云 TableStorage 服务

若您还未开通百度云 TableStorage 服务,则可以通过【百度云控制台】>【数据库】>【TableStorage】开通相关服务。

1.2 创建实例

开通 TableStorage 服务后,您可以由控制台进入 TableStorage 中,并且创建对应的实例。如图所示。更多实例相关操作详情可参考TableStorage实例操作

1.3 创建表

创建 TableStorage 实例后,您可以进入对应实例创建对应表。详细如下图所示。详细的创建操作可参考TableStorage表操作

至此,TableStorage 已经准备就绪。

二、创建 CFC 函数

2.1 开通百度云 CFC 服务

若您还未开通百度云 TableStorage 服务,则可以通过【百度云控制台】>【计算】>【函数计算】开通相关服务。

2.2 创建函数

由于暂时 TableStorage 服务仅支持广州、保定地区。故需要您手动选择 CFC 广州地区,并以CFC_TableStorag_API为蓝图创建函数。如下所示:

2.3 部署相关代码

根据蓝图中代码相关提示信息补全对应实例名称、表名称以及相关字段名称等。并根据 API 需要修改其返回格式。

三、创建 HTTP 触发器进行 API 托管

3.1 创建 HTTP 触发器

在对应函数中创建 HTTP 触发器,并根据自己需要填写路径以及 HTTP 方法。具体创建流程可参考HTTP触发器开发参考

3.2 配置函数路径

根据蓝图代码注释配置相关的函数route信息。

四、简单实践

4.1 场景

若需要托管一个成绩查询 API 于 CFC 函数,其中学生成绩表格如下所示:

姓名 语文 数学 英语 物理 化学 生物
小明 123 123 123 123 123 123

则对应的 TableStorage 表格如下所示:

4.2 API 设计

API 设计如下

# 获取对应学生成绩单
GET /students?instance={instance_name}&table={table_name}&name={name}
# 上传/修改学生成绩单
POST/PUT /students
{
    "instance":"instance_name",
    "table": "table_name",
    "cells": {
        "chinese":"100",
        "math":"100",
        "english":"100",
        "physics":"100",
        "chemistry":"100",
        "biology":"100"
    }
    
# 删除学生信息
DELETE /students?instance={instance_name}&table={table_name}&name={name}

则对应方法如下所示:


@app.route('/students',method='GET') def get_row(): """
    @param: request: bottle request
    @return: http return

    本方法用于从 TableStorage 中获取数据
    """ instance = bytes(request.query.name, encoding='utf8') table = bytes(request.query.name, encoding='utf8')
 name = bytes(request.query.name, encoding='utf8') bts = init_bts_client() query_row_arg = QueryRowArgs()
 query_row_arg.rowkey = name try: res = bts.get_row(instance, table, query_row_arg) if res is None:
 return HTTPResponse(body={'error': 'resource not found'}, status=404) else: return HTTPResponse(body={'body':str(res.result[0])}
,status_code=200) except Exception as exception: return HTTPResponse(body={'error':exception}, status=400) @app.route('/students'
, method=['POST', 'PUT']) def put_row(): """
    @param: bottle request
    @return: http response

    本方法用于将输入数据存储于 TableStorage 中
    """ bts = init_bts_client() body = request.json
    instance = bytes(body['instance'],encoding='utf8') table = bytes(body['table'],encoding='utf8') 
name = bytes(body['name'],encoding='utf8') c = body['cells'] cells = [] for key, value in c.items()
: cells.append(Cell(key, value).__dict__) row = Row() row.rowkey = name
    row.cells = cells try: res = bts.put_row(instance, table, row) return HTTPResponse(status_code=200) 
except Exception as exception: return HTTPResponse(status_code=400, body={'error': exception}) 
@app.route('/students', method='DELETE') def delete_row(): """
    @param: bottle request
    @return: http response

    本方法用于从百度云TableStroage中删除对应数据
    """ bts = init_bts_client() instance = bytes(request.query.instance, encoding="utf8") table = bytes(request.query.table,
 encoding="utf8") name = bytes(request.query.name, encoding="utf8") query_row_args = QueryRowArgs()
 query_row_args.rowkey = name try: bts.delete_row(instance, table, query_row_args) return HTTPResponse(status_code=204)
 except Exception as e: return HTTPResponse(status_code=400, body={'error': e})


同时,在函数界面创建 HTTP 触发器,路径为/students,方法为 GET、POST、PUT、DELETE

4.3 实践

创建完毕触发器,部署完毕方法后,可以简单测试对应 API。

原始数据如下所示:

  • 上传成绩: 使用cURL请求上传成绩,如下所示:


curl --location --request POST 'https://dn99xpwe8yjgx.cfc-execute.gz.baidubce.com/students' \
 --header 'Content-Type: application/json' \ --data-raw '{
    "instance": "test_cfc",
    "table": "test_cfc",
    "name": "xiaoming",
    "cells": {
        "chemistry": "100",
        "chinese": "100",
        "math": "100",
        "english": "100",
        "physics": "100",
        "biology": "100"
    }
}'


执行完毕后, TableStorage 表格数据如下所示,如图所示,数据已经被写入表格中。

  • 查询成绩: 使用cURL查询成绩,如下所示:


curl --location --request GET 'https://dn99xpwe8yjgx.cfc-execute.gz.baidubce.com
/students?instance=test_cfc&table=test_cfc&name=xiaoming' \ --header 'Content-Type: application/json'


resonse如下所示:


{"body": "{rowkey:u'xiaoming',cells:[{column:u'biology',value:u'100',timestamp:1584633381567},
 {column:u'chemistry',value:u'100',timestamp:1584633381567}, {column:u'chinese',value:u'100',
timestamp:1584633381567}, {column:u'english',value:u'100',timestamp:1584633381567}, {column:u'math',value:u'100',timestamp:
1584633381567}, {column:u'physics',value:u'100',timestamp:1584633381567}]}"}


  • 删除成绩: 使用cURL删除某一学生成绩,如下所示:


curl --location --request DELETE 'https://dn99xpwe8yjgx.cfc-execute.gz.baidubce.com/
students?instance=test_cfc&table=test_cfc&name=xiaoming' \ --header 'Content-Type: application/json'


执行完毕后,相关数据在 TableStorage 中已经被删除。如图所示:

总结

使用 CFC HTTP 触发器以及 TableStorage 数据库,可以轻松地将 API 托管至云端实现插件化的 API,一方面可以节省计算机资源,另一方面则可以为系统升级、迁移等操作提供便利。



相似文档
  • 百度云CFC Flask框架模版旨在实现flask-web serverless化,用户可通过该模版的示例代码,使用url去访问函数。 使用场景: Flask-web应用,如Flask url构建。 环境准备: 安装Python3及以上运行环境。
  • 本文将介绍如何将Spring Boot应该迁移部署到函数计算。 环境准备: 安装OpenJDK 1.8.0及以上运行环境 迁移应用: 如果您还没有开通CFC服务,请参考函数计算开通;如果您已开通,则可以跳过该步骤。 创建一个spring boot项目。 引入百度云函数计算SDK。
  • 协议生效时间:2021年05月18日。 本服务等级协议(Service Level Agreement,以下简称 "SLA")规定了百度智能云向客户提供的函数计算服务CFC(简称"CFC")的服务可用性等级指标及赔偿方案。
  • 百度智能云容器镜像服务(Cloud Container Registry,简称CCR)是面向容器镜像、Helm Chart等符合OCI规范的云原生制品安全托管以及高效分发平台。CCR支持在多个地域创建独享托管服务,具备多种安全保障;支持同步容器镜像等云原生制品,与容器引擎CCE等服务无缝集成,助力企业提升云原生容器应用交付效率。
  • 百度智能云容器镜像服务CCR企业版目前正在火热公测中,若您对企业版产品感兴趣或者有相关需求,您可以申请公测使用。 公测期间,每个账户每个地域下默认只能创建一个实例,若您需要提升配额,请提交工单联系我们。
官方微信
联系客服
400-826-7010
7x24小时客服热线
分享
  • QQ好友
  • QQ空间
  • 微信
  • 微博
返回顶部