规划你的实现
例如,假设您正在构建一个类似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参考。