Forem

Cover image for Cara Menggunakan API Cloudflare
Walse
Walse

Posted on • Originally published at apidog.com

Cara Menggunakan API Cloudflare

TL;DR

API Cloudflare memungkinkan Anda mengelola DNS, zona, Workers, keamanan, dan analitik secara terprogram. Otentikasi dengan token API (direkomendasikan) atau kunci global, panggil api.cloudflare.com/client/v4, dan tangani batas laju dengan baik. Untuk pengujian, gunakan Apidog untuk memvalidasi perubahan DNS, menguji penyebaran Worker, dan mengotomatiskan konfigurasi di berbagai lingkungan.

Coba Apidog hari ini

Pendahuluan

Cloudflare mengelola DNS, CDN, perlindungan DDoS, WAF, hingga Workers untuk jutaan website. Untuk proyek skala besar, otomatisasi pengelolaan sangat penting.

API Cloudflare menawarkan semua fungsi yang ada di dasbor: membuat zona, memperbarui DNS, mengonfigurasi aturan halaman, penyebaran Workers, pengaturan SSL, hingga analitik. Semua dapat dilakukan secara otomatis.

Contoh implementasi API Cloudflare:

  • Infrastruktur sebagai kode (Terraform, Pulumi)
  • Integrasi pipeline CI/CD
  • Manajemen multi-zona
  • Pembaruan DNS otomatis
  • Penyebaran Worker

💡 Jika Anda membangun di Cloudflare, Apidog membantu menguji panggilan API, memvalidasi respons, dan mendokumentasikan integrasi Anda. Simpan konfigurasi zona sebagai permintaan reusable, bagikan dengan tim.

Uji API Cloudflare dengan Apidog - gratis

Di akhir panduan ini, Anda akan mampu:

  • Otentikasi dengan token API Cloudflare
  • Mengelola zona dan catatan DNS
  • Menyebarkan dan mengelola Workers
  • Mengonfigurasi pengaturan keamanan
  • Menarik analitik dan log

Otentikasi

Cloudflare menyediakan dua metode autentikasi. Rekomendasi: pakai token API, jangan kunci global.

Metode 1: Token API (direkomendasikan)

Token API memiliki cakupan izin spesifik. Jika token bocor, dampaknya terbatas.

Langkah membuat token:

  1. Masuk ke Dasbor Cloudflare → Profil Saya → Token API
  2. Buat Token
  3. Pilih template (misal: Edit DNS zona, penyebaran Workers) atau kustom
  4. Pilih zona tertentu atau semua zona
  5. Salin token

Contoh penggunaan 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

Metode 2: Kunci API Global (tidak direkomendasikan)

Kunci global punya akses penuh ke akun. Hindari kecuali benar-benar diperlukan.

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

Format respons

Semua respons API Cloudflare:

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

Selalu cek nilai success sebelum memproses result.

Manajemen Zona

Zona = domain di Cloudflare.

Daftar zona

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

Contoh respons:

{
  "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

Buat zona

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

Dapatkan detail zona

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

Manajemen Catatan DNS

Catatan DNS = pemetaan domain ke IP/layanan.

Daftar catatan 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

Buat catatan 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

Tipe catatan yang didukung:

  • A - IPv4
  • AAAA - IPv6
  • CNAME - Alias
  • MX - Mail
  • TXT - Teks (SPF, DKIM, verifikasi)
  • NS - Name server

Perbarui catatan 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

Hapus catatan 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 = menjalankan JavaScript di edge.

Daftar 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

Unggah 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

Contoh skrip 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

Ikatan rute

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

Namespace KV Worker

Simpan data persistensi untuk 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

Keamanan dan WAF

Aturan halaman

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

Aturan firewall

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

Pembatasan laju (rate limit)

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

Analitik dan Log

Analitik zona

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

Contoh respons:

{
  "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

Log zona (Logpush)

Aktifkan Logpush untuk streaming log ke storage eksternal:

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

Pengujian dengan Apidog

Setiap perubahan di Cloudflare berdampak ke lalu lintas produksi. Selalu uji perubahan Anda dengan Apidog sebelum deploy.

Pengujian dengan Apidog

1. Pengaturan lingkungan

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. Validasi respons

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. Uji penyebaran Worker

Simpan skrip Worker sebagai file di Apidog lalu uji upload-nya:

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

Uji API Cloudflare dengan Apidog - gratis


Kesalahan Umum dan Perbaikan

403 Terlarang

Penyebab: Token kurang izin.

Solusi: Periksa izin token di dasbor Cloudflare. Edit DNS butuh Zone:DNS:Edit. Workers butuh Account:Workers:Edit.

1003: Zona tidak valid atau tidak ada

Penyebab: ID zona salah atau token tidak memiliki akses.

Solusi: Verifikasi ID zona di URL dan cakupan token.

81057: Catatan sudah ada

Penyebab: Catatan DNS dengan nama + tipe sama sudah ada.

Solusi: Gunakan PUT untuk update, POST hanya untuk membuat baru, atau hapus catatan dulu.

Batas laju terlampaui

Penyebab: Terlalu banyak request (default 1200/5 menit).

Solusi: Tambahkan delay dan batching.

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) // Tunggu 1 menit lalu retry
        await updateRecord(record)
      }
    }
  }
}
Enter fullscreen mode Exit fullscreen mode

Alternatif dan Perbandingan

Fitur Cloudflare AWS Route 53 Fastly
API DNS ✓ ✓ ✓
API CDN ✓ CloudFront API ✓
Fungsi edge Workers Lambda@Edge Compute@Edge
API WAF ✓ AWS WAF ✓
Tingkat gratis Murah hati Bayar sesuai penggunaan Terbatas
Format respons JSON XML/JSON JSON

API Cloudflare lebih terpadu dibandingkan AWS yang terfragmentasi. Workers lebih fleksibel dibanding Lambda@Edge.

Kasus Penggunaan Dunia Nyata

SaaS Multi-tenant: Otomatis membuat zona Cloudflare saat user menambah domain kustom. Routing via Workers, DNS via API, SSL otomatis.

Penyebaran blue-green: Update catatan DNS untuk mengalihkan traffic antar environment. API mempercepat switch A record, propagasi instan.

Otomatisasi respons DDoS: Monitoring trafik pakai API analitik. Jika ada serangan, tambahkan aturan firewall via API untuk memblokir IP, mitigasi real-time.

Kesimpulan

Yang telah dibahas:

  • Otentikasi dengan token API untuk akses terbatas
  • Manajemen zona & DNS dengan otomatisasi
  • Deploy Workers untuk komputasi edge
  • Pengaturan keamanan (firewall, rate limit)
  • Mengambil analitik & pengiriman log
  • Selalu uji dengan Apidog sebelum produksi

FAQ

Apa perbedaan antara zona dan domain?

Zona adalah representasi domain di Cloudflare. Setiap domain di Cloudflare = satu zona. ID zona digunakan untuk API.

Bagaimana cara menemukan ID zona saya?

Dasbor Cloudflare → pilih domain → Ikhtisar → bagian API.

Bisakah saya pakai API Cloudflare di paket gratis?

Ya, mayoritas fitur tersedia di paket gratis. Workers dan beberapa API premium butuh paket berbayar.

Berapa lama propagasi DNS lewat API?

Perubahan instan di sistem Cloudflare, propagasi nameserver butuh beberapa detik. Global tergantung TTL (biasanya beberapa menit).

Batas laju API Cloudflare?

Default: 1200 permintaan/5 menit/token. Cek header X-RateLimit-Remaining. Enterprise lebih tinggi.

Bisa satu token untuk banyak akun?

Tidak. Token hanya untuk satu akun. Untuk multi-akun, buat token berbeda atau pakai user token dengan akses multi-akun.

Bagaimana Workers beda dari Lambda?

Workers berjalan di edge Cloudflare (300+ kota), cold start sangat rendah, ideal untuk manipulasi request/respons, bukan job berat.

Bisakah flush/purge cache pakai API?

Ya:

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)