Apidog Docs
🇮🇩 Bahasa Indonesia
  • 🇺🇸 English
  • 🇯🇵 日本語
  • 🇪🇸 Español
  • 🇰🇷 한국인
  • 🇨🇳 简体中文
  • 🇵🇹 Português (Portugal)
  • 🇮🇩 Bahasa Indonesia
  • 🇧🇷 Português (Brasil)
  • 🇻🇳 Tiếng Việt
  • 🇨🇳 繁體中文
🇮🇩 Bahasa Indonesia
  • 🇺🇸 English
  • 🇯🇵 日本語
  • 🇪🇸 Español
  • 🇰🇷 한국인
  • 🇨🇳 简体中文
  • 🇵🇹 Português (Portugal)
  • 🇮🇩 Bahasa Indonesia
  • 🇧🇷 Português (Brasil)
  • 🇻🇳 Tiếng Việt
  • 🇨🇳 繁體中文
🇮🇩 Bahasa Indonesia
  • 🇺🇸 English
  • 🇯🇵 日本語
  • 🇪🇸 Español
  • 🇰🇷 한국인
  • 🇨🇳 简体中文
  • 🇵🇹 Português (Portugal)
  • 🇮🇩 Bahasa Indonesia
  • 🇧🇷 Português (Brasil)
  • 🇻🇳 Tiếng Việt
  • 🇨🇳 繁體中文
