用于构建 API 和微服务的 12 个流行 JavaScript 框架
传统API vs Serverless API:探索新兴的无服务器API开发模式
在当今数字化时代,企业对于灵活、可扩展且高效的技术解决方案的需求日益增长。无服务器计算(Serverless )作为一种新兴的架构模式,正在逐步改变人们对于传统服务器的认识。“无服务器”架构可以帮助开发者摆脱传统后端服务所带来的部署、运维成本,从而更加聚焦于业务逻辑的开发与迭代。
Serverless 的主要使用者是前端人员,而前端人员更关注开发工具,需要依赖开发工具进行 Serverless 开发、调试和部署。因此在API开发时,Serverless 具备先天的人才基础和使用基础。
根据传统的API开发程序,进行对Serverless API开发程序的优化操作
传统API的开发程序包括设计API的请求/响应数据的结构和字段,确定API的调用方式、url地址和参数类型等。主要通过专业开发人员编写代码来实现业务逻辑,如连接应用系统数据库、开放接口获取数据,处理异构系统协议转换、字段转换、安全控制和脱敏等。等到逻辑开发确定后,还需要补充API的接口功能、参数结构等使用说明文档,程序繁琐。
假设开发者要设计一个有道容器服务API监控。开发者要先使用API Monitor监控开源框架:https://gitee.com/ecar_team/apimonitor,进行模拟探测http接口、http页面,通过请求耗时和响应结果来判断系统接口的可用性和正确性。
开发者想要添加基础设施,还要添加Service级别API监控告警。以词典查词服务为例,开发者需要配置一条Service级别的多API监控(也可以是单API监控)。其中“所属系统”是服务所属的告警组,支持电话、短信、popo群、邮件等告警方式(和其它监控告警通用)。
传统API不仅依靠于前端和后端人员的辅助生成,还要经过多番测试进行模拟演练。对比之下,开发者使用Serverless API的话,能够在代码维护、架构创建等方面占据优势。
那么,开发者使用Serverless API开发模式时,由于Serverless 框架是一个开源 CLI 工具,它使代码部署变得更加容易且更可维护。它允许开发者将基础结构定义为代码(数据库、队列、文件存储、API 等),而不是手动登录通过 Web 接口创建它们,因此,开发者不需要管理运行代码的服务器,这消除了管理服务器、负载平衡器、应用补丁和扩展服务器的负担。
假设开发者要构建一个图书 API,该 API 将图书保存到一个 NoSQL 数据存储(DynamoDB)中,并将用于管理图书的 CRUD(创建、读取、更新和删除)。
首先打开Github地址: https://github.com/JamieLivingstone/serverless-node-rest-api。在电脑上安装全局 Serverless 框架“npm install -g serverless”,并创建一个新目录“book-api”、用代码编辑器打开。紧接着,在项目根目录下运行“serverless create –template aws-nodejs”命令生成新项目的框架。在项目根目录下新建一个文件“package.json”,并将下面的内容粘贴到这个文件中。
{
"name": "book-app",
"version": "1.0.0",
"description": "Serverless book management API",
"dependencies": {
"@hapi/joi": "^15.0.3",
"aws-sdk": "^2.466.0",
"uuid": "^3.3.2"
}
}
最后,在项目的根目录下运行如下命令安装项目依赖——“npm install”。从中可以看到,Serverless 框架简化了在代码中定义基础设施的过程,开发者可以在“serverless.yml”中配置应用程序基础参数。确定参数信息后,在项目根目录下创建一个新目录“books”。并在 books 目录下创建一个文件“schema.js”,就可以定义图书模式及其属性。
后无服务器时代,可以使用AWS Fargate为OpenCV项目创建无服务器API
进行传统API开发时,开发者要通过函数才能进行筛选、路由、批处理、拆分事件或调用其他云服务或函数,但现在这些操作等都能通过更少的函数代码,多数情况下甚至不需要函数代码就能完成;它们可以被可配置的云构造,以云服务一部分的形式取而代之。
云计算市场正在向超专业化的垂直多云服务转变,提供独特且高细粒度的功能,专业满足开发人员的需求。AWS的出现,将无需管理基础设施,即可根据事件执行代码的概念引入主流视线,开发者可以通过AWS,轻松实现函数代码到云构造的过渡。
以在带有AWS Fargate的无服务器容器中部署在OpenCV和Flask中创建的简单图像识别模型为例,开发者需要在CDK项目中部署的网络资源,打开网址https://medium.com/@JugueDev/despliega-laravel-usando-containers-serverless-con-aws-fargate-%EF%B8%8F-%EF%B8%8F-f4fdcb6c170f,并在Flask中创建一个超级基础的应用程序,创建一个hello_app.py文件,其中包含以下内容:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello World!'
if __name__ == "__main__":
app.run()。
接着,开发者需要在新创建的文件中定义requirements.txt项目的依赖关系:
Flask==2.0.2,并用Docker容器应用程序创建一个DockerFile。最后,把OpenCV应用程序连接到Flask项目,在requirement.txt文件中添加几个依赖项
click==8.0.3
Flask==2.0.2
itsdangerous==2.0.1
Jinja2==3.0.2
MarkupSafe==2.0.1
Werkzeug==2.0.2
numpy
keras
cmake==3.20.5
scikit-build==0.13.1
setuptools==50.3.2
wheel==0.30.0
tensorflow
opencv-python==4.4.0.46
图像构建成功后,开发者就可以继续将其上传到存储库中。并在AWS Fargate中部署图像到AWS Fargate的无服务器。
现行无服务器API的实操,以API Gateway为例
API Gateway是一个完全托管的服务,它使得开发者可以轻松创建、发布、维护、监控和保护任何规模的API。与Lambda结合使用时,API Gateway可以作为Lambda函数的前端触发器,接收HTTP请求并将其转发给Lambda函数处理,然后返回响应。
假设开发者要创建一个简单的API Gateway,需要遵循以下步骤:
- 在API Gateway控制台中,选择“创建API”。
- 选择“REST API”。
- 输入API名称,例如“HelloWorldAPI”。
- 在资源下创建一个新的资源,例如“/hello”。
- 为“/hello”资源创建一个GET方法。
- 将GET方法的集成类型设置为“Lambda函数”。
- 选择之前创建的Lambda函数。
- 部署API到一个新的阶段,例如“prod”。
这样,就可以创建一个公开的HTTP端点,当开发者访问这个端点时,API Gateway会触发Lambda函数,并将函数的响应返回给客户端。
此外,开发者还可以将Lambda和API Gateway结合起来,创建一个无服务器的HTTP API。用户的HTTP请求通过API Gateway路由到Lambda函数,函数处理请求后返回响应,整个过程无需服务器。
参考网站:
https://dreamit.blog.csdn.net/article/details/131746520
https://mp.weixin.qq.com/s/9T5HOXiDgOwgHuk9k1dVWg
https://mp.weixin.qq.com/s/8pnE8uK25jbvn433YdNs2w
https://mp.weixin.qq.com/s/IF_kVSUcujAAONwFoIPhvA
https://mp.weixin.qq.com/s/RadtEe09MYxZiK7DjuHbeg