开发者学堂课程【从 0 入门函数计算:典型案例 3:十分钟搭建弹性可扩展的 Web API】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/645/detail/10728
典型案例 3:十分钟搭建弹性可扩展的 Web API
内容简介
一、基本概念
二、Web API 的开发流程
三、演示 Web API 的开发流程
一、基本概念
在 10 分钟内搭建弹性可扩展的外部 API 主要分为3部分:
基于函数计算的 Web API 和普通 Web API 的区别和优势;
开发流程中介绍在函数计算的控制台进行 Web API 的开发;
根据实例演示函数计算外围 API 的开发过程。
常见了 Web API 的架构主要包括客户端,服务端,数据库。Web API 由服务器来提供,同时服务器还要完成负载均衡,登录鉴权,日志监控等相关操作。当客户端流量快速增加时,服务端只能通过水平扩展加机器的方式来增加自己的服务能力。
这种常规模式分析主要有两点局限性:
1.除了开发业务代码还有大量的服务器运维成本来保证服务的稳定性可用性,花费大量的时间进行工作,占用开发时间,降低项目的研发效率。
2.流量突然增加时,需要水平扩展加机器,弹性的响应能力比较差,扩容速度往往需要数 10 分钟,无法实现秒级的极速扩容,这样就会导致一段时间内的服务能力不足,同时,当流量变少难以做到及时缩容,造成机器成本的浪费。
在函数计算的 Web API 架构当中与常规的 Web API 架构相比,客户端和数据库未发生变化的。
主要的变化体现在服务器端。
它的主要体现有:之前需要开发团队维护的路由模块以及鉴权模块都将接入服务商提供的 API 网关系统以及健全系统,开发团队无需再维护这两部分的代码,只需要维护相关的规则即可。
在这样的一个结构下服务器端的业务代码被拆分为一个一个的函数,不同的函数就代表了不同的功能。
在函数计算的 Web API 架构当中,已经没有了服务器的存在,这是因为目的就是让使用者只关注自己的业务逻辑即可,也就是每一个业务逻辑对应的函数,所以像安全问题,资源调度问题全部交给云厂商来负责。
相对于传统的项目而言,传统项目无论是否有用户访问服务器都在运行当中,就是造成了比较大的成本支出,而在 serverless 而言,只有在用户去用发起请求时函数才会被激活并执行,并且按照调用次数收费,相对来说可以在有流量的时候,才有支持,没有流量的时候就没有支出,相对来说成本会进行进一步的降低。
二、Web API 的开发流程
首先第一步登录控制台并创建一个应用,创建应用的方式有两种,第一种就是如果有现有的 web 应用,就通过第一种方式创建 web 应用,直接将的代码打包上传。第二种方式是通过模板来创建应用,就是通过这个模板的方式来创建应用,模板可以理解为它相当于是一个脚手架,可以快速的去完成一些基础配置,例如权限,角色,网关的配置。当完成创建应用之后,第二步就是在这个应用下去创建一个函数,而函数主要是支持事件函数,HTTP 函数和模板函数,选择 HTTP 函数。创建函数之后就开始开发具体的业务逻辑。业务逻辑开发完之后要配置一个触发器,配置触发器因为是 Web API 的一个方式,所以说的触发器其实就是一个 HTTP 的一个请求,然后在这个 HTTP 请求里边可以指定域名,来设定的真正的这个 HTTP 的域。然后最后一部分就是可以通过函数计算的监控来进行一调试以及服务上线之后的使用量的监控情况。
三、演示 Web API 的开发流程
首先进入管理控制台,选择应用中心,创建模板,创建应用然后选择一个基于Python 语言的简单 web 应用配置,叫做 Python API。通过这种模板方式的来创建应用相当于是一个脚手架,会把底层所依赖的一些资源帮去创建好,然后只要其实这些资源去开发一些函数就好了,这样会提高开发效率。下一步来创建一个函数,新建函数是 HTTP,下一步所在服务就选择 Python API,叫做 Python API test,语言选择 Python 3.0,触发器的名称也叫做拍 python web api,请求方式选择 get 。通过操作其实会自动生成一个叫做 Python API test 的函数。这个函数有一个最基本的实现,初始化的实现通过invoke来调用,然后就会翻译到最后,是 Hello World dispose,就在这个基础之上进行一个开发,首先先把这个格式变成一个阶层格式,返回的结果依然是 Hello World。它的一个实现的过程就是当用户按照触发器配置的路径,进行这个路径访问的时候,就会去触发到写的这个函数代码的执行,然后最终去结构给用户。
配置方式首先进入到自定义域名,需要在 FC 当中去接入到自己的一个域名,指定这样的一个服务,然后用刚才选择就是 Python API test 这样的一个函数,然后版本选择 last,当访问这个域名下的这个路径的时候就会去触发到刚才定义的这个Python API test 函数。就会返回到刚才预期的一个结果叫做 Hello World。这样完成了一个9最简单的 web API。9可以做一些更加复杂的操作。现在有这样的一个场景,有一个文件叫做 Story TXT 的文件,现在想实现一个功能就是用户去访问这个页面链接的时候,可以把这个文件的内容返回给用户。首先先 import 这个 OSS 的一个基本依赖,environment 其中包括两部分内容,一部分就是函数计算的上下文,这个上下文当中其实存了当前访问这个用户的一些基本的信息,方便做操作。第二部分包含 HTTP 请求里边的一些参数,需要用SS的话需要用到一些里面的一些参数。从 context 当中取出,可以搭配在文档中然后来看,具体内容还有其他的。
返回如果没有权限就需要给当前的这个函数计算加一个角色,赋予访问时经过的权限。给 Python API test 所在的应用创建角色,并且给这个角色赋予了访问权限。执行可以看到打印出来“阿里巴巴 is Happy Child”。把最终的这个结果返回给访问的用户。
整个逻辑再梳理一下就是首先去配置自定义域名,并且在这个域名下去配路径,然后当用户去访问这个路径的时候,就会触发到的触发器,触发器就会去调函数,然后在函数过程当中,去访问了 oss 当中叫做 storage TXT 的文件,并且把文件的这个内容返回给几个用户,这样一个完整的功能就实现了。函数的调用情况在这个函数指标的地方可以看到最近一个小时所有的一个调用情况。。