Learning Center
HomeSupport CenterAPI ReferencesDownloadChangelog
Learning Center
HomeSupport CenterAPI ReferencesDownloadChangelog
  1. Schemas
  • Pusat Pembelajaran Apidog
  • Memulai
    • Pengantar Apidog
    • Konsep Dasar di Apidog
    • Menavigasi Apidog
    • Mulai cepat
      • Ikhtisar
      • Membuat Endpoint
      • Membuat Permintaan
      • Menambahkan Aservi
      • Membuat Skenario Pengujian
      • Membagikan Dokumentasi API
      • Jelajahi Lebih Lanjut
    • Migrasi ke Apidog
      • Ikhtisar
      • Impor Manual
      • Impor Terjadwal (Ikat Sumber Data)
      • Opsi Impor
      • Ekspor Data
      • Impor dari
        • Impor dari Postman
        • Impor Spesifikasi OpenAPI
        • Impor cURL
        • Impor Markdown
        • Impor dari Insomnia
        • Impor dari apiDoc
        • Impor File .har
        • Impor WSDL
  • Data API mock
    • Ikhtisar
    • Smart Mock
    • Mock Kustom
    • Urutan Prioritas Mock
    • Mock Scripts
    • Cloud Mock
    • Mock Runner Self-Hosted
    • Bahasa Mock (Lokal)
  • Akun dan preferensi
    • Pengaturan Akun
    • Membuat Token Akses OpenAPI
    • Notifikasi
    • Pengaturan Bahasa
    • Tombol Pintas
    • Konfigurasi Proxy Jaringan
    • Mencadangkan Data
    • Memperbarui Apidog
    • Menghapus Akun
    • Fitur Eksperimental
  • Kirim request
    • Ikhtisar
    • Debugging SSE
    • MCP Client
    • Socket.IO
    • WebSocket
    • Webhook
    • SOAP atau WebService
    • GraphQL
    • gRPC
    • Gunakan Agen Proksi Permintaan untuk Debugging
    • Buat request
      • Riwayat Permintaan
      • Dasar-Dasar Permintaan
      • Parameter dan Body
      • Header Permintaan
      • Pengaturan Permintaan
      • Debug Permintaan
      • Menyimpan Permintaan sebagai Endpoint
      • HTTP/2
    • Autentikasi dan otorisasi
      • Ikhtisar
      • Sertifikat CA dan Klien
      • Jenis Otorisasi
      • Digest Auth
      • OAuth 1.0
      • OAuth 2.0
      • Autentikasi Hawk
      • Kerberos
      • NTLM
      • Akamai EdgeGrid
    • Respons dan cookie
      • Melihat Respons API
      • Mengelola Cookie
      • Ikhtisar
  • Mengembangkan dan men-debug API
    • Ikhtisar
    • Membuat Permintaan
    • Mengirim Permintaan
    • Kasus Debugging
    • Kasus Pengujian
    • Nilai Dinamis
    • Memvalidasi Respons
    • Design-First vs Request-First
    • Menghasilkan Kode
    • Environment dan variabel
      • Ikhtisar
      • Menggunakan Variabel
      • Manajemen Lingkungan
    • Rahasia vault
      • Gambaran Umum
      • HashiCorp Vault
      • Azure Key Vault
      • AWS Secrets Manager
    • Modul nilai dinamis
      • Airline
      • Animal
      • Warna
      • Commerce
      • Perusahaan
      • Database
      • Tipe Data
      • Tanggal
      • Keuangan
      • Food
      • Git
      • Hacker
      • Helpers
      • Image
      • Internet
      • Lokasi
      • Lorem
      • Musik
      • Number
      • Orang
      • Telepon
      • Sains
      • String
      • System
      • Vehicle
      • Word
    • Pra dan pascaprosesor
      • Ikhtisar
      • Aservi
      • Ekstrak Variabel
      • Tunggu
      • Keamanan
      • Operasi basis data
        • Ikhtisar
        • MySQL
        • MongoDB
        • Redis
        • Oracle Client
      • Menggunakan skrip
        • Ikhtisar
        • Skrip Pra-Pemroses
        • Skrip Post-processor
        • Skrip Publik
        • Referensi Skrip Postman
        • Memanggil Bahasa Pemrograman Lain
        • Menggunakan Pustaka JS
        • Memvisualisasikan Respons
        • Contoh skrip
          • Skrip Aservi
          • Menggunakan Variabel
          • Memodifikasi Permintaan
          • Contoh Lainnya
    • Debugging API
      • AI Agent Debugger
      • A2A Debugger
  • Mendesain API
    • Ikhtisar
    • Membuat Proyek API Baru
    • Dasar-Dasar Endpoint
    • Panduan Desain API
    • Modul
    • Mengonfigurasi Beberapa Contoh Body Permintaan
    • Komponen
    • Field Umum
    • Parameter Global
    • Riwayat Perubahan Endpoint
    • Komentar
    • Manajemen Endpoint Batch
    • Custom Protocol API
    • Mode Spec-first (Beta)
    • Skema keamanan
      • Gambaran Umum
      • Membuat Skema Keamanan
      • Menggunakan Skema Keamanan
      • Skema Keamanan dalam Dokumentasi Online
    • Fitur lanjutan
      • Bidang Endpoint Kustom
      • Skenario Pengujian Terkait
      • Status Endpoint
      • Tampilan Daftar Parameter
      • Identifikasi Unik Endpoint
    • Schemas
      • Gambaran Umum
      • Membuat Schema Baru
      • Membangun Schema
      • Hasilkan Skema dari JSON dan Sebagainya
      • oneOf, allOf, anyOf
      • Menggunakan Discriminator
  • Pengujian API
    • Gambaran Umum
    • Skenario pengujian
      • Membuat Skenario Pengujian
      • Meneruskan Data Antar Permintaan
      • Kondisi Kontrol Alur
      • Sinkronisasi Data dari Endpoint dan Kasus Endpoint
      • Mengimpor Endpoint dan Kasus Endpoint dari Proyek Lain
      • Mengekspor Skenario Pengujian
    • Laporan pengujian
      • Laporan Pengujian
    • Jalankan skenario pengujian
      • Menjalankan Skenario Pengujian
      • Menjalankan Skenario Pengujian secara Batch
      • Pengujian Berbasis Data
      • Data Pengujian Bersama
      • Tugas Terjadwal
      • Mengelola Lingkungan Runtime API dari Proyek Lain
    • Suite pengujian
      • Ikhtisar
      • Membuat Rangkaian Pengujian
      • Mengorkestrasi Test Suite
      • Menjalankan Rangkaian Pengujian Secara Lokal
      • Menjalankan Suite Pengujian Melalui CLI
      • Tugas terjadwal
    • Uji API
      • Pengujian Integrasi
      • Pengujian Performa
      • Pengujian End-to-End
      • Pengujian Regresi
      • Pengujian Kontrak
    • Apidog CLI
      • Ikhtisar
      • Menginstal dan Menjalankan Apidog CLI
      • Opsi Apidog CLI
    • CI/CD
      • Ikhtisar
      • Integrate with Github Actions
      • Integrasikan dengan Gitlab
      • Integrate with Jenkins
      • Memicu Pengujian melalui Git Commit
  • Publikasikan dokumentasi API
    • Gambaran Umum
    • Teknologi API yang Didukung
    • Berbagi Cepat
    • Melihat Dokumentasi API
    • Dokumentasi Markdown
    • Menerbitkan Situs Dokumentasi
    • Halaman Login Kustom
    • Tata Letak Kustom
    • CSS, JavaScript, HTML Kustom
    • Domain Kustom
    • Fitur AI
    • Pengaturan SEO
    • Pengaturan lanjutan
      • Pencarian Dokumentasi
      • Proxy CORS
      • Mengintegrasikan Google Analytics
      • Pengaturan Pohon Folder
      • Pengaturan Visibilitas
      • Menyematkan Nilai dalam URL Dokumentasi
    • Versi API
      • Gambaran Umum
      • Membuat Versi API
      • Menerbitkan Versi API
      • Membagikan Endpoint dengan Versi API
  • Branch
    • Ikhtisar
    • Membuat Cabang Sprint
    • Menguji API dalam Branch
    • Merancang API dalam Cabang
    • Menggabungkan Cabang Sprint
    • Mengelola Cabang Sprint
    • AI Branch (Beta)
  • Fitur AI
    • Ikhtisar
    • Mengaktifkan Fitur AI
    • Membuat Kasus Pengujian
    • Memodifikasi Skema dengan AI
    • Pemeriksaan Kepatuhan Endpoint
    • Pemeriksaan Kelengkapan Dokumentasi API
    • Penamaan Field Berbasis AI
    • Tanya Jawab Umum
  • Server MCP Apidog
    • Ikhtisar
    • Hubungkan Proyek Apidog ke AI
    • Menghubungkan Dokumentasi yang Dipublikasikan ke AI
    • Menghubungkan File OpenAPI ke AI
  • Praktik terbaik
    • Menangani Tanda Tangan API
    • Mengakses API yang Dilindungi OAuth 2.0
    • Alur Kerja Kolaborasi
    • Mengelola Status Autentikasi
  • Ruang offline
    • Gambaran Umum
  • Administrasi
    • Mengelola proyek
      • Mengelola Proyek
      • Pengaturan Notifikasi
      • Mengelola Anggota Proyek
      • Resource proyek
        • Koneksi Database
        • Koneksi Git
    • Mengelola tim
      • Mengelola Tim
      • Mengelola Anggota Tim
      • Aktivitas Tim
      • Peran & Izin Tim
      • Resource tim
        • General Runner
        • Variabel Tim
        • Request Proxy Agent
      • Kolaborasi real-time
        • Kolaborasi Tim
    • Checklist onboarding
      • Konsep Dasar
      • Panduan Onboarding
    • Mengelola organisasi
      • Mengelola Organisasi
      • Peran & Izin Organisasi
      • Manajemen paket
        • Manajer Penagihan di Organisasi
      • Single Sign-On (SSO)
        • Ikhtisar SSO
        • Mengonfigurasi Microsoft Entra ID
        • Mengonfigurasi Okta
        • Mengonfigurasi SSO untuk Organisasi
        • Mengelola Akun Pengguna
        • Memetakan Grup ke Tim
      • Provisioning SCIM
        • Pengantar Provisioning SCIM
        • Microsoft Entra ID
        • Okta
      • Resource organisasi
        • Self-Hosted Runner
  • Apidog Europe
    • Apidog Europe
  • Penagihan
    • Ikhtisar
    • Kredit
    • Meningkatkan Paket Anda
    • Metode Pembayaran Alternatif
    • Mengelola Langganan
    • Memindahkan Tim Berbayar ke Organisasi
  • Add-on
    • API Hub
    • Plugin Apidog Intellij IDEA
    • Ekstensi browser
      • Chrome
      • Microsoft Edge
    • Proxy request
      • Proksi Permintaan di Web
      • Proxy Permintaan dalam Dokumen Bersama
      • Proxy Permintaan di Client
  • Data dan keamanan
    • Penyimpanan dan Keamanan Data
    • Privasi dan Keamanan Data Pengguna
    • Perutean Permintaan dan Keamanan Data
  • Referensi
    • Pendekatan API Design-First
    • Ekstensi Spesifikasi OpenAPI Apidog
    • JSONPath
    • XPath
    • Ekspresi Reguler
    • JSON Schema
    • Format File CSV
    • Menginstal Lingkungan Java
    • Lingkungan Deployment Runner
    • Sintaks Markdown Apidog
    • Ekstensi Swagger Apidog
      • Gambaran Umum
      • x-apidog-folder
      • x-apidog-status
      • x-apidog-name
      • x-apidog-maintainer
    • Ekstensi JSON Schema Apidog
      • Ikhtisar
      • x-apidog-mock
      • x-apidog-orders
      • x-apidog-enum
  • Pusat dukungan
  1. Schemas

