Tóm tắt
Cloudflare API cho phép bạn quản lý DNS, vùng, Workers, bảo mật và phân tích một cách tự động. Xác thực bằng mã thông báo API (khuyên dùng) hoặc khóa toàn cục, gọi đến api.cloudflare.com/client/v4 và xử lý giới hạn tốc độ một cách linh hoạt. Để kiểm thử, hãy sử dụng Apidog để xác thực các thay đổi DNS, kiểm thử triển khai Worker và tự động hóa cấu hình trên các môi trường khác nhau.
Giới thiệu
Cloudflare đứng trước hàng triệu trang web. Nó xử lý DNS, CDN, bảo vệ DDoS, WAF, các hàm phi máy chủ Workers, và nhiều hơn nữa. Việc quản lý tất cả thông qua bảng điều khiển hoạt động tốt cho các thiết lập nhỏ. Nhưng ở quy mô lớn, bạn cần tự động hóa.
Cloudflare API bao gồm mọi thứ mà bảng điều khiển làm được. Bạn có thể tạo vùng, cập nhật bản ghi DNS, cấu hình quy tắc trang, triển khai Workers, quản lý cài đặt SSL và lấy dữ liệu phân tích. Tất cả đều theo chương trình.
Các nhà phát triển sử dụng Cloudflare API cho:
- Hạ tầng dưới dạng mã (Terraform, Pulumi)
- Tích hợp đường ống CI/CD
- Quản lý đa vùng
- Cập nhật DNS tự động
- Triển khai Worker
Kiểm thử Cloudflare API với Apidog - miễn phí
Khi kết thúc hướng dẫn này, bạn sẽ có thể:
- Xác thực bằng mã thông báo Cloudflare API
- Quản lý vùng và bản ghi DNS
- Triển khai và quản lý Workers
- Cấu hình cài đặt bảo mật
- Kéo dữ liệu phân tích và nhật ký
Xác thực
Cloudflare cung cấp hai phương pháp xác thực. Hãy sử dụng mã thông báo API, không phải khóa toàn cục.
Phương pháp 1: Mã thông báo API (khuyên dùng)
Mã thông báo API được giới hạn trong các quyền cụ thể. Nếu một mã thông báo bị lộ, thiệt hại sẽ bị hạn chế.
Tạo mã thông báo:
- Truy cập Bảng điều khiển Cloudflare → Hồ sơ của tôi → Mã thông báo API
- Tạo mã thông báo
- Chọn một mẫu (Chỉnh sửa DNS vùng, triển khai Workers, v.v.) hoặc tùy chỉnh
- Đặt các vùng cụ thể hoặc tất cả các vùng
- Sao chép mã thông báo
Sử dụng mã thông báo:
curl -X GET "https://api.cloudflare.com/client/v4/user/tokens/verify" \
-H "Authorization: Bearer YOUR_API_TOKEN"
Phương pháp 2: Khóa API toàn cục (không khuyên dùng)
Khóa toàn cục có quyền truy cập đầy đủ vào tài khoản. Tránh sử dụng nó.
curl -X GET "https://api.cloudflare.com/client/v4/user" \
-H "X-Auth-Email: your-email@example.com" \
-H "X-Auth-Key: YOUR_GLOBAL_API_KEY"
Định dạng phản hồi
Tất cả các phản hồi của Cloudflare API đều tuân theo cấu trúc này:
{
"result": { ... },
"success": true,
"errors": [],
"messages": []
}
Luôn kiểm tra success trước khi xử lý result.
Quản lý vùng
Vùng đại diện cho các tên miền trong Cloudflare.
Liệt kê các vùng
curl -X GET "https://api.cloudflare.com/client/v4/zones" \
-H "Authorization: Bearer YOUR_API_TOKEN"
Phản hồi:
{
"result": [
{
"id": "023e105f4ecef8ad9ca31a8372d0c353",
"name": "example.com",
"status": "active",
"paused": false,
"type": "full",
"development_mode": 0,
"name_servers": [
"ns1.cloudflare.com",
"ns2.cloudflare.com"
],
"original_name_servers": [
"ns1.example.com"
],
"original_registrar": null
}
],
"success": true
}
Tạo một vùng
curl -X POST "https://api.cloudflare.com/client/v4/zones" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "newdomain.com",
"account": {
"id": "ACCOUNT_ID"
},
"type": "full"
}'
Lấy chi tiết vùng
curl -X GET "https://api.cloudflare.com/client/v4/zones/ZONE_ID" \
-H "Authorization: Bearer YOUR_API_TOKEN"
Quản lý bản ghi DNS
Bản ghi DNS ánh xạ tên miền tới địa chỉ IP và dịch vụ.
Liệt kê các bản ghi DNS
curl -X GET "https://api.cloudflare.com/client/v4/zones/ZONE_ID/dns_records" \
-H "Authorization: Bearer YOUR_API_TOKEN"
Tạo một bản ghi DNS
curl -X POST "https://api.cloudflare.com/client/v4/zones/ZONE_ID/dns_records" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"type": "A",
"name": "www",
"content": "192.0.2.1",
"ttl": 3600,
"proxied": true
}'
Các loại bản ghi:
A- Địa chỉ IPv4AAAA- Địa chỉ IPv6CNAME- Bí danh cho một tên miền khácMX- Máy chủ thư điện tửTXT- Bản ghi văn bản (SPF, DKIM, xác minh)NS- Máy chủ tên miền
Cập nhật một bản ghi DNS
curl -X PUT "https://api.cloudflare.com/client/v4/zones/ZONE_ID/dns_records/RECORD_ID" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"type": "A",
"name": "www",
"content": "192.0.2.2",
"ttl": 3600,
"proxied": true
}'
Xóa một bản ghi DNS
curl -X DELETE "https://api.cloudflare.com/client/v4/zones/ZONE_ID/dns_records/RECORD_ID" \
-H "Authorization: Bearer YOUR_API_TOKEN"
Cloudflare Workers
Workers chạy JavaScript ở biên, gần người dùng.
Liệt kê Workers
curl -X GET "https://api.cloudflare.com/client/v4/accounts/ACCOUNT_ID/workers/scripts" \
-H "Authorization: Bearer YOUR_API_TOKEN"
Tải lên một Worker
curl -X PUT "https://api.cloudflare.com/client/v4/accounts/ACCOUNT_ID/workers/scripts/my-worker" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/javascript" \
--data-binary @worker.js
Ví dụ về Worker:
export default {
async fetch(request, env, ctx) {
const url = new URL(request.url)
if (url.pathname === '/api/hello') {
return new Response(JSON.stringify({ message: 'Hello from the edge!' }), {
headers: { 'Content-Type': 'application/json' }
})
}
return fetch(request)
}
}
Liên kết một tuyến đường
curl -X POST "https://api.cloudflare.com/client/v4/zones/ZONE_ID/workers/routes" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"pattern": "example.com/api/*",
"script": "my-worker"
}'
Không gian tên Worker KV
Lưu trữ dữ liệu có thể truy cập từ Workers:
curl -X POST "https://api.cloudflare.com/client/v4/accounts/ACCOUNT_ID/storage/kv/namespaces" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"title": "my-kv-namespace"
}'
Bảo mật và WAF
Quy tắc trang
curl -X POST "https://api.cloudflare.com/client/v4/zones/ZONE_ID/pagerules" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"targets": [
{
"target": "url",
"constraint": {
"operator": "matches",
"value": "example.com/*"
}
}
],
"actions": [
{
"id": "ssl",
"value": "flexible"
},
{
"id": "cache_level",
"value": "aggressive"
}
]
}'
Quy tắc tường lửa
curl -X POST "https://api.cloudflare.com/client/v4/zones/ZONE_ID/firewall/rules" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"filter": {
"expression": "ip.geoip.country eq \"CN\"",
"paused": false
},
"action": "block",
"description": "Block traffic from China"
}'
Giới hạn tốc độ
curl -X POST "https://api.cloudflare.com/client/v4/zones/ZONE_ID/rate_limits" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"disabled": false,
"description": "Rate limit API endpoints",
"match": {
"request": {
"methods": ["POST"],
"url_pattern": "*/api/*"
}
},
"threshold": 100,
"period": 60,
"action": {
"mode": "ban",
"timeout": 600
}
}'
Phân tích và nhật ký
Phân tích vùng
curl -X GET "https://api.cloudflare.com/client/v4/zones/ZONE_ID/analytics/dashboard?since=-1440&continuous=true" \
-H "Authorization: Bearer YOUR_API_TOKEN"
Phản hồi:
{
"result": {
"totals": {
"requests": {
"all": 1000000,
"cached": 800000,
"uncached": 200000
},
"bandwidth": {
"all": 50000000000,
"cached": 40000000000
},
"threats": {
"all": 5000
},
"pageviews": {
"all": 250000
}
}
}
}
Nhật ký vùng (Logpush)
Bật Logpush để gửi nhật ký đến bộ nhớ của bạn:
curl -X POST "https://api.cloudflare.com/client/v4/zones/ZONE_ID/logpush/jobs" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "My Logpush Job",
"destination_conf": "s3://my-bucket/logs?region=us-east-1",
"dataset": "http_requests",
"logpull_options": "fields=ClientIP,ClientRequestPath,EdgeResponseStatus×tamps=rfc3339"
}'
Kiểm thử với Apidog
Các thay đổi của Cloudflare ảnh hưởng đến lưu lượng truy cập sản xuất. Hãy kiểm thử kỹ lưỡng.

