Cloudflare API的使用

姊妹篇:

Cloudflare的使用

使用Cloudflare-Workers



Cloudflare 提供了许多强大的 API,可以帮助你管理和扩展你的网站和应用程序。以下是一些最常用的 Cloudflare API:

核心 API:

  • DNS API: 用于管理你的 DNS 记录,包括添加、删除、更新和查询记录。
  • Workers API: 用于管理 Cloudflare Workers,这是一个无服务器计算平台,可以用来构建快速、可扩展的应用程序。
  • Pages API: 用于管理 Cloudflare Pages,这是一个静态网站托管平台,可以用来轻松部署网站。
  • Firewall API: 用于管理 Cloudflare Firewall,这是一个强大的安全工具,可以用来保护你的网站免受攻击。
  • Rate Limiting API: 用于管理 Cloudflare Rate Limiting,可以用来限制对你的网站的请求数量。
  • Analytics API: 用于获取你的网站的分析数据,例如访问量、流量来源和页面浏览量。
  • Images API: 用于管理 Cloudflare Images,这是一个图像优化和交付服务,可以用来加速你的图像加载速度。

其他 API:

  • Spectrum API: 用于管理 Cloudflare Spectrum,这是一个全球性的网络,可以用来加速你的网站和应用程序。
  • Access API: 用于管理 Cloudflare Access,这是一个身份验证和授权服务,可以用来控制对你的网站和应用程序的访问权限。
  • Tunnel API: 用于管理 Cloudflare Tunnel,这是一个安全的服务,可以用来将你的本地应用程序暴露到互联网上。
  • API Tokens API: 用于管理 Cloudflare API Tokens,可以用来限制对你的 API 的访问权限。
  • Load Balancing API: 用于管理 Cloudflare Load Balancing,可以用来将流量分配到多个服务器。

如何使用 Cloudflare API:

  1. 获取 API 密钥: 你需要在 Cloudflare 控制面板中创建一个 API 密钥。
  2. 选择 API 端点: 每个 Cloudflare API 都有一个唯一的端点,你可以使用它来访问 API。
  3. 发送 API 请求: 你可以使用任何编程语言来发送 API 请求,例如 Python、JavaScript 或 Go。
  4. 处理 API 响应: Cloudflare API 返回 JSON 格式的响应,你可以使用你的编程语言解析这些响应。

一些 Cloudflare API 的使用示例:

  • 使用 DNS API 添加 DNS 记录:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import requests

api_token = "YOUR_API_TOKEN"
zone_id = "YOUR_ZONE_ID"

url = f"https://api.cloudflare.com/client/v4/zones/{zone_id}/dns_records"
headers = {
"Authorization": f"Bearer {api_token}",
"Content-Type": "application/json",
}
data = {
"type": "A",
"name": "www",
"content": "1.2.3.4",
"ttl": 120,
}

response = requests.post(url, headers=headers, json=data)
print(response.json())
  • 使用 Workers API 创建 Worker:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
const API_TOKEN = "YOUR_API_TOKEN";
const ZONE_ID = "YOUR_ZONE_ID";

const worker = {
name: "my-worker",
script: `
addEventListener('fetch', event => {
event.respondWith(new Response('Hello, world!'));
});
`,
};

const url = `https://api.cloudflare.com/client/v4/zones/${ZONE_ID}/workers/scripts`;

const headers = {
Authorization: `Bearer ${API_TOKEN}`,
'Content-Type': 'application/json',
};

