วิธีใช้ Cloudflare API

Ashley Innocent

Ashley Innocent

24 March 2026

วิธีใช้ Cloudflare API

สรุปโดยย่อ

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 สำหรับ:

💡
หากคุณกำลังพัฒนาบน Cloudflare, Apidog จะช่วยคุณทดสอบการเรียกใช้ API, ตรวจสอบการตอบกลับ และจัดทำเอกสารการผสานรวมของคุณ คุณสามารถบันทึกการตั้งค่าโซน (zone configurations) เป็นคำขอที่นำกลับมาใช้ใหม่ได้ และแบ่งปันกับทีมของคุณ
button

ทดสอบ Cloudflare API ด้วย Apidog - ฟรี

เมื่อสิ้นสุดคู่มือนี้ คุณจะสามารถ:

การยืนยันตัวตน

Cloudflare มีวิธีการยืนยันตัวตนสองแบบ ใช้ API token แทน global key

วิธีที่ 1: API token (แนะนำ)

API token มีขอบเขตจำกัดตามสิทธิ์ที่ระบุ หาก token ถูกบุกรุก ความเสียหายจะถูกจำกัด

สร้าง token:

  1. ไปที่ Cloudflare Dashboard → My Profile → API Tokens
  2. สร้าง Token
  3. เลือกเทมเพลต (แก้ไข DNS ของโซน, ปรับใช้ Workers ฯลฯ) หรือกำหนดเอง
  4. ตั้งค่าสำหรับโซนที่เจาะจง หรือทุกโซน
  5. คัดลอก 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
  }'

ประเภทระเบียน:

อัปเดตระเบียน 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&timestamps=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 ที่เป็นอันตราย ซึ่งช่วยลดเวลาตอบสนองจากหลายชั่วโมงเหลือเพียงไม่กี่วินาที

สรุป

สิ่งที่คุณได้เรียนรู้:

button

คำถามที่พบบ่อย (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 เพื่อล้างแคชได้หรือไม่? ได้:

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"]
  }'

ฝึกการออกแบบ API แบบ Design-first ใน Apidog

ค้นพบวิธีที่ง่ายขึ้นในการสร้างและใช้ API