oneOf, allOf, anyOf

oneOf, anyOf, dan allOf adalah kata kunci dalam spesifikasi JSON Schema yang digunakan untuk mendefinisikan struktur data komposit. Pada dasarnya, kata kunci tersebut merupakan operator logis yang diterapkan pada validasi data. Apidog sepenuhnya mendukung fitur JSON Schema ini, membantu Anda membuat dokumentasi API dan aturan validasi data yang lebih akurat.

Konsep Dasar#

allOf
allOf berarti data harus secara bersamaan memenuhi semua kondisi subschema, setara dengan operasi AND dalam operasi logis. Seperti ungkapan "baik... maupun..." dalam bahasa sehari-hari, semua kondisi harus terpenuhi secara bersamaan agar validasi berhasil.
anyOf
oneOf

Tabel Perbandingan Logika#

Kata KunciOperasi LogisPersyaratan KondisiKasus Penggunaan Umum
allOfANDHarus memenuhi semua kondisi secara bersamaanPewarisan, ekstensi
anyOfORHarus memenuhi setidaknya satu kondisiKombinasi opsional
oneOfXORHarus memenuhi tepat satu kondisiPilihan yang saling eksklusif

Penggunaan di Apidog#

1. Menggunakan Editor Visual#

1
Langkah 1: Buat Skema Data
Di proyek Anda, klik "Schemas", lalu "New Schema".
Membuat skema baru
2
Langkah 2: Tambahkan Komposisi Skema
Di panel pengeditan skema data, saat memilih tipe, klik "Schema Composition" dan pilih oneOf, anyOf, atau allOf. Definisikan struktur data spesifik untuk setiap subschema.
Menambahkan komposisi skema

