合规国际互联网加速 OSASE为企业客户提供高速稳定SD-WAN国际加速解决方案。 广告
# 剧本 * [对象规格](https://developers.cloudflare.com/workers/tooling/api/scripts/#object-specification) * [上载或更新工人脚本](https://developers.cloudflare.com/workers/tooling/api/scripts/#upload-or-update-a-workers-script) * [使用资源绑定](https://developers.cloudflare.com/workers/tooling/api/scripts/#with-resource-bindings) * [列出一个帐户的所有脚本](https://developers.cloudflare.com/workers/tooling/api/scripts/#list-all-scripts-for-an-account) * [下载脚本](https://developers.cloudflare.com/workers/tooling/api/scripts/#download-a-script) * [删除脚本](https://developers.cloudflare.com/workers/tooling/api/scripts/#delete-a-script) ## 对象规格 ### 脚本 * `id`:脚本名称。必须遵循[脚本命名约定](https://developers.cloudflare.com/workers/tooling/api/scripts/#script-naming-conventions)。 * `etag`:哈希脚本内容;可以在更新时在If-None-Match标头中使用。 * `script`:原始脚本内容,以字符串形式 * `size`:[脚本大小](https://developers.cloudflare.com/workers/about/limits),以字节为单位。 * `modified_on`:上一次修改脚本的ISO\_8601时间戳。 #### 脚本命名约定 脚本名称必须: * 以字母开头 * 以字母或数字结尾 * 仅包含字母,数字,下划线和连字符 * 不得超过63个字符。 ## 上载或更新工人脚本 `PUT accounts/:account_id/workers/scripts/:script_name` ##### 样品申请: ~~~sh curl -X PUT "https://api.cloudflare.com/client/v4/accounts/$CF_ACCOUNT_ID/workers/scripts/$SCRIPT_NAME" \ -H "Authorization: Bearer $CF_API_TOKEN" \ -H "Content-Type: application/javascript" \ --data "addEventListener('fetch', event => { event.respondWith(fetch(event.request)) })" ~~~ ##### 样本响应: ~~~json { "success": true, "errors": [], "messages": [], "result": { "script": "addEventListener('fetch', event => { event.respondWith(fetch(event.request)) })", "etag": "ea95132c15732412d22c1476fa83f27a", "size": 1024, "modified_on": "2017-01-01T00:00:00Z" } } ~~~ ### 使用资源绑定 如果要在“工作者”中包括“资源”,则需要在上传中指定它们的绑定。此API使用多部分形式而不是直接字节来发送其数据: #### 基本的多部分形式(仅脚本) ~~~sh curl -X PUT "https://api.cloudflare.com/client/v4/accounts/$CF_ACCOUNT_ID/workers/scripts/$SCRIPT_NAME" \ -H "Authorization: Bearer $CF_API_TOKEN" \ -F "metadata=@metadata.json;type=application/json" \ -F "script=@script.js;type=application/javascript" ~~~ 该文件`metadata.json`如下所示: ~~~json { "body_part": "script", "bindings": [] } ~~~ #### 添加KV命名空间绑定 如果您的Worker使用[KV名称空间](https://developers.cloudflare.com/workers/reference/storage/overview/),则需要`kv_namespace`在`"bindings"`数组中添加一个绑定对象`metadata.json`: ~~~json { "body_part": "script", "bindings": [ { "type": "kv_namespace", "name": "MY_NAMESPACE", "namespace_id": ":namespace_id" } ] } ~~~ 该`namespace_id`值应对应于与要使用的名称空间关联的标识符。该`name`值应对应于用于从Worker代码访问名称空间的全局变量。 #### 添加Wasm模块 如果您的工作人员使用[Wasm模块](https://developers.cloudflare.com/workers/templates/boilerplates/rustwasm/),则将需要在[meta.json](https://developers.cloudflare.com/workers/templates/boilerplates/rustwasm/)中将`wasm_module`绑定对象添加到`"bindings"`数组: ~~~json { "body_part": "script", "bindings": [ { "type": "wasm_module", "name": "WASM", "part": "wasm" } ] } ~~~ 该`name`值应对应于用于从Worker代码访问名称空间的全局变量。 您还需要将Wasm模块作为文件部分添加到您的请求中,并将其命名为`part`与绑定中的字段相同。这会将以上请求更改为: ~~~sh curl -X PUT "https://api.cloudflare.com/client/v4/accounts/$CF_ACCOUNT_ID/workers/scripts/$SCRIPT_NAME" \ -H "Authorization: Bearer $CF_API_TOKEN" \ -F "metadata=@metadata.json;type=application/json" \ -F "script=@script.js;type=application/javascript" \ -F "wasm=@module.wasm;type=application/wasm" # link your wasm module in place of module.wasm ~~~ #### 添加秘密文本绑定 *注意:秘密在工作器的部署之间持久存在。添加或更改机密内容时,只需要在API调用中包括机密即可。* 如果您的Worker脚本使用[秘密](https://developers.cloudflare.com/workers/tooling/api/scripts/reference/apis/environment-variables#secrets),请在以下位置`secret_text`向`"bindings"`数组添加相应的绑定`metadata.json`: ~~~json { "body_part": "script", "bindings": [ { "type": "secret_text", "name": "MY_SECRET", "text": "secret things are secret" } ] } ~~~ * `text`:您要存储的文本 * `name`:全局变量,用于从工作程序代码访问您的机密 #### 添加纯文本绑定 如果您的Worker使用纯文本环境变量,则需要`plain_text`为每个`"bindings"`数组添加一个绑定对象`metadata.json`: ~~~json { "body_part": "script", "bindings": [ { "type": "plain_text", "name": "ENV_VAR", "text": "plain text things are not secret" } ] } ~~~ * `text`:您要存储的文本 * `name`:全局变量,用于从工作程序代码访问您的机密 #### 请求 ##### URL参数 * `account_id`:与您的Cloudflare帐户关联的标识符。[查找您的Cloudflare帐户ID](https://developers.cloudflare.com/workers/quickstart/#configure) * `script_name`:您要分配给脚本的名称。必须遵循Workers[脚本命名约定](https://developers.cloudflare.com/workers/tooling/api/scripts/#script-naming-conventions)。 ##### 标头 [查找您的身份验证信息](https://developers.cloudflare.com/workers/quickstart/#configure) * `Authorization` * `Content-Type`应用程序/ javascript * `If-None-Match`\[可选\]一个[脚本对象](https://developers.cloudflare.com/workers/tooling/api/scripts/#object-specification)ETAG ##### 有效负载(仅脚本) 有效的JavaScript Blob ##### 有效负载(脚本和绑定) 包含有效JavaScript文件,`metadata.json`指定任何绑定的文件和Wasm模块文件的多部分表单。 #### 响应 ##### 身体 * `success`:布尔值 * `result`:生成的脚本的[脚本对象](https://developers.cloudflare.com/workers/tooling/api/scripts/#object-specification)。如果成功为假,则为空 * `errors`:[错误对象](https://developers.cloudflare.com/workers/tooling/api/requests#error-object)数组。如果成功为真,则为空 * `messages`:字符串数组(未使用) ##### 失误 ###### 缺少帐户/区域标识符 ~~~ status: 404 error: { code: 10005, message: "workers.api.error.not_found" } ~~~ ###### 超出[脚本限制](https://developers.cloudflare.com/workers/about/limits) ~~~ status: 403 error: { code: 10037, message: "workers.api.error.exceeded_allowed_number_of_scripts" } ~~~ ###### 无效的脚本 ~~~ status: 400 error: { code: 10021, message: varies } ~~~ ###### 不支持Etag(带有If-None-Match标头) ~~~ status: 400 error: { code: 10029, message: "workers.api.error.etag_unsupported" } ~~~ ###### Etag前提条件失败 ~~~ status: 412 error: { code: 10018, message: "workers.api.error.etag_precondition_failed" } ~~~ ###### 脚本太大 ~~~ status: 400 error: { code: 10027, message: "workers.api.error.script_too_large" } ~~~ ###### 内部错误 ~~~ status: 500 error: { code: 10013, message: "workers.api.error.unknown" } ~~~ ## 列出一个帐户的所有脚本 `GET accounts/:account_id/workers/scripts` ##### 样品申请: ~~~sh curl -X GET "https://api.cloudflare.com/client/v4/accounts/$CF_ACCOUNT_ID/workers/scripts" \ -H "Authorization: Bearer $CF_API_TOKEN" ~~~ ##### 样本响应: ~~~json { "success": true, "errors": [], "messages": [], "result": [ { "id": "this-is_my_script-01", "etag": "ea95132c15732412d22c1476fa83f27a", "created_on": "2017-01-01T00:00:00Z", "modified_on": "2017-01-01T00:00:00Z" } ] } ~~~ #### 请求 ##### URL参数 * `account_id`:与您的Cloudflare帐户关联的标识符。[查找您的Cloudflare帐户ID](https://developers.cloudflare.com/workers/quickstart/#configure) ##### 查询参数 * `include_subdomain_availability`: ##### 标头 [查找您的身份验证信息](https://developers.cloudflare.com/workers/quickstart/#configure) * `Authorization` ##### 有效载荷 #### 响应 ##### 身体 * `success`:布尔值 * `result`:[脚本对象](https://developers.cloudflare.com/workers/tooling/api/scripts/#object-specification)数组。如果成功为假,则为空;否则为null。不包含原始脚本文本。 * `errors`:[错误对象](https://developers.cloudflare.com/workers/tooling/api/requests#error-object)数组。如果成功为真,则为空 * `messages`:字符串数组(未使用) ##### 失误 ###### 缺少帐户/区域标识符 ~~~ status: 404 error: { code: 10005, message: "workers.api.error.not_found" } ~~~ ###### 参数格式错误 当查询参数(例如`include_subdomain_availability`)无法解析为正确的类型时发生 ~~~ status: 400 error: { code: 10006, message: "workers.api.error.malformed_param" } ~~~ ###### 内部错误 ~~~ status: 500 error: { code: 10013, message: "workers.api.error.unknown" } ~~~ ## 下载脚本 `GET accounts/:account_id/workers/scripts/:script_name` ##### 样品申请: ~~~sh curl -X GET "https://api.cloudflare.com/client/v4/accounts/$CF_ACCOUNT_ID/workers/scripts/$SCRIPT_NAME" \ -H "Authorization: Bearer $CF_API_TOKEN" \ -H "Accept: application/javascript" ~~~ ##### 样本响应: ~~~ addEventListener('fetch', event => { event.respondWith(fetch(event.request) })) ~~~ #### 请求 ##### URL参数 * `account_id`:与您的Cloudflare帐户关联的标识符。[查找您的Cloudflare帐户ID](https://developers.cloudflare.com/workers/quickstart/#configure) * `script_name`:要下载的脚本名称 ##### 标头 [查找您的身份验证信息](https://developers.cloudflare.com/workers/quickstart/#configure) * `Authorization` * `Accept`应用程序/ javascript ##### 有效载荷 #### 响应 ##### 正文(文本Blob) 原始脚本内容,以字符串形式 ##### 失误 ###### 缺少帐户/区域标识符 ~~~ status: 404 error: { code: 10005, message: "workers.api.error.not_found" } ~~~ ###### 缺少脚本名称 ~~~ status: 404 error: { code: 10005, message: "workers.api.error.missing_script_name" } ~~~ ###### 找不到脚本 ~~~ status: 404 error: { code: 10007, message: "workers.api.error.not_found" } ~~~ ###### 内部错误 ~~~ status: 500 error: { code: 10013, message: "workers.api.error.unknown" } ~~~ ## 删除脚本 `DELETE accounts/:account_id/workers/scripts/:script_name` ##### 样品申请: ~~~sh curl -X DELETE "https://api.cloudflare.com/client/v4/accounts/$CF_ACCOUNT_ID/workers/scripts/$SCRIPT_NAME" \ -H "Authorization: Bearer $CF_API_TOKEN" ~~~ ##### 样本响应: ~~~json { "success": true, "errors": [], "messages": [], "result": { "id": "ea95132c15732412d22c1476fa83f27a" } } ~~~ #### 请求 ##### URL参数 * `account_id`:与您的Cloudflare帐户关联的标识符。[查找您的Cloudflare帐户ID](https://developers.cloudflare.com/workers/quickstart/#configure) * `script_name`:要删除的脚本的名称。 ##### 标头 [查找您的身份验证信息](https://developers.cloudflare.com/workers/quickstart/#configure) * `Authorization` ##### 有效载荷 #### 响应 ##### 身体 * `success`:布尔值 * `result`:一个对象,其中包含已删除脚本的ID(etag) * `errors`:[错误对象](https://developers.cloudflare.com/workers/tooling/api/requests#error-object)数组。如果成功为真,则为空 * `messages`:字符串数组(未使用) ##### 失误 ###### 缺少帐户/区域标识符 ~~~ status: 404 error: { code: 10005, message: "workers.api.error.not_found" } ~~~ ###### 缺少脚本名称 ~~~ status: 404 error: { code: 10005, message: "workers.api.error.missing_script_name" } ~~~ ###### 找不到脚本 ~~~ status: 404 error: { code: 10007, message: "workers.api.error.not_found" } ~~~ ###### 内部错误 ~~~ status: 500 error: { code: 10013, message: "workers.api.error.unknown" } ~~~