Format Atlas

Bandingkan

Protocol Buffers atau JSON

Protocol Buffers mendefinisikan pesan bertipe dari skema `.proto`, menyediakan wire format biner berbasis nomor field, dan pemetaan ProtoJSON terpisah. JSON adalah format teks umum menurut RFC 8259 dan tidak mengasumsikan skema tertentu.

Format mana yang sebaiknya dipilih?

Pilih Protobuf untuk pesan RPC atau antar layanan saat kontrak bertipe dan kompatibilitas biner dikelola. Pilih JSON untuk struktur teks umum dan dukungan alat JSON yang luas.

Cocok untuk Skema Protocol Buffers

Menentukan struktur pesan Protocol Buffers · Berbagi kontrak data lintas bahasa pemrograman

  • Menghasilkan kode untuk berbagai bahasa dengan protoc
  • Menentukan pesan untuk RPC dan komunikasi antarlayanan

Cocok untuk JSON

API web, file konfigurasi, dan pertukaran data

  • Mengirim data terstruktur

Informasi dasar

ItemSkema Protocol BuffersJSON
Ekstensi.proto.json
Tipe MIMEtext/plainapplication/json
Penggunaan umumMenentukan struktur pesan Protocol Buffers · Berbagi kontrak data lintas bahasa pemrogramanAPI web, file konfigurasi, dan pertukaran data
Cara membukaBuka dengan editor teks atau IDE yang mendukung Protocol Buffers. Untuk memeriksa sintaks dan import, kompilasi memakai versi dan konfigurasi protoc yang digunakan proyek.Buka dalam editor teks, IDE, atau penampil yang mendukung JSON.
Ekspor atau konversiSaat berpindah ke format skema lain, petakan tipe, nomor field, nilai default, enum, dan aturan kompatibilitas. Setelah itu, hasilkan kode dan uji dengan data nyata. Mengganti ekstensi menjadi .json atau ekstensi biner tidak mengonversi file.Aplikasi atau alat konversi dapat mengubahnya ke format seperti CSV.

Pilih menurut penggunaan

Menghasilkan kode untuk berbagai bahasa dengan protoc

Menentukan struktur pesan Protocol Buffers · Berbagi kontrak data lintas bahasa pemrograman

Skema Protocol Buffers

Menentukan pesan untuk RPC dan komunikasi antarlayanan

Menentukan struktur pesan Protocol Buffers · Berbagi kontrak data lintas bahasa pemrograman

Skema Protocol Buffers

Mengirim data terstruktur

API web, file konfigurasi, dan pertukaran data

JSON

Poin utama 1

Data wire biner Protobuf bergantung pada definisi `.proto` dan nomor field. JSON mewakili objek dan array teks tanpa mewajibkan skema; ProtoJSON memetakan tipe Protobuf ke nilai JSON dengan aturan tersendiri.

Perbedaan lebih lanjut

Poin utama 2

ProtoJSON memetakan bytes menjadi string base64, int64 menjadi string, enum menjadi nama, dan nama field menjadi kunci JSON. Ini bukan wire format biner ataupun JSON Schema sembarang.

Perbedaan lebih lanjut

Perbedaan lebih lanjut

Gunakan Protobuf untuk kontrak bertipe antar layanan dan pertukaran biner ringkas. Gunakan JSON untuk antarmuka teks umum. Jika memakai representasi JSON Protobuf, ikuti ProtoJSON dan jangan menganggap semua dokumen JSON setara. Periksa presence, null, rentang angka, field tak dikenal, dan evolusi skema.

  • Pesan wire Protobuf memerlukan skema yang cocok untuk menafsirkan nomor field dan tipe. Sintaks JSON umum tidak memerlukan skema.
  • ProtoJSON memiliki pemetaan dan aturan kompatibilitas tersendiri, kurang efisien daripada wire biner, dan tidak mempertahankan field tak dikenal dengan cara yang sama.
  • Konversi dapat memengaruhi presence, presisi integer, nama enum, kunci map, oneof, null, dan field tak dikenal. Validasi dengan pustaka runtime nyata serta versi skema lama dan baru.

Pertanyaan umum

Apakah ProtoJSON dapat dipertukarkan dengan semua dokumen JSON?

Tidak. ProtoJSON mewakili skema yang dapat diekspresikan dalam Protobuf dengan pemetaan khusus; ia tidak mewakili semua JSON Schema atau mempertahankan semua perilaku wire.

Pelajari lebih lanjut

Referensi dan spesifikasi