网络知识 娱乐 【Web Function】产品测评,做个自己的密码生成器

【Web Function】产品测评,做个自己的密码生成器

一、关于 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 服务场景的能力上,具备以下优势:

  1. 处理性能高:API 网管免于 JSON 格式转换,请求处理环节减少;
  2. 开发体验好:可用 Node.js 原生接口,贴近原生 Web 服务;
  3. 框架支持全:常见的 web 框架都已经支持,比如:Express、Koa 等等;
  4. 部署难度低:自动创建 API 网关和 URL 以便调试及使用;
  5. 质量好把控:腾讯云提供了直接测试的能力,提升了保证代码质量的能力。

3. Web Function 是如何实现的?

来自腾讯云官网

执行顺序:

  1. 用户向 API 网关发送 HTTP 请求;
  2. API 网关为请求附加 "函数名","地域" 等相关请求头,并透传请求;
  3. 腾讯云内置 Proxy 实现 Nginx 转发,规范化请求信息,并发送到用户 Web Server;
  4. 用户的 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. 访问云函数主页;2. 左侧选择函数服务
新建云函数
1. 通过模板创建;2. 选择 Express 框架;3. 选好后点击“下一步”
按需配置(默认也好),选定后点击完成
稍等片刻,看到成功标志后,点击“立即跳转”
进入在线编辑页面
到此,我们看到了熟悉的 IDE 样式页面
1. 打开 src/app.js 文件;2. 里面已经包含了默认的接口
可以用测试工具直接进行测试,方法为:修改 path 字段值;配置参数和请求头;点击测试按钮;查看结果
也可以在浏览器中直接访问测试接口(GET),比如页面类接口:/
也可以在浏览器中直接访问测试接口(GET),比如资源类接口:/logo
也可以在浏览器中直接访问测试接口(GET),比如JSON接口:/user
也可以在浏览器中直接访问测试接口(GET),比如带参数的JSON接口:/user/:id
也可以在浏览器中直接访问测试接口(GET),比如异常页面 404:/404
也可以在浏览器中直接访问测试接口(GET),比如异常页面 500:/500

到这一步结束,创建云函数的过程就完成了,云函数服务也有了基础的处理能力,接下来就是实现我们自己的代码啦!

三、自定义接口:生成随机密码

1. 定义:

  1. Path: /gen-password
  2. Method: GET
  3. Params:

完整请求 “包含数字、小写字母、大写字母、特殊字符,长度为 6 位的密码”

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. 测试

在浏览器中访问测试地址

https://service-9sbklqg7-1252211023.bj.apigw.tencentcs.com/release/gen-password?len=6&digit=1&upper=1&lower=1&sp_chars=!@# 

得到结果如下。

看到随机生成的密码啦~

测评感受

优点

腾讯云的 Web Function 为我们提供了很舒服、方便的云服务环境,免去了装系统、搭环境的种种繁冗的工作,方便我们快速实现自己的业务,并且随处可用,也非常适合团队开发。我会推荐我身边的朋友、同事来体验 Serverless 模式开发。

上手容易程度 ★★★★★

操作流畅程度 ★★★★★

功能完善程度 ★★★★☆

部署方便程度 ★★★★☆

开发自由程度 ★★★★☆

希望加强的地方

目前的体验中,没有发现很严重的问题,速度也非常快,在线编辑也非常贴近本地开发。

不过还是有些小小的建议:

  1. 测试和部署按钮,都在在线编辑器的下方,这样代码编辑的显示和部署测试的显示很难同时出现,需要频繁的滑动屏幕,但同时,在线编辑器本身就有纵向滚动条,和浏览器的纵向滚动条很容易发生冲突,影响开发体验;
  2. 希望增加 Git 部署方式,本地开发的内容,同步到 Git 后,云服务器上可以自动从 Git 下载,完成代码部署,这样更加方便团队协作,提升开发体验。
  3. 每次刷新页面都需要从新加载编辑器,需要花费一定的时间。
  4. 日志部分刷新有些卡顿。

------

更多关于腾讯云 Web Function 的内容,敬请关注~