สรุปโดยย่อ
Cloudflare API ช่วยให้คุณจัดการ DNS, โซน (zones), Workers, ความปลอดภัย และการวิเคราะห์ด้วยโปรแกรมได้ คุณสามารถยืนยันตัวตนด้วย API token (แนะนำ) หรือ global key, เรียกใช้ api.cloudflare.com/client/v4 และจัดการอัตราการจำกัดการใช้งานได้อย่างเหมาะสม สำหรับการทดสอบ ให้ใช้ Apidog เพื่อตรวจสอบความถูกต้องของการเปลี่ยนแปลง DNS, ทดสอบการใช้งาน Worker และตั้งค่าอัตโนมัติในสภาพแวดล้อมต่างๆ
บทนำ
Cloudflare เป็นบริการที่อยู่หน้าเว็บไซต์นับล้านเว็บไซต์ มีหน้าที่จัดการ DNS, CDN, การป้องกัน DDoS, WAF, ฟังก์ชัน Worker แบบ Serverless และอื่นๆ การจัดการทั้งหมดผ่านแดชบอร์ดเหมาะสำหรับการตั้งค่าขนาดเล็ก แต่เมื่อถึงระดับที่ใหญ่ขึ้น คุณจำเป็นต้องใช้ระบบอัตโนมัติ
Cloudflare API ครอบคลุมทุกสิ่งที่แดชบอร์ดสามารถทำได้ คุณสามารถสร้างโซน (zones), อัปเดตระเบียน DNS, กำหนดค่า Page Rule, ปรับใช้ Workers, จัดการการตั้งค่า SSL และดึงข้อมูลการวิเคราะห์ ทั้งหมดนี้สามารถทำได้ด้วยโปรแกรม
นักพัฒนาใช้ Cloudflare API สำหรับ:
- โครงสร้างพื้นฐานในรูปแบบโค้ด (Terraform, Pulumi)
- การผสานรวม CI/CD pipeline
- การจัดการหลายโซน (Multi-zone management)
- การอัปเดต DNS อัตโนมัติ
- การปรับใช้ Worker
💡 หากคุณกำลังพัฒนาบน Cloudflare, Apidog จะช่วยคุณทดสอบการเรียกใช้ API, ตรวจสอบการตอบกลับ และจัดทำเอกสารการผสานรวมของคุณ คุณสามารถบันทึกการตั้งค่าโซน (zone configurations) เป็นคำขอที่นำกลับมาใช้ใหม่ได้ และแบ่งปันกับทีมของคุณ
ทดสอบ Cloudflare API ด้วย Apidog - ฟรี
เมื่อสิ้นสุดคู่มือนี้ คุณจะสามารถ:
- ยืนยันตัวตนด้วย Cloudflare API token
- จัดการโซน (zones) และระเบียน DNS
- ปรับใช้และจัดการ Workers
- กำหนดการตั้งค่าความปลอดภัย
- ดึงข้อมูลการวิเคราะห์และบันทึก (logs)
การยืนยันตัวตน
Cloudflare มีวิธีการยืนยันตัวตนสองแบบ ใช้ API token แทน global key
วิธีที่ 1: API token (แนะนำ)
API token มีขอบเขตจำกัดตามสิทธิ์ที่ระบุ หาก token ถูกบุกรุก ความเสียหายจะถูกจำกัด
สร้าง token:
- ไปที่ Cloudflare Dashboard → My Profile → API Tokens
- สร้าง Token
- เลือกเทมเพลต (แก้ไข DNS ของโซน, ปรับใช้ Workers ฯลฯ) หรือกำหนดเอง
- ตั้งค่าสำหรับโซนที่เจาะจง หรือทุกโซน
- คัดลอก token
ใช้ token:
curl -X GET "https://api.cloudflare.com/client/v4/user/tokens/verify" \
-H "Authorization: Bearer YOUR_API_TOKEN"
วิธีที่ 2: Global API key (ไม่แนะนำ)
Global key มีสิทธิ์เข้าถึงบัญชีได้อย่างสมบูรณ์ หลีกเลี่ยงการใช้งาน
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"
รูปแบบการตอบกลับ
การตอบกลับของ Cloudflare API ทั้งหมดมีโครงสร้างดังนี้:
{
"result": { ... },
"success": true,
"errors": [],
"messages": []
}
ตรวจสอบ success เสมอก่อนที่จะประมวลผล result
การจัดการโซน (Zone management)
โซน (Zones) แสดงถึงโดเมนใน Cloudflare
แสดงรายการโซน (List zones)
curl -X GET "https://api.cloudflare.com/client/v4/zones" \
-H "Authorization: Bearer YOUR_API_TOKEN"
การตอบกลับ:
{
"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
}
สร้างโซน (Create a zone)
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"
}'
ดูรายละเอียดโซน (Get zone details)
curl -X GET "https://api.cloudflare.com/client/v4/zones/ZONE_ID" \
-H "Authorization: Bearer YOUR_API_TOKEN"
การจัดการระเบียน DNS
ระเบียน DNS จะจับคู่ชื่อโดเมนกับที่อยู่ IP และบริการต่างๆ
แสดงรายการระเบียน DNS
curl -X GET "https://api.cloudflare.com/client/v4/zones/ZONE_ID/dns_records" \
-H "Authorization: Bearer YOUR_API_TOKEN"
สร้างระเบียน 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
}'
ประเภทระเบียน:
-
A- ที่อยู่ IPv4 -
AAAA- ที่อยู่ IPv6 -
CNAME- นามแฝงไปยังโดเมนอื่น -
MX- เซิร์ฟเวอร์อีเมล -
TXT- ระเบียนข้อความ (SPF, DKIM, การยืนยัน) -
NS- เนมเซิร์ฟเวอร์
อัปเดตระเบียน 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
}'
ลบระเบียน 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 รันโค้ด JavaScript ที่ Edge ใกล้กับผู้ใช้งาน
แสดงรายการ Workers
curl -X GET "https://api.cloudflare.com/client/v4/accounts/ACCOUNT_ID/workers/scripts" \
-H "Authorization: Bearer YOUR_API_TOKEN"
อัปโหลด 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
ตัวอย่าง 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)
}
}
ผูกเส้นทาง (Bind a route)
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"
}'
เนมสเปซ Worker KV
จัดเก็บข้อมูลที่ Worker สามารถเข้าถึงได้:
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"
}'
ความปลอดภัยและ WAF
Page Rule
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"
}
]
}'
กฎไฟร์วอลล์
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"
}'
การจำกัดอัตราการใช้งาน (Rate limiting)
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
}
}'
การวิเคราะห์และบันทึก (Logs)
การวิเคราะห์โซน (Zone analytics)
curl -X GET "https://api.cloudflare.com/client/v4/zones/ZONE_ID/analytics/dashboard?since=-1440&continuous=true" \
-H "Authorization: Bearer YOUR_API_TOKEN"
การตอบกลับ:
{
"result": {
"totals": {
"requests": {
"all": 1000000,
"cached": 800000,
"uncached": 200000
},
"bandwidth": {
"all": 50000000000,
"cached": 40000000000
},
"threats": {
"all": 5000
},
"pageviews": {
"all": 250000
}
}
}
}
บันทึกโซน (Logpush)
เปิดใช้งาน Logpush เพื่อส่งบันทึกไปยังที่เก็บข้อมูลของคุณ:
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"
}'
การทดสอบด้วย Apidog
การเปลี่ยนแปลงใน Cloudflare มีผลต่อปริมาณการใช้งานจริง ควรทดสอบอย่างละเอียด
1. การตั้งค่าสภาพแวดล้อม
CLOUDFLARE_API_TOKEN: your_token
CLOUDFLARE_ACCOUNT_ID: abc123
ZONE_ID: xyz789
BASE_URL: https://api.cloudflare.com/client/v4
2. ตรวจสอบการตอบกลับ
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. ทดสอบการปรับใช้ Worker
บันทึกสคริปต์ Worker เป็นไฟล์ใน Apidog และทดสอบการอัปโหลด:
pm.test('Worker uploaded', () => {
const response = pm.response.json()
pm.expect(response.result.id).to.eql('my-worker')
})
ทดสอบ Cloudflare API ด้วย Apidog - ฟรี
ข้อผิดพลาดและการแก้ไขที่พบบ่อย
403 Forbidden
สาเหตุ: Token ไม่มีสิทธิ์ที่จำเป็น
การแก้ไข: ตรวจสอบสิทธิ์ของ token ใน Cloudflare dashboard การแก้ไข DNS ต้องการ Zone:DNS:Edit Workers ต้องการ Account:Workers:Edit
1003: โซนไม่ถูกต้องหรือไม่มี
สาเหตุ: Zone ID ไม่มีอยู่จริง หรือ token ไม่สามารถเข้าถึงได้
การแก้ไข: ตรวจสอบ Zone ID ใน URL และตรวจสอบขอบเขตของ token ว่าครอบคลุมโซนนี้หรือไม่
81057: ระเบียนมีอยู่แล้ว
สาเหตุ: มีระเบียน DNS ที่มีชื่อและประเภทเดียวกันอยู่แล้ว
การแก้ไข: ใช้ PUT เพื่ออัปเดตแทน POST สำหรับการสร้าง หรือลบออกก่อน
เกินขีดจำกัดอัตราการใช้งาน
สาเหตุ: มีคำขอมากเกินไป (ค่าเริ่มต้น 1200 ครั้ง/5 นาที)
การแก้ไข: ใช้งานกลไก Backoff และการทำงานแบบกลุ่ม
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
}
}
}
}
ทางเลือกและการเปรียบเทียบ
| คุณสมบัติ | Cloudflare | AWS Route 53 | Fastly |
|---|---|---|---|
| DNS API | ✓ | ✓ | ✓ |
| CDN API | ✓ | CloudFront API | ✓ |
| ฟังก์ชัน Edge | Workers | Lambda@Edge | Compute@Edge |
| WAF API | ✓ | AWS WAF | ✓ |
| แผนฟรี | มากมาย | จ่ายตามการใช้งาน | จำกัด |
| รูปแบบการตอบกลับ | JSON | XML/JSON | JSON |
Cloudflare API มีความเป็นหนึ่งเดียวกันมากกว่าบริการที่แยกส่วนของ AWS Workers ให้ความยืดหยุ่นมากกว่า Lambda@Edge
กรณีการใช้งานจริง
SaaS แบบ Multi-tenant:
แพลตฟอร์มจะสร้างโซน Cloudflare โดยอัตโนมัติเมื่อลูกค้าเพิ่มโดเมนที่กำหนดเอง Workers จะจัดการการกำหนดเส้นทาง, ระเบียน DNS จะถูกสร้างผ่าน API และใบรับรอง SSL จะถูกจัดเตรียมโดยอัตโนมัติ
การปรับใช้แบบ Blue-green:
ทีมวิศวกรใช้การอัปเดตระเบียน DNS เพื่อสลับปริมาณการใช้งานระหว่างสภาพแวดล้อม API จะอัปเดตระเบียน A ระหว่างการปรับใช้ โดยมีการเผยแพร่ทันทีผ่านเครือข่ายของ Cloudflare
ระบบตอบโต้ DDoS อัตโนมัติ:
ทีมรักษาความปลอดภัยจะตรวจสอบปริมาณการใช้งานผ่าน Analytics API เมื่อมีรูปแบบการโจมตีเกิดขึ้น กฎไฟร์วอลล์จะถูกเพิ่มผ่าน API เพื่อบล็อก IP ที่เป็นอันตราย ซึ่งช่วยลดเวลาตอบสนองจากหลายชั่วโมงเหลือเพียงไม่กี่วินาที
สรุป
สิ่งที่คุณได้เรียนรู้:
- ยืนยันตัวตนด้วย API token เพื่อเข้าถึงตามขอบเขตที่จำกัด
- จัดการโซน (zones) และระเบียน DNS ด้วยโปรแกรม
- ปรับใช้ Workers สำหรับ Edge computing
- กำหนดค่าความปลอดภัยด้วยกฎไฟร์วอลล์และการจำกัดอัตราการใช้งาน
- ดึงข้อมูลการวิเคราะห์และกำหนดค่าการส่งบันทึก (log shipping)
- ทดสอบด้วย Apidog ก่อนนำไปใช้ใน Production
คำถามที่พบบ่อย (FAQ)
ความแตกต่างระหว่างโซน (zone) กับโดเมนคืออะไร?
โซน (zone) คือการแสดงโดเมนใน Cloudflare เมื่อคุณเพิ่มโดเมนไปยัง Cloudflare คุณจะสร้างโซนขึ้นมา Zone ID จะถูกใช้ในการเรียก API สำหรับโดเมนนั้นๆ
ฉันจะหา Zone ID ของฉันได้อย่างไร?
ไปที่ Cloudflare Dashboard → เลือกโดเมนของคุณ → Overview → เลื่อนลงไปที่ส่วน API Zone ID จะแสดงอยู่ที่นั่น
ฉันสามารถใช้ Cloudflare API โดยไม่มีแผนแบบชำระเงินได้หรือไม่?
ได้ คุณสมบัติ API ส่วนใหญ่ใช้งานได้กับแผนฟรี Workers มีแผนฟรีที่ใจกว้าง คุณสมบัติขั้นสูงบางอย่าง (กฎ WAF ขั้นสูง, Logpush) จำเป็นต้องใช้แผนแบบชำระเงิน
การเปลี่ยนแปลง DNS ใช้เวลานานแค่ไหน?
การเปลี่ยนแปลงผ่าน API จะเกิดขึ้นทันทีในระบบของ Cloudflare การเผยแพร่ไปยัง Cloudflare nameserver ใช้เวลาไม่กี่วินาที การเผยแพร่ทั่วโลกขึ้นอยู่กับ TTL และ Recursive Resolver โดยปกติแล้วจะใช้เวลาไม่กี่นาที
การจำกัดอัตราการใช้งานคืออะไร?
ค่าเริ่มต้น: 1200 คำขอต่อ 5 นาทีต่อ token ตรวจสอบส่วนหัว X-RateLimit-Remaining แผน Enterprise มีขีดจำกัดที่สูงกว่า
ฉันสามารถจัดการหลายบัญชีด้วย token เดียวได้หรือไม่?
ไม่ได้ Token ถูกจำกัดขอบเขตสำหรับหนึ่งบัญชีเท่านั้น สำหรับหลายบัญชี ให้สร้าง token แยกต่างหาก หรือใช้ token ระดับผู้ใช้ที่สามารถเข้าถึงหลายบัญชีได้
Workers แตกต่างจาก Lambda อย่างไร?
Workers ทำงานที่ Edge locations ของ Cloudflare (กว่า 300 เมือง) ไม่ใช่ในภูมิภาคเฉพาะ Cold start มีน้อยมาก เหมาะสำหรับการจัดการคำขอ/การตอบกลับ ไม่ใช่สำหรับกระบวนการที่ทำงานยาวนาน
ฉันสามารถใช้ API เพื่อล้างแคชได้หรือไม่?
ได้:
bash
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)