规划您的实施
假设,例如,您正在构建一个像 Salesforce 这样的 SaaS CRM 平台。您希望授权您的客户编写 JavaScript 代码,这些代码将在每次捕获新潜在客户时执行。
如果您打算使用 Deno Deploy 实现此功能,以下是您可能考虑构建它的方式
- 创建一个项目,并将该项目与您数据库中的客户帐户关联。这将允许您跟踪每个客户产生的用量,并可能使用有关该项目的分析信息向他们收费。
- 创建一个部署,其中包含您的最终用户提供的代码,该代码应在新潜在客户创建时运行。
- 在同一个项目中使用多个部署,您可以实现事件处理逻辑的“暂存”或“生产”版本。
- 您的 CRM 软件将通过向部署发送 HTTP 请求并等待响应来与最终用户的代码进行通信。
- 将来,如果您想支持为 CRM 中的其他事件编写代码(例如创建新联系人,或每晚发送自动报告),您可以为每个事件创建一个项目,并为每个事件使用如上所述的流程。
让我们看一下实现此目的所需的 API 端点的示例。
为一个项目创建部署 跳转到标题
在上一章中,您创建了一个新项目并记录了其 id
属性。在上一章的示例中,ID 是
f084712a-b23b-4aba-accc-3c2de0bfa26a
您可以使用项目标识符来为该项目创建一个部署。创建一个名为 create_deployment.ts
的新文件,并包含以下代码,为您的项目创建一个新的“hello world”部署。
create_deployment.ts
const accessToken = Deno.env.get("DEPLOY_ACCESS_TOKEN");
const API = "https://api.deno.com/v1";
// Replace with your desired project ID
const projectId = "your-project-id-here";
// Create a new deployment
const res = await fetch(`${API}/projects/${projectId}/deployments`, {
method: "POST",
headers: {
Authorization: `Bearer ${accessToken}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
entryPointUrl: "main.ts",
assets: {
"main.ts": {
"kind": "file",
"content":
`export default { async fetch(req) { return new Response("Hello, World!"); } }`,
"encoding": "utf-8",
},
},
envVars: {},
}),
});
const deployment = await res.json();
console.log(res.status);
console.log(
"Visit your site here:",
`https://${project.name}-${deployment.id}.deno.dev`,
);
如果您使用以下命令运行此脚本
deno run -A --env create_deployment.ts
您应该很快就会有一个简单的“Hello World!”服务器在公共 URL 上线,从您的 Deno Deploy 仪表板可见。
部署的组成部分 跳转到标题
上面的示例展示了一个非常简单的部署示例。更复杂的部署可能包括以下部分或全部组件,完整描述请参见此处 API 文档。
- 资产: TypeScript 或 JavaScript 源代码文件、图像、JSON 文档 - 使您的部署运行的代码和静态文件。这些文件可以使用
utf-8
(对于纯源代码文件)或base64
(对于图像和其他文本文件)编码在您上传到服务器的 JSON 中。除了实际文件,您还可以包含指向其他文件的符号链接。 - 入口点 URL: 指向资产(TypeScript 或 JavaScript 文件)的文件路径,该资产应从上面的集合中执行,以启动部署中的服务器。
- 环境变量: 您可以指定应存在于系统环境中的值,以便通过
Deno.env.get
检索。 - 数据库 ID: 应该为此部署提供的 Deno KV 数据库的标识符。
- 编译器选项: 一组应用于解释 TypeScript 代码的选项。
自定义域名 跳转到标题
创建部署后,将为其分配一个生成的 URL。对于某些场景来说,这可能就足够了,但通常您也希望将自定义域名与您的部署关联。查看域名 API 参考。