Tidak suka iklan? Pergi Bebas Iklan Hari ini

Membandingkan Objek JSON Cara Mengenali Perbedaan dalam Respons API

Diterbitkan pada
Membandingkan Objek JSON: Cara Mengenali Perbedaan dalam Respons API 1
IKLAN · HAPUS?

API staging mengembalikan kode 200. API produksi mengembalikan kode 200. Namun sesuatu yang terjadi di bagian selanjutnya rusak, dan Anda sedang memandang dua blok JSON yang berusaha menentukan apa yang berubah.

Pembandingan JSON terdengar sederhana hingga Anda berada di tengah prosesnya.

Mengapa Pembandingan JSON Lebih Sulit Daripada yang Dilihat

JSON tidak memiliki bentuk standar. Dua objek dapat mewakili data yang sama sambil terlihat sangat berbeda saat dikirim. Berikut ini yang menyerang pengembang:

Urutan kunci. Objek JSON tidak diurutkan menurut spesifikasi — {"a":1,"b":2} dan {"b":2,"a":1} secara semantik identik. Namun jika Anda membandingkannya sebagai string murni, mereka terlihat berbeda.

Whitespace. JSON yang diminifi dan JSON yang sudah dipformat gagal dalam perbandingan string. Data yang sama, byte yang berbeda.

Kolom yang penuh dengan angka seharusnya menjadi angka JSON. Kolom dengan nilai 'benar'/'salah' seharusnya menjadi nilai boolean. Namun, kolom kode pos yang tampaknya angka (90210) sebaiknya tetap sebagai string — konversi ini menghancurkan nol di awal. "1" dan 1 adalah nilai JSON yang berbeda. Begitu pula null dan kunci yang hilang. Alat perbandingan Anda perlu memperhatikan perbedaan ini — dan Anda juga perlu memperhatikannya, karena konsumen API Anda mungkin tidak menangani mereka dengan cara yang sama.

Kedalaman terkait. Nilai yang berubah yang tersembunyi lima level dalam respons besar mudah terlewat saat Anda menggulirkan output mentah.

Ketaraan Struktural vs Ketaraan Semantik

Perbedaan ini penting saat Anda memperbaiki perubahan API.

Ketaraan struktural berarti JSON identik secara byte setelah normalisasi — kunci yang sama, nilai yang sama, urutan yang sama. Berguna untuk validasi cache atau pengecekan tanda tangan.

Ketaraan semantik berarti data mewakili hal yang sama, bahkan jika strukturnya berbeda. Respons yang mengubah user_id ke userId, atau menambahkan field opsional baru, secara semantik berbeda tetapi mungkin secara fungsional setara dengan konsumen Anda.

Ketika menangkap regresi, Anda biasanya ingin ketaraan struktural. Ketika mengevaluasi perubahan yang menghancurkan bagi konsumen API, ketaraan semantik adalah kerangka yang tepat.

Cara Membandingkan JSON di Terminal

Dengan jq dan diff

jq mengurutkan kunci dan menormalisasi whitespace, yang membuatnya langkah pra-pembandingan yang kuat sebelum pembandingan:

diff <(jq --sort-keys . response_v1.json) <(jq --sort-keys . response_v2.json)

Ini menangani urutan kunci dan format. Anda akan melihat hanya perbedaan data yang nyata. Tambahkan -c untuk output perbandingan yang kompak atau -u untuk format terpadu.

Untuk membandingkan respons API live terhadap baseline yang disimpan:

diff <(jq --sort-keys . baseline.json) <(curl -s https://api.example.com/endpoint | jq --sort-keys .)

Dengan Python’s deepdiff

Ketika Anda membutuhkan output terstruktur — terutama untuk objek atau array yang ternested — deepdiff memberi Anda pandangan berbasis program terhadap apa yang berubah:

from deepdiff import DeepDiff
import json

with open("response_v1.json") as f:
    v1 = json.load(f)

with open("response_v2.json") as f:
    v2 = json.load(f)

diff = DeepDiff(v1, v2, ignore_order=True)
print(diff.to_json(indent=2))

DeepDiff mengelompokkan perubahan: values_changed, dictionary_item_added, dictionary_item_removed, type_changes. Ini membuatnya mudah untuk melakukan pengecekan regresi di CI.

Instalasi dengan: pip install deepdiff

Kasus Penggunaan Umum

Membandingkan respons API di berbagai lingkungan. API staging dan produksi harus mengembalikan bentuk yang sama. Perbandingan cepat dengan jq setelah deploy dapat menangkap pergeseran struktur sebelum pengguna melakukannya.

Menangkap pergeseran struktur seiring waktu. API berkembang. Menetapkan baseline yang disimpan dan menjalankan perbandingan setiap deploy memungkinkan Anda melacak kapan dan apa yang berubah — bukan menemukannya dari laporan bug.

Pengujian regresi. Catat respons yang diharapkan, ulangi panggilan API, bandingkan output. Ini sangat berguna untuk API pihak ketiga di mana Anda tidak mengontrol strukturnya.

Kesalahan dalam Pembandingan Array

Array adalah tempat di mana alat pembanding JSON menjadi kacau. Urutan penting dalam array JSON menurut spesifikasi, dan kebanyakan alat pembanding menganggap array yang diurutkan ulang sebagai serangkaian nilai yang berubah, menghasilkan output yang membingungkan dan berisik.

Jika API Anda mengembalikan daftar tag dan mereka kembali dalam urutan yang berbeda, perbandingan yang sederhana menunjukkan setiap elemen sebagai berubah:

- "tags": ["json", "api", "rest"]
+ "tags": ["api", "json", "rest"]

Alat seperti deepdiff memungkinkan Anda mengatur ignore_order=True untuk array. jq tidak mengurutkan array secara default — Anda perlu memipeline melalui sort pada bidang array yang diketahui.

Aturan praktis: jika urutan array tidak memiliki makna secara semantik dalam API Anda (misalnya daftar tag), gunakan alat pembanding yang mendukung perbandingan tanpa memperhatikan urutan. Jika urutan penting (misalnya daftar hasil yang diurutkan), jangan menghilangkan urutannya.

Kapan Menggunakan Validasi JSON Schema Daripada Pembandingan

Pembandingan adalah perbandingan pada waktu tertentu — ini memberi tahu Anda bagaimana dua respons tertentu berbeda. Validasi JSON Schema memberi tahu Anda apakah respons sesuai dengan kontrak.

Gunakan validasi JSON Schema ketika:

  • Anda ingin mengenali struktur di semua respons, bukan hanya membandingkan dua respons tertentu
  • Anda mempublikasikan API publik dan perlu menjamin kekonsistenan ke belakang
  • Anda ingin menangkap field yang hilang atau tipe yang salah, bukan hanya perubahan nilai

Gunakan alat pembanding ketika:

  • Anda memiliki dua respons tertentu dan ingin memahami apa yang berubah
  • Anda sedang memperbaiki regresi antara versi API
  • Anda sedang melakukan pengecekan cepat pada deploy

Mereka menyelesaikan masalah yang berbeda. Untuk pengujian API yang serius, Anda ingin keduanya.

Pilihan yang Lebih Cepat: Gunakan IO Tools JSON Compare

Untuk perbandingan cepat di browser tanpa setup, IO Tools JSON Compare mengatasi kasus umum: urutan kunci, normalisasi whitespace, objek ternested, dan perbandingan berdasarkan tipe. Tempel dua objek JSON dan dapatkan perbandingan samping yang bersih.

Ini berguna saat Anda sedang memperbaiki dan tidak ingin membuka terminal.

Referensi Cepat: Apa yang Ditemukan oleh Pendekatan Berbeda

Skenario Perbandingan string jq + diff deepdiff Skema JSON
Urutan kunci yang berbeda Tidak terdeteksi Ditemukan Ditemukan Tidak terdeteksi
Whitespace tambahan Tidak terdeteksi Ditemukan Ditemukan Tidak terdeteksi
Kesalahan tipe ("1" vs 1) Ditemukan Ditemukan Ditemukan Ditemukan
Null vs kunci yang hilang Ditemukan Ditemukan Ditemukan Ditemukan
Pengurutan ulang array False positive False positive Dapat dikonfigurasi Tidak terdeteksi
Penambahan field opsional baru Ditemukan Ditemukan Ditemukan Dapat dikonfigurasi
Pelanggaran kontrak schema Tidak terdeteksi Tidak terdeteksi Tidak terdeteksi Ditemukan

Alat yang tepat tergantung pada apa yang sedang Anda perbaiki. Untuk pengecekan kecepatan, jq --sort-keys plus diff mencakup kebanyakan kasus. Untuk pengujian regresi di CI, deepdiff memberi Anda output terstruktur dan dapat dijalankan secara programatis. Untuk penerapan kontrak schema, gunakan JSON Schema. Dan ketika Anda butuh jawaban cepat tanpa membuka terminal, alat perbandingan JSON berbasis browser dapat membawa Anda ke sana dalam beberapa detik.

Ingin bebas iklan? Bebas Iklan Hari Ini

Instal Ekstensi Kami

Tambahkan alat IO ke browser favorit Anda untuk akses instan dan pencarian lebih cepat

Ke Ekstensi Chrome Ke Ekstensi Tepi Ke Ekstensi Firefox Ke Ekstensi Opera

Papan Skor Telah Tiba!

Papan Skor adalah cara yang menyenangkan untuk melacak permainan Anda, semua data disimpan di browser Anda. Lebih banyak fitur akan segera hadir!

IKLAN · HAPUS?
IKLAN · HAPUS?
IKLAN · HAPUS?

Pojok Berita dengan Sorotan Teknologi

Terlibat

Bantu kami untuk terus menyediakan alat gratis yang berharga

Belikan aku kopi
IKLAN · HAPUS?