Tóm tắt
Cloudflare API cung cấp quyền kiểm soát tự động cho DNS, vùng, Workers, bảo mật và phân tích. Bạn có thể xác thực bằng mã thông báo API (nên dùng) hoặc khóa toàn cục, gửi yêu cầu tới api.cloudflare.com/client/v4, và linh hoạt xử lý giới hạn tốc độ. Để kiểm thử nhanh, hãy dùng Apidog xác thực thay đổi DNS, thử triển khai Worker, và tự động hóa cấu hình trên nhiều môi trường.
Giới thiệu
Cloudflare bảo vệ và tăng tốc hàng triệu website, xử lý DNS, CDN, DDoS, WAF, serverless Workers, v.v. Nếu bạn làm việc ở quy mô lớn, hãy tự động hóa việc quản lý thay vì thao tác thủ công trên dashboard.
Cloudflare API cho phép bạn:
- Tạo vùng, quản lý bản ghi DNS, cấu hình quy tắc trang, triển khai Workers, quản lý SSL, lấy dữ liệu phân tích—all theo lập trình.
- Các trường hợp sử dụng: IaC (Terraform, Pulumi), tích hợp CI/CD, quản lý đa vùng, cập nhật DNS tự động, triển khai Workers.
💡 Nếu bạn tự động hóa với Cloudflare, Apidog giúp kiểm thử API, xác thực phản hồi và tài liệu hóa tích hợp. Lưu cấu hình vùng thành các request có thể tái sử dụng, chia sẻ với đội nhóm.
Kiểm thử Cloudflare API với Apidog - miễn phí.
Bạn sẽ thực hiện được:
- 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 bảo mật
- Lấy phân tích và nhật ký
Xác thực
Cloudflare hỗ trợ hai cách xác thực. Nên sử dụng mã thông báo API để hạn chế quyền truy cập.
Phương pháp 1: Mã thông báo API (khuyên dùng)
Tạo mã thông báo:
- Đăng nhập Cloudflare Dashboard → Hồ sơ của tôi → Mã thông báo API
- Nhấn tạo mã thông báo
- Chọn mẫu sẵn (chỉnh sửa DNS, triển khai Workers,…) hoặc tự cấu hình quyền
- Chọn vùng cụ thể hoặc tất 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 toàn bộ tài khoản, nên tránh dùng.
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ả Cloudflare API trả về theo cấu trúc:
{
"result": { ... },
"success": true,
"errors": [],
"messages": []
}
Luôn kiểm tra trường success trước khi thao tác với result.
Quản lý vùng
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
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 phổ biến:
-
A- IPv4 -
AAAA- IPv6 -
CNAME- Alias -
MX- Email -
TXT- Văn bản (SPF, DKIM, xác minh) -
NS- Name server
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
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ụ 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 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 log tới storage 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 Cloudflare tác động trực tiếp lên môi trường production—bắt buộc kiểm thử kỹ.
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 script Worker thành file trong Apidog, kiểm thử upload:
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: Thiếu quyền cho mã thông báo.
Khắc phục: Kiểm tra quyền của token trên dashboard. 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: Sai ID vùng hoặc token không có quyền với vùng đó.
Khắc phục: Kiểm tra lại ID vùng trong URL và phạm vi token.
81057: Bản ghi đã tồn tại
Nguyên nhân: Bản ghi DNS cùng tên/loại đã tồn tại.
Khắc phục: Dùng PUT để cập nhật hoặc xóa bản ghi trước khi tạo mới.
Vượt quá giới hạn tốc độ
Nguyên nhân: Quá nhiều request (mặc định 1200/5 phút).
Khắc phục: Thực hiện backoff và batch request.
async function updateRecords(records) {
for (const record of records) {
try {
await updateRecord(record)
await sleep(100) // Thêm delay
} catch (error) {
if (error.status === 429) {
await sleep(60000) // Đợi 1 phút rồi thử lại
await updateRecord(record)
}
}
}
}
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 |
Cloudflare API có giao diện thống nhất hơn so với AWS, và Workers linh hoạt hơn Lambda@Edge.
Các trường hợp sử dụng thực tế
- SaaS đa tenant: Tự động tạo vùng khi khách thêm domain tùy chỉnh. Workers định tuyến, API tạo bản ghi DNS, cấp phát SSL tự động.
- Triển khai Blue-green: Cập nhật bản ghi DNS chuyển hướng lưu lượng giữa các môi trường. API cập nhật A record, propagation gần như tức thì.
- Tự động hóa phản ứng DDoS: Theo dõi traffic qua API phân tích, phát hiện tấn công thì thêm rule firewall để block IP độc hại, giảm thời gian phản ứng.
Tổng kết
Bạn đã nắm được:
- Xác thực bằng mã thông báo API truy cập có kiểm soát
- Quản lý vùng, bản ghi DNS qua API
- Triển khai Workers cho điện toán biên
- Cấu hình bảo mật (firewall rule, rate limit)
- Lấy dữ liệu phân tích, gửi nhật ký
- Kiểm thử với Apidog trước khi áp dụng vào production
Câu hỏi thường gặp
Sự khác biệt giữa vùng (zone) và tên miền (domain)?
Vùng là cách Cloudflare biểu diễn một tên miền. Thêm domain vào Cloudflare sẽ tạo vùng tương ứng. ID vùng dùng trong API.
Tìm ID vùng ở đâu?
Dashboard Cloudflare → chọn domain → Tổng quan → kéo xuống phần API, sẽ thấy ID vùng.
Có thể dùng Cloudflare API với gói miễn phí không?
Có. Hầu hết API đều hoạt động trên gói miễn phí. Workers có gói miễn phí hào phóng. Một số (WAF nâng cao, Logpush) cần trả phí.
DNS thay đổi qua API mất bao lâu?
Thay đổi có hiệu lực tức thì ở Cloudflare. Lan truyền đến DNS toàn cầu phụ thuộc TTL, thường vài phút.
Giới hạn tốc độ mặc định?
1200 yêu cầu/5 phút/mã thông báo. Kiểm tra header X-RateLimit-Remaining. Gói Enterprise có limit cao hơn.
Có thể quản lý nhiều tài khoản bằng một mã thông báo không?
Không. Token chỉ dùng cho một tài khoản. Muốn đa tài khoản, tạo token riêng hoặc dùng token cấp user có quyền nhiều tài khoản.
Workers khác gì Lambda?
Workers chạy ở biên (hơn 300 thành phố), không theo vùng cụ thể; cold start rất nhỏ; phù hợp thao tác request/response, không chạy lâu dài.
Dùng API xóa cache được 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"]
}'

Top comments (0)