# 剧本
* [对象规格](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"
}
~~~
- 关于本翻译文档
- 快速开始
- 模版库
- 讲解
- Workers页面
- 从0开始
- 从已有页面开始
- 从已有Worder开始
- 工具
- Cli工具 wrangler
- 安装
- 指令
- 配置
- 环境
- Webpack
- 密钥
- KV
- 网站
- Playground
- ServerLess插件
- Terraform
- REST API
- Making Requests
- Scripts
- Bindings
- Routes
- Integrations
- 相关
- 工作原理
- 安全
- 使用缓存
- 价格
- Routes
- Limits
- 提示
- 调试技巧
- 调试header
- FetchEvent生命周期
- 请求上下文
- 请求sign
- 参考
- runtime API
- Web Standards
- fetch
- fetchEvent
- Response
- Request
- KV
- Environment Variables
- Streams
- Encoding
- Web Crypto
- Cache API
- HTMLRewriter
- Workers KV
- Use cases
- Namespaces