您可以使用 Cloudflare API 创建 Snippets。
用于管理 Snippets 的 API 请求中的 API 令牌 必须至少具有以下权限:
- Zone > Snippets > Edit
要获得完整端点,请将下面列出的 Snippets 端点追加到 Cloudflare API 基础 URL:
https://api.cloudflare.com/client/v4{zone_id} 参数是 zone ID(十六进制字符串)。可在 Cloudflare 仪表板中找到此值。
下表汇总了可用操作。
| 操作 | 动词 + 端点 |
|---|---|
| 列出所有代码片段 | GET /zones/{zone_id}/snippets |
| 创建/更新代码片段 | PUT /zones/{zone_id}/snippets/{snippet_name} |
| 获取代码片段详情 | GET /zones/{zone_id}/snippets/{snippet_name} |
| 获取代码片段内容 | GET /zones/{zone_id}/snippets/{snippet_name}/content |
| 删除代码片段 | DELETE /zones/{zone_id}/snippets/{snippet_name} |
| 列出 snippet 规则 | GET /zones/{zone_id}/snippets/snippet_rules |
| 创建/更新/删除 snippet 规则 | PUT /zones/{zone_id}/snippets/snippet_rules |
| 删除所有 snippet 规则 | DELETE /zones/{zone_id}/snippets/snippet_rules |
要创建或更新 Snippet,请使用以下 PUT 请求。片段命名为 $SNIPPET_NAME,请求体包含 JavaScript 代码。
Required API token permissions
At least one of the following token permissions is required:Snippets Write
curl "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/snippets/$SNIPPET_NAME" \
--request PUT \
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
--form "files=@example.js" \
--form "metadata={\"main_module\": \"example.js\"}"片段名称只能包含字符 a-z、0-9 和 _(下划线)。名称在 zone 上下文中必须唯一。创建片段后无法更改片段名称。
必需的请求体参数为:
files:包含 JavaScript 代码的文件。metadata:包含main_module的对象,其值必须与上传文件的文件名匹配。
要使此示例正常工作,请将 JavaScript 代码保存在名为 example.js 的文件中,然后从 example.js 所在文件夹执行带 PUT 请求的 curl 命令。
{
"errors": [],
"messages": [],
"success": true,
"result": {
"created_on": "2023-07-24-00:00:00",
"modified_on": "2023-07-24-00:00:00",
"snippet_name": "snippet_name_01"
}
}要部署新片段,必须创建 snippet 规则。snippet 规则的表达式定义片段代码何时运行。
创建代码片段后,可以将其关联到规则。通过向 snippet_rules 端点发送以下 PUT 请求完成此操作。
Required API token permissions
At least one of the following token permissions is required:Snippets Write
curl "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/snippets/snippet_rules" \
--request PUT \
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
--json '{
"rules": [
{
"description": "Trigger snippet on specific cookie",
"enabled": true,
"expression": "http.cookie eq \"a=b\"",
"snippet_name": "snippet_name_01"
}
]
}'