2. Menggunakan Editor Kode JSON Schema#

Anda juga dapat langsung mengedit kode JSON Schema di panel pengeditan skema data untuk mendefinisikan pola komposisi logis ini.
Editor kode JSON Schema

Penerapan dalam Dokumentasi API#

Definisi Parameter Permintaan#

Saat mendefinisikan parameter permintaan endpoint, Anda dapat menggunakan pola komposisi ini untuk mendeskripsikan struktur parameter yang kompleks:
1
Masuk ke halaman pengeditan API.
2
Di bagian "Request Parameters", pilih Body dan pilih tipe JSON.
3
Dalam struktur data, klik "Reference Schema", atau pilih "Schema Composition" yang sesuai berdasarkan logika bisnis, atau definisikan JSON Schema kustom.
Komposisi skema parameter permintaan

Definisi Data Respons#

Demikian pula, Anda dapat menggunakan komposisi skema ini dalam data respons:
1
Di bagian "Response", tambahkan contoh respons.
2
Gunakan komposisi skema untuk mendeskripsikan berbagai format respons.
Komposisi skema respons

Contoh Penggunaan Praktis#

Contoh allOf (Operasi AND)#

Menggunakan allOf memungkinkan Anda menggabungkan beberapa skema data, yang mengharuskan data memenuhi semua kondisi secara bersamaan. Ini seperti mengatakan "informasi pengguna harus mencakup informasi dasar AND informasi kontak":
{
  "allOf": [
    {
      "description": "Basic user information",
      "type": "object",
      "properties": {
        "id": { "type": "integer" },
        "name": { "type": "string" }
      },
      "required": ["id", "name"]
    },
    {
      "description": "Contact information", 
      "type": "object",
      "properties": {
        "email": { "type": "string", "format": "email" },
        "phone": { "type": "string" }
      },
      "required": ["email"]
    }
  ]
}
Hasil: Data akhir harus berisi field id, name, dan email, dengan phone bersifat opsional. Semua batasan dari subschema digabungkan dan dijalankan, seperti ditunjukkan di bawah ini:
Hasil contoh allOf