fetch(url, {
method: 'POST',
headers,
body: JSON.stringify(worker),
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error(error));

更多信息:




20241023

接口删除workers上面的历史版本

之前测试环境每次构建,也会同步更新到cf
导致版本非常多了~

参考 Jenkins的高阶使用-加一个参数


不手工删除,调研一下使用接口删


我用cloudflare的Workers 和 Pages,有个项目叫taskonsaas-test,现在有太多历史版本的部署,如何使用接口清理掉超过10天的部署?

要使用 Cloudflare Workers 和 Pages 的 API 清理超过 10 天的历史版本部署,你可以按以下步骤进行:

1. 获取 API Token

确保你有一个有效的 API Token,该 Token 需要具备相应的权限来访问和管理 Cloudflare Pages 项目。

2. 获取历史部署列表

使用 Cloudflare Pages API 获取项目的历史部署。你可以使用以下 API 端点:

1
GET https://api.cloudflare.com/client/v4/accounts/{account_id}/pages/projects/{project_name}/deployments

3. 过滤旧版本

在获取到的部署列表中,检查每个部署的创建时间,并过滤出超过 10 天的部署。

4. 删除旧版本

对于过滤出的旧版本,你可以使用以下 API 端点进行删除:

1
DELETE https://api.cloudflare.com/client/v4/accounts/{account_id}/pages/projects/{project_name}/deployments/{deployment_id}

5. 示例代码

以下是一个使用 Go 编写的示例代码,演示如何实现上述步骤:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
package main

import (
"bytes"
"encoding/json"
"fmt"
"net/http"
"os"
"time"
)

const (
accountID = "YOUR_ACCOUNT_ID" // 替换为你的 Account ID
projectName = "xxxxx" // 替换为你的项目名称
apiToken = "YOUR_API_TOKEN" // 替换为你的 API Token
daysThreshold = 10 // 设定阈值
)

type Deployment struct {
ID string `json:"id"`
CreatedAt string `json:"created_at"`
}

type DeploymentsResponse struct {
Result []Deployment `json:"result"`
}

func main() {
// 获取当前时间
now := time.Now()
threshold := now.AddDate(0, 0, -daysThreshold)

// 获取历史部署
deployments, err := getDeployments()
if err != nil {
fmt.Println("Error getting deployments:", err)
return
}

// 检查并删除旧版本
for _, deployment := range deployments {
createdAt, err := time.Parse(time.RFC3339, deployment.CreatedAt)
if err != nil {
continue
}

if createdAt.Before(threshold) {
if err := deleteDeployment(deployment.ID); err != nil {
fmt.Printf("Error deleting deployment %s: %v\n", deployment.ID, err)
} else {
fmt.Printf("Deleted deployment %s\n", deployment.ID)
}
}
}
}

func getDeployments() ([]Deployment, error) {
url := fmt.Sprintf("https://api.cloudflare.com/client/v4/accounts/%s/pages/projects/%s/deployments", accountID, projectName)

req, _ := http.NewRequest("GET", url, nil)
req.Header.Set("Authorization", "Bearer "+apiToken)

client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
return nil, err
}
defer resp.Body.Close()

var response DeploymentsResponse
if err := json.NewDecoder(resp.Body).Decode(&response); err != nil {
return nil, err
}

return response.Result, nil
}

func deleteDeployment(deploymentID string) error {
url := fmt.Sprintf("https://api.cloudflare.com/client/v4/accounts/%s/pages/projects/%s/deployments/%s", accountID, projectName, deploymentID)

req, _ := http.NewRequest("DELETE", url, nil)
req.Header.Set("Authorization", "Bearer "+apiToken)

client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
return err
}
defer resp.Body.Close()

if resp.StatusCode != http.StatusOK {
return fmt.Errorf("failed to delete deployment, status: %s", resp.Status)
}

return nil
}

使用说明

  1. 替换常量

    • YOUR_ACCOUNT_IDYOUR_API_TOKENtaskonsaas-test 替换为你的实际值。
  2. 运行代码

    • 将代码保存为 cleanup.go,然后在终端中运行:
      1
      go run cleanup.go

注意事项

  • 确保 API Token 具有删除部署的权限。
  • 在执行删除操作之前,建议先打印出将要删除的部署,以便于确认。
  • 对 API 的调用频率要遵循 Cloudflare 的速率限制政策。

通过以上步骤,你可以清理超过 10 天的 Cloudflare Pages 部署版本。