Forem

Cover image for วิธีใช้ Cloudflare API
Thanawat Wongchai
Thanawat Wongchai

Posted on • Originally published at apidog.com

วิธีใช้ Cloudflare API

สรุปโดยย่อ

Cloudflare API ช่วยให้คุณจัดการ DNS, โซน (zones), Workers, ความปลอดภัย และการวิเคราะห์ด้วยโปรแกรมได้ คุณสามารถยืนยันตัวตนด้วย API token (แนะนำ) หรือ global key, เรียกใช้ api.cloudflare.com/client/v4 และจัดการอัตราการจำกัดการใช้งานได้อย่างเหมาะสม สำหรับการทดสอบ ให้ใช้ Apidog เพื่อตรวจสอบความถูกต้องของการเปลี่ยนแปลง DNS, ทดสอบการใช้งาน Worker และตั้งค่าอัตโนมัติในสภาพแวดล้อมต่างๆ

ทดลองใช้ Apidog วันนี้

บทนำ

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:

  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"
Enter fullscreen mode Exit fullscreen mode

วิธีที่ 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"
Enter fullscreen mode Exit fullscreen mode

รูปแบบการตอบกลับ

การตอบกลับของ Cloudflare API ทั้งหมดมีโครงสร้างดังนี้:

{
  "result": { ... },
  "success": true,
  "errors": [],
  "messages": []
}
Enter fullscreen mode Exit fullscreen mode

ตรวจสอบ success เสมอก่อนที่จะประมวลผล result

การจัดการโซน (Zone management)

โซน (Zones) แสดงถึงโดเมนใน Cloudflare

แสดงรายการโซน (List zones)

curl -X GET "https://api.cloudflare.com/client/v4/zones" \
  -H "Authorization: Bearer YOUR_API_TOKEN"
Enter fullscreen mode Exit fullscreen mode

การตอบกลับ:

{
  "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
}
Enter fullscreen mode Exit fullscreen mode

สร้างโซน (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"
  }'
Enter fullscreen mode Exit fullscreen mode

ดูรายละเอียดโซน (Get zone details)

curl -X GET "https://api.cloudflare.com/client/v4/zones/ZONE_ID" \
  -H "Authorization: Bearer YOUR_API_TOKEN"
Enter fullscreen mode Exit fullscreen mode

การจัดการระเบียน DNS

ระเบียน DNS จะจับคู่ชื่อโดเมนกับที่อยู่ IP และบริการต่างๆ

แสดงรายการระเบียน DNS

curl -X GET "https://api.cloudflare.com/client/v4/zones/ZONE_ID/dns_records" \
  -H "Authorization: Bearer YOUR_API_TOKEN"
Enter fullscreen mode Exit fullscreen mode

สร้างระเบียน 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
  }'
Enter fullscreen mode Exit fullscreen mode

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

  • 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
  }'
Enter fullscreen mode Exit fullscreen mode

ลบระเบียน DNS

curl -X DELETE "https://api.cloudflare.com/client/v4/zones/ZONE_ID/dns_records/RECORD_ID" \
  -H "Authorization: Bearer YOUR_API_TOKEN"
Enter fullscreen mode Exit fullscreen mode

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"
Enter fullscreen mode Exit fullscreen mode

อัปโหลด 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
Enter fullscreen mode Exit fullscreen mode

ตัวอย่าง 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)
  }
}
Enter fullscreen mode Exit fullscreen mode

ผูกเส้นทาง (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"
  }'
Enter fullscreen mode Exit fullscreen mode

เนมสเปซ 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"
  }'
Enter fullscreen mode Exit fullscreen mode

ความปลอดภัยและ 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"
      }
    ]
  }'
Enter fullscreen mode Exit fullscreen mode

กฎไฟร์วอลล์

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"
  }'
Enter fullscreen mode Exit fullscreen mode

การจำกัดอัตราการใช้งาน (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
    }
  }'
Enter fullscreen mode Exit fullscreen mode

การวิเคราะห์และบันทึก (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"
Enter fullscreen mode Exit fullscreen mode

การตอบกลับ:

{
  "result": {
    "totals": {
      "requests": {
        "all": 1000000,
        "cached": 800000,
        "uncached": 200000
      },
      "bandwidth": {
        "all": 50000000000,
        "cached": 40000000000
      },
      "threats": {
        "all": 5000
      },
      "pageviews": {
        "all": 250000
      }
    }
  }
}
Enter fullscreen mode Exit fullscreen mode

บันทึกโซน (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"
  }'
Enter fullscreen mode Exit fullscreen mode

การทดสอบด้วย Apidog

การเปลี่ยนแปลงใน Cloudflare มีผลต่อปริมาณการใช้งานจริง ควรทดสอบอย่างละเอียด

ทดสอบ Cloudflare API ด้วย Apidog

1. การตั้งค่าสภาพแวดล้อม

CLOUDFLARE_API_TOKEN: your_token
CLOUDFLARE_ACCOUNT_ID: abc123
ZONE_ID: xyz789
BASE_URL: https://api.cloudflare.com/client/v4
Enter fullscreen mode Exit fullscreen mode

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
})
Enter fullscreen mode Exit fullscreen mode

3. ทดสอบการปรับใช้ Worker

บันทึกสคริปต์ Worker เป็นไฟล์ใน Apidog และทดสอบการอัปโหลด:

pm.test('Worker uploaded', () => {
  const response = pm.response.json()
  pm.expect(response.result.id).to.eql('my-worker')
})
Enter fullscreen mode Exit fullscreen mode

ทดสอบ 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
      }
    }
  }
}
Enter fullscreen mode Exit fullscreen mode

ทางเลือกและการเปรียบเทียบ

คุณสมบัติ 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"]
  }'
Enter fullscreen mode Exit fullscreen mode

Top comments (0)