函数编写与部署:从代码到上线


文档摘要

函数编写与部署:从代码到上线 本节动手实践:一个边缘函数长什么样、如何管理依赖、如何部署与调用。我们用通用概念描述结构,帮助你建立心智模型。 函数的基本结构 一个边缘函数的核心是一个处理请求的入口:它接收一个 HTTP 请求,处理后返回一个 HTTP 响应。这与 Web 框架中的「路由处理器」非常相似。 三个关键点: 入口:注册一个处理函数,平台在每次请求时调用它。 请求对象:携带方法、头、查询参数、请求体等信息。 响应对象:你构造并返回,包括状态码、头、响应体。 读取请求信息 请求对象提供丰富的信息,常用包括: HTTP 方法:GET / POST / PUT / DELETE,用于区分操作意图。 查询参数:URL 中的参数,如 。 请求头:包括内容类型、自定义头。

函数编写与部署:从代码到上线

本节动手实践:一个边缘函数长什么样、如何管理依赖、如何部署与调用。我们用通用概念描述结构,帮助你建立心智模型。

函数的基本结构

一个边缘函数的核心是一个处理请求的入口:它接收一个 HTTP 请求,处理后返回一个 HTTP 响应。这与 Web 框架中的「路由处理器」非常相似。

// 概念示意:最简边缘函数 import { serve } from "标准库"; serve(async (request) => { // 1. 解析请求(方法、参数、请求体) const data = await request.json(); // 2. 执行业务逻辑 const result = 处理(data); // 3. 返回响应 return new Response(JSON.stringify({ result }), { headers: { "Content-Type": "application/json" }, }); });

三个关键点:

  • 入口:注册一个处理函数,平台在每次请求时调用它。
  • 请求对象:携带方法、头、查询参数、请求体等信息。
  • 响应对象:你构造并返回,包括状态码、头、响应体。

读取请求信息

请求对象提供丰富的信息,常用包括:

  • HTTP 方法:GET / POST / PUT / DELETE,用于区分操作意图。
  • 查询参数:URL 中的参数,如 ?id=xxx
  • 请求头:包括内容类型、自定义头。
  • 请求体:POST/PUT 携带的数据,常为 JSON。
  • 用户身份:若请求携带了用户的 JWT,可从中解析当前用户(用于做函数内的权限判断)。

根据这些信息分流逻辑,是函数编写的常见模式。

依赖管理

Deno 的依赖通过 URL 直接导入——在代码顶部用 import 语句从 URL 引入第三方模块,无需单独的依赖清单与安装步骤。例如想用某 HTTP 客户端库,直接 import 它的 URL 即可。

这种方式的好处:

  • 依赖即代码,所见即所得,版本在 URL 中锁定。
  • 无需 install 步骤,部署时平台自动拉取。
  • 依赖图清晰,便于审查安全。

注意事项:

  • 依赖的 URL 应锁定到具体版本,避免意外升级引入兼容问题。
  • 尽量用少而稳定的依赖,减少冷启动开销与供应链风险。

读取环境变量与密钥

函数中的密钥(如第三方 API Key、数据库服务级密钥)不应硬编码,而应通过环境变量注入:

  • 在项目配置中设置环境变量(如 PAYMENT_SECRET)。
  • 函数内用标准方式读取(如 Deno.env.get("PAYMENT_SECRET"))。

这样密钥与代码分离,便于不同环境使用不同密钥,也避免泄露到代码仓库。

部署流程

部署一个边缘函数的典型流程:

要点:

  • 本地先行:用本地开发环境(见第 1 章 CLI)先在本地跑通函数,再部署。
  • 部署命令:通过 CLI 将函数推送到项目,平台自动构建并部署到边缘。
  • 访问入口:部署后,函数获得一个 HTTPS URL,客户端可像调用普通 API 一样调用它。
  • 版本与回滚:注意每次部署会替换线上版本;关键函数应保留可回滚的版本管理习惯。

调用函数的方式

部署后,函数可被多种方式调用:

  • 客户端库:前端通过客户端库按函数名调用,自动处理序列化与认证。
  • 直接 HTTP:用任意 HTTP 客户端(curl、fetch 等)请求函数 URL,适合第三方系统调用。
  • 携带用户令牌:调用时可附带用户 JWT,函数据此识别用户身份。
  • 服务级密钥:可信环境调用时用服务级密钥,函数可执行特权操作。

函数中的错误处理

健壮的函数需要良好的错误处理:

  • 输入校验:检查请求参数是否合法,不合法返回明确错误码。
  • 异常捕获:用 try/catch 包裹可能失败的操作(外部请求、数据库操作),避免函数崩溃。
  • 合适的 HTTP 状态码:成功用 2xx,客户端错误用 4xx,服务端错误用 5xx,便于调用方处理。
  • 结构化错误信息:返回清晰的错误 JSON,便于排查。

日志与可观测性

部署后,你需要观察函数的运行情况:

  • 日志:函数内的打印输出会汇集到日志,用于排查问题。
  • 调用监控:调用次数、错误率、延迟等指标。
  • 告警:对错误率突增等异常设置告警。

这些可观测性手段是函数上线后稳定运行的保障。

小结

边缘函数以「处理 HTTP 请求」为核心结构,用 URL 导入依赖、用环境变量管理密钥;本地测试通过后用 CLI 部署,获得可调用的 HTTPS 入口;良好的输入校验、错误处理与日志是生产级函数的必备素质。下一节介绍函数如何被不同方式触发。


发布者: 作者: 灏天文库 转发
评论区 (0)
U