1. Thiết lập môi trường
CLOUDFLARE_API_TOKEN: your_token
CLOUDFLARE_ACCOUNT_ID: abc123
ZONE_ID: xyz789
BASE_URL: https://api.cloudflare.com/client/v4
2. Xác thực phản hồi
pm.test('Request was successful', () => {
const response = pm.response.json()
pm.expect(response.success).to.be.true
pm.expect(response.errors).to.be.empty
})
pm.test('DNS record created correctly', () => {
const response = pm.response.json()
pm.expect(response.result.type).to.eql('A')
pm.expect(response.result.name).to.eql('www')
pm.expect(response.result.proxied).to.be.true
})
3. Kiểm thử triển khai Worker
Lưu tập lệnh Worker dưới dạng tệp trong Apidog và kiểm thử việc tải lên:
pm.test('Worker uploaded', () => {
const response = pm.response.json()
pm.expect(response.result.id).to.eql('my-worker')
})
Kiểm thử Cloudflare API với Apidog - miễn phí
Các lỗi thường gặp và cách khắc phục
403 Bị cấm
Nguyên nhân: Mã thông báo thiếu quyền cần thiết.
Cách khắc phục: Kiểm tra quyền của mã thông báo trong bảng điều khiển Cloudflare. Chỉnh sửa DNS cần Zone:DNS:Edit. Workers cần Account:Workers:Edit.
1003: Vùng không hợp lệ hoặc bị thiếu
Nguyên nhân: ID vùng không tồn tại hoặc mã thông báo không thể truy cập nó.
Cách khắc phục: Xác minh ID vùng trong URL và kiểm tra phạm vi mã thông báo bao gồm vùng này.
81057: Bản ghi đã tồn tại
Nguyên nhân: Bản ghi DNS với cùng tên và loại đã tồn tại.
Cách khắc phục: Sử dụng PUT để cập nhật thay vì POST để tạo, hoặc xóa trước.
Vượt quá giới hạn tốc độ
Nguyên nhân: Quá nhiều yêu cầu (mặc định 1200/5 phút).
Cách khắc phục: Thực hiện backoff và hoạt động theo lô.
async function updateRecords(records) {
for (const record of records) {
try {
await updateRecord(record)
await sleep(100) // Rate limit buffer
} catch (error) {
if (error.status === 429) {
await sleep(60000) // Wait a minute
await updateRecord(record) // Retry
}
}
}
}
Các lựa chọn thay thế và so sánh
| Tính năng | Cloudflare | AWS Route 53 | Fastly |
|---|---|---|---|
| API DNS | ✓ | ✓ | ✓ |
| API CDN | ✓ | API CloudFront | ✓ |
| Các hàm biên | Workers | Lambda@Edge | Compute@Edge |
| API WAF | ✓ | AWS WAF | ✓ |
| Gói miễn phí | Rộng rãi | Thanh toán theo mức sử dụng | Hạn chế |
| Định dạng phản hồi | JSON | XML/JSON | JSON |
API của Cloudflare được thống nhất hơn so với các dịch vụ phân mảnh của AWS. Workers cung cấp tính linh hoạt cao hơn Lambda@Edge.
Các trường hợp sử dụng thực tế
SaaS đa người thuê. Một nền tảng tự động tạo các vùng Cloudflare khi khách hàng thêm tên miền tùy chỉnh. Workers xử lý định tuyến, các bản ghi DNS được tạo thông qua API và chứng chỉ SSL được cấp phát tự động.
Triển khai Blue-green. Một nhóm kỹ sư sử dụng cập nhật bản ghi DNS để chuyển đổi lưu lượng truy cập giữa các môi trường. API cập nhật bản ghi A trong quá trình triển khai, với sự lan truyền tức thì qua mạng của Cloudflare.
Tự động hóa phản ứng DDoS. Một nhóm bảo mật giám sát lưu lượng truy cập thông qua API phân tích. Khi các mẫu tấn công xuất hiện, các quy tắc tường lửa được thêm vào thông qua API để chặn các IP độc hại, giảm thời gian phản ứng từ hàng giờ xuống còn vài giây.
Tổng kết
Đây là những gì bạn đã học được:
- Xác thực bằng mã thông báo API để truy cập có phạm vi
- Quản lý vùng và bản ghi DNS theo chương trình
- Triển khai Workers cho điện toán biên
- Cấu hình bảo mật bằng quy tắc tường lửa và giới hạn tốc độ
- Kéo dữ liệu phân tích và cấu hình gửi nhật ký
- Kiểm thử với Apidog trước khi áp dụng vào sản xuất
Câu hỏi thường gặp
Sự khác biệt giữa vùng (zone) và tên miền (domain) là gì?Một vùng là cách Cloudflare biểu diễn một tên miền. Khi bạn thêm một tên miền vào Cloudflare, bạn tạo một vùng. ID vùng được sử dụng trong các cuộc gọi API cho tên miền đó.
Làm cách nào để tìm ID vùng của tôi?Truy cập Bảng điều khiển Cloudflare → chọn tên miền của bạn → Tổng quan → cuộn xuống phần API. ID vùng được hiển thị ở đó.
Tôi có thể sử dụng Cloudflare API mà không cần gói trả phí không?Có. Hầu hết các tính năng API hoạt động trên các gói miễn phí. Workers có một gói miễn phí hào phóng. Một số tính năng nâng cao (quy tắc WAF nâng cao, Logpush) yêu cầu gói trả phí.
Các thay đổi DNS mất bao lâu?Các thay đổi thông qua API là tức thì trong hệ thống của Cloudflare. Sự lan truyền đến máy chủ tên miền của Cloudflare mất vài giây. Sự lan truyền toàn cầu phụ thuộc vào TTL và các trình phân giải đệ quy, thường là vài phút.
Giới hạn tốc độ là bao nhiêu?Mặc định: 1200 yêu cầu mỗi 5 phút cho mỗi mã thông báo. Kiểm tra tiêu đề X-RateLimit-Remaining. Các gói Enterprise có giới hạn cao hơn.
Tôi có thể quản lý nhiều tài khoản bằng một mã thông báo không?Không. Mã thông báo được giới hạn cho một tài khoản. Đối với nhiều tài khoản, hãy tạo các mã thông báo riêng biệt hoặc sử dụng các mã thông báo cấp người dùng có quyền truy cập vào nhiều tài khoản.
Workers khác gì so với Lambda?Workers chạy ở các vị trí biên của Cloudflare (hơn 300 thành phố), không ở các khu vực cụ thể. Thời gian khởi động lạnh là tối thiểu. Chúng lý tưởng cho việc thao tác yêu cầu/phản hồi, không phải các tiến trình chạy dài.
Tôi có thể sử dụng API để xóa bộ nhớ đệm không?Có:
curl -X POST "https://api.cloudflare.com/client/v4/zones/ZONE_ID/purge_cache" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"files": ["https://example.com/style.css"]
}'
