一、关于 Web Function
1. 什么是 Web Function?
来自腾讯云官方的定义:
https://cloud.tencent.com/document/product/583/56124
Web 函数(Web Function)是云函数的一种函数类型,区别于事件函数(Event Function)对于事件格式的限制,专注于优化 Web 服务场景,用户可以直接发送 HTTP 请求到 URL 触发函数执行
2. 为什么选择 Web Function?
相较于事件型函数,Web 函数在支持 Web 服务场景的能力上,具备以下优势:
- 处理性能高:API 网管免于 JSON 格式转换,请求处理环节减少;
- 开发体验好:可用 Node.js 原生接口,贴近原生 Web 服务;
- 框架支持全:常见的 web 框架都已经支持,比如:Express、Koa 等等;
- 部署难度低:自动创建 API 网关和 URL 以便调试及使用;
- 质量好把控:腾讯云提供了直接测试的能力,提升了保证代码质量的能力。
3. Web Function 是如何实现的?
执行顺序:
- 用户向 API 网关发送 HTTP 请求;
- API 网关为请求附加 "函数名","地域" 等相关请求头,并透传请求;
- 腾讯云内置 Proxy 实现 Nginx 转发,规范化请求信息,并发送到用户 Web Server;
- 用户的 Web Server 获取请求并处理。
此中涉及的公共请求头包括:
Header 字段 | 描述 |
---|---|
X-Scf-Request-Id | 当前请求 ID |
X-Scf-Memory | 函数实例运行时可使用的最大内存 |
X-Scf-Timeout | 函数执行的超时时间 |
X-Scf-Version | 函数版本 |
X-Scf-Name | 函数名称 |
X-Scf-Namespace | 函数所在命名空间 |
X-Scf-Region | 函数所在地域 |
X-Scf-Appid | 函数所有者的 Appid |
X-Scf-Uin | 函数所有者的 Uin |
二、拥有 Web Function
0. 准备工作
要使用腾讯云 Web Function 功能,首先需要 注册腾讯云账号 完成 实名认证 。
1. 创建云函数
进入云函数主页:https://console.cloud.tencent.com/scf/index?rid=1
到这一步结束,创建云函数的过程就完成了,云函数服务也有了基础的处理能力,接下来就是实现我们自己的代码啦!
三、自定义接口:生成随机密码
1. 定义:
- Path: /gen-password
- Method: GET
- Params:
完整请求 “包含数字、小写字母、大写字母、特殊字符,长度为 6 位的密码”
代码语言:javascript复制https://service-9sbklqg7-1252211023.bj.apigw.tencentcs.com/release/gen-password?len=6&digit=1&upper=1&lower=1&sp_chars=!@#
2. 编写代码
在 app.js 的 app.get('/500', (req, res) => { ... });
方法后增加以下代码:
// ↓↓↓ 生成随机密码 ↓↓↓
function randomInt(min, max) {
return Math.floor(Math.random() * (max - min) ) min;
}
function randomChar(strArr) {
var str = strArr.join("");
return str[randomInt(0, str.length)];
}
function shuffle(arr) {
return arr.sort(function() {
return .5 - Math.random();
})
}
// 生成随机密码
const DIGITS = "0123456789";
const LOWER_CHARS = "abcdefghijklmnopqrstuvwxyz";
const UPPER_CHARS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
app.get('/gen-password', (req, res) => {
let l_chars = req.query.lower ? LOWER_CHARS : "";
let u_chars = req.query.upper ? UPPER_CHARS : "";
let d_chars = req.query.digit ? DIGITS : "";
let sp_chars = req.query.sp_chars || "";
let len = req.query.len;
var pswd = [];
if(sp_chars.length) pswd.push(randomChar([sp_chars]));
if(l_chars.length) pswd.push(randomChar([l_chars]));
if(u_chars.length) pswd.push(randomChar([u_chars]));
if(d_chars.length) pswd.push(randomChar([d_chars]));
for(var i = pswd.length; i <= len; i ) {
pswd.push(randomChar([d_chars, u_chars, l_chars, sp_chars]));
}
res.send(shuffle(pswd).join(""));
});
// ↑↑↑ 生成随机密码 ↑↑↑
3. 部署代码
代码插入完毕后,讲页面往下滑动,直到出现部署按钮,点击并完成部署。
4. 测试
在浏览器中访问测试地址
代码语言:javascript复制https://service-9sbklqg7-1252211023.bj.apigw.tencentcs.com/release/gen-password?len=6&digit=1&upper=1&lower=1&sp_chars=!@#
得到结果如下。
看到随机生成的密码啦~
测评感受
优点
腾讯云的 Web Function 为我们提供了很舒服、方便的云服务环境,免去了装系统、搭环境的种种繁冗的工作,方便我们快速实现自己的业务,并且随处可用,也非常适合团队开发。我会推荐我身边的朋友、同事来体验 Serverless 模式开发。
上手容易程度 ★★★★★
操作流畅程度 ★★★★★
功能完善程度 ★★★★☆
部署方便程度 ★★★★☆
开发自由程度 ★★★★☆
希望加强的地方
目前的体验中,没有发现很严重的问题,速度也非常快,在线编辑也非常贴近本地开发。
不过还是有些小小的建议:
- 测试和部署按钮,都在在线编辑器的下方,这样代码编辑的显示和部署测试的显示很难同时出现,需要频繁的滑动屏幕,但同时,在线编辑器本身就有纵向滚动条,和浏览器的纵向滚动条很容易发生冲突,影响开发体验;
- 希望增加 Git 部署方式,本地开发的内容,同步到 Git 后,云服务器上可以自动从 Git 下载,完成代码部署,这样更加方便团队协作,提升开发体验。
- 每次刷新页面都需要从新加载编辑器,需要花费一定的时间。
- 日志部分刷新有些卡顿。
------
更多关于腾讯云 Web Function 的内容,敬请关注~