Contoh anyOf (Operasi OR)#

Menggunakan anyOf menyediakan beberapa jalur validasi opsional - pengguna dapat memilih satu atau beberapa metode. Ini seperti mengatakan "pengguna dapat login melalui username/password OR email/password OR phone/verification code":
{
  "type": "object",
  "properties": {
    "login": {
      "anyOf": [
        {
          "description": "Username/password login",
          "properties": {
            "username": { "type": "string" },
            "password": { "type": "string" }
          },
          "required": ["username", "password"]
        },
        {
          "description": "Email/password login",
          "properties": {
            "email": { "type": "string", "format": "email" },
            "password": { "type": "string" }
          },
          "required": ["email", "password"]
        },
        {
          "description": "Phone/verification code login",
          "properties": {
            "phone": { "type": "string" },
            "verifyCode": { "type": "string" }
          },
          "required": ["phone", "verifyCode"]
        }
      ]
    }
  }
}
Hasil: Pengguna dapat memberikan informasi untuk satu atau beberapa metode login, selama setidaknya satu metode memenuhi persyaratan validasi, seperti ditunjukkan di bawah ini:
Hasil contoh anyOf

Contoh oneOf (Operasi XOR)#

Menggunakan oneOf memastikan bahwa pengguna hanya dapat memilih satu metode pembayaran dan tidak dapat memberikan beberapa metode secara bersamaan. Ini seperti mengatakan "metode pembayaran harus kartu kredit XOR PayPal XOR transfer bank - tepat salah satu dari opsi ini":
{
  "type": "object", 
  "properties": {
    "payment": {
      "oneOf": [
        {
          "description": "Credit card payment",
          "type": "object",
          "properties": {
            "type": { "const": "credit_card" },
            "cardNumber": { "type": "string" },
            "expiryDate": { "type": "string" }
          },
          "required": ["type", "cardNumber", "expiryDate"],
          "additionalProperties": false
        },
        {
          "description": "PayPal payment", 
          "type": "object",
          "properties": {
            "type": { "const": "paypal" },
            "email": { "type": "string", "format": "email" }
          },
          "required": ["type", "email"],
          "additionalProperties": false
        },
        {
          "description": "Bank transfer",
          "type": "object", 
          "properties": {
            "type": { "const": "bank_transfer" },
            "accountNumber": { "type": "string" },
            "routingNumber": { "type": "string" }
          },
          "required": ["type", "accountNumber", "routingNumber"],
          "additionalProperties": false
        }
      ]
    }
  }
}
Hasil: Pengguna harus memilih tepat satu metode pembayaran - mereka tidak dapat memberikan beberapa metode secara bersamaan, dan juga tidak dapat tidak memberikan metode apa pun, seperti ditunjukkan di bawah ini:
Hasil contoh oneOf

Praktik Terbaik#

Saat memilih pola komposisi, pertama-tama klarifikasi logika bisnis Anda:
Perlu menggabungkan/mewarisi beberapa skema → Gunakan allOf (operasi AND)
Perlu kombinasi opsional yang fleksibel → Gunakan anyOf (operasi OR)
Perlu pilihan saling eksklusif yang ketat → Gunakan oneOf (operasi XOR)
Modified at 2026-06-11 10:17:04
Previous
Hasilkan Skema dari JSON dan Sebagainya
Next
Menggunakan Discriminator
Built with