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.
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:
- Masuk ke Dasbor Cloudflare → Profil Saya → Token API
- Buat Token
- Pilih template (misal: Edit DNS zona, penyebaran Workers) atau kustom
- Pilih zona tertentu atau semua zona
- Salin token
Contoh penggunaan token:
curl -X GET "https://api.cloudflare.com/client/v4/user/tokens/verify" \
-H "Authorization: Bearer YOUR_API_TOKEN"
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"
Format respons
Semua respons API Cloudflare:
{
"result": { ... },
"success": true,
"errors": [],
"messages": []
}
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"
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
}
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"
}'
Dapatkan detail zona
curl -X GET "https://api.cloudflare.com/client/v4/zones/ZONE_ID" \
-H "Authorization: Bearer YOUR_API_TOKEN"
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"
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
}'
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
}'
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"
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"
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
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)
}
}
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"
}'
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"
}'
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"
}
]
}'
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"
}'
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
}
}'
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"
Contoh respons:
{
"result": {
"totals": {
"requests": {
"all": 1000000,
"cached": 800000,
"uncached": 200000
},
"bandwidth": {
"all": 50000000000,
"cached": 40000000000
},
"threats": {
"all": 5000
},
"pageviews": {
"all": 250000
}
}
}
}
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×tamps=rfc3339"
}'
Pengujian dengan Apidog
Setiap perubahan di Cloudflare berdampak ke lalu lintas produksi. Selalu uji perubahan Anda dengan Apidog sebelum deploy.
1. Pengaturan lingkungan
CLOUDFLARE_API_TOKEN: your_token
CLOUDFLARE_ACCOUNT_ID: abc123
ZONE_ID: xyz789
BASE_URL: https://api.cloudflare.com/client/v4
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
})
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')
})
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)
}
}
}
}
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"]
}'

Top comments (0)