15 poin oleh GN⁺ 2024-10-20 | 1 komentar | Bagikan ke WhatsApp
  • JSON Patch adalah format standar yang didefinisikan dalam RFC 6902 untuk memodifikasi dokumen JSON
    • Menyediakan cara yang sederhana dan efisien untuk memperbarui resource secara parsial melalui HTTP
    • Metode PUT dan POST sebelumnya mengharuskan seluruh data dikirim, tetapi metode PATCH memungkinkan pembaruan parsial
  • JSON Patch menyediakan representasi perubahan yang jelas dan ringkas untuk dokumen JSON, sehingga mengurangi penggunaan bandwidth dan meningkatkan performa aplikasi web

Cara Kerja JSON Patch

  • JSON Patch bekerja sebagai serangkaian operasi atomik terhadap dokumen JSON.
  • Setiap operasi mencakup field op dan field path, yang menjalankan operasi pada lokasi tertentu di dalam dokumen.
  • Sebagai contoh, operasi add menambahkan field baru, dan operasi replace menggantikan field yang sudah ada.

JSON Pointer

  • JSON Patch menggunakan JSON Pointer untuk mengidentifikasi bagian tertentu dari dokumen.
  • JSON Pointer adalah string token yang dipisahkan dengan slash (/) untuk mengidentifikasi struktur hierarkis dokumen.
  • Sebagai contoh, /user/name mengidentifikasi field name di dalam objek user.

Kelebihan dan Kekurangan JSON Patch

Kelebihan

  1. Presisi: Dapat memodifikasi elemen tertentu secara akurat dalam struktur yang kompleks.
  2. Efisiensi: Hanya mengirim perubahan, sehingga meminimalkan volume transfer data dan latensi.
  3. Atomisitas: Seluruh operasi dapat di-rollback jika terjadi kegagalan.
  4. Idempoten: Dapat dicoba ulang dengan aman.
  5. Operasi kompleks: Dapat memindahkan atau menyalin elemen.
  6. Validasi: API dapat memvalidasi patch yang masuk untuk mengurangi permintaan yang salah.
  7. Berbasis standar: Mudah diintegrasikan dengan berbagai klien dan server.
  8. Kontrol akses tingkat field: Dapat membatasi modifikasi pada tingkat yang lebih rinci.
  9. Operasi batch: Beberapa perubahan dapat diproses dalam satu permintaan.

Kekurangan

  1. Kompleksitas: Sulit ditangani saat berurusan dengan struktur JSON yang rumit.
  2. Biaya pemeliharaan: Path bisa menjadi tidak valid seiring perkembangan API.
  3. Sulit di-debug: Sulit dilacak ketika banyak operasi dibundel bersama.
  4. Pelestarian urutan objek: Operasi pemindahan tidak menjamin urutan objek.
  5. Masalah keamanan: Kerentanan dapat muncul jika permintaan yang salah tidak ditangani dengan baik.

Contoh Operasi JSON Patch

  • Add: Menambahkan field baru.
  • Remove: Menghapus field yang sudah ada.
  • Replace: Mengganti field yang sudah ada dengan nilai baru.
  • Move: Memindahkan elemen ke lokasi lain.
  • Copy: Menyalin elemen ke lokasi lain.
  • Test: Menguji apakah sebuah nilai telah ditetapkan pada path tertentu.

JSON Patch dalam Tool dan Library

  • Tersedia library yang mendukung JSON Patch di berbagai bahasa pemrograman: fast-json-patch, python-json-patch, JsonPatch library in .NET, dan lainnya
  • Tool yang sangat bagus untuk mempelajari JSON Patch adalah jsonpatch.me, layanan online gratis untuk menjalankan perintah JSON Patch. Tersedia juga API

Ringkasan GN⁺

  • JSON Patch adalah tool yang kuat untuk melakukan pembaruan parsial pada dokumen JSON secara efisien.
  • Meski bisa sulit saat menangani struktur JSON yang kompleks, hal ini dapat diatasi dengan berbagai library dan tool.
  • JSON Patch berguna untuk mengurangi volume transfer data dan meningkatkan performa aplikasi web.
  • Alternatif seperti JSON Merge Patch juga dapat dipertimbangkan, dan penggunaan JSON Patch dalam pengembangan API dapat meningkatkan efisiensi.

1 komentar

 
GN⁺ 2024-10-20
Opini Hacker News
  • JSON Patch dirancang agar bisa memodifikasi dokumen JSON apa pun, sehingga terasa rumit. Jika set data sedikit dibatasi, dokumen bisa di-patch dengan jauh lebih sederhana. Misalnya, di Firebase, nilai null tidak bisa disimpan, dan menyetelnya ke null berarti menghapus. Batasan sederhana seperti ini membuat PATCH mudah diimplementasikan. Fitur API yang bagus di sini adalah tidak ada hal baru yang perlu dipelajari selain bahwa "null berarti hapus".

  • Menggunakan / sebagai pemisah di JSON terasa seperti pilihan yang aneh. Karena JSON adalah subset dari JS, saya tadinya mengharapkan . sebagai pemisah. Saat melihat /, rasanya seperti ini spesifikasi buatan orang backend, dan mungkin dimaksudkan untuk menjadikan path sebagai URL agar ambiguitas path relatif/absolut bisa diatasi.

  • Saya pikir path seharusnya berupa array, bukan string. Kalau tidak, / harus di-escape di dalam key dan string path harus diparse. Ini membuatnya tidak bisa menangani dokumen JSON arbitrer.

  • Saya pernah memakai JSON Patch sekali, sebagai hack untuk cepat menyelesaikan masalah tak terduga. Saya membangun antarmuka web agar kontraktor luar negeri bisa memberi anotasi pada data teks di tingkat kata. Datanya seharusnya dianotasi dalam potongan kecil, tetapi malah ditugaskan sebagai dokumen penuh sehingga anotasinya tidak tersimpan. Saya menemukan JSON Patch dan mengubah kode upload agar hanya memakai patch.

  • Dalam cara penentuan path JSON Patch, perlu ada sintaks standar untuk memilih item array berdasarkan pasangan key-value identitas, bukan indeks. Ini sangat penting terutama saat menambahkan item atau menganalisis perbedaan item JSON dari versi sebelumnya.

  • Salah satu kekuatan JSON Patch adalah idempoten. Operasi JSON Patch bisa dicoba ulang dengan aman tanpa efek samping yang tidak diinginkan. Namun, saya terkejut karena ternyata item tidak bisa ditambahkan ke array.

  • Ini bekerja mirip dengan kueri update MongoDB. Saya penasaran apakah bahasa update itu bisa dipakai pada file lokal tanpa harus menjalankan seluruh MongoDB.

  • Perlu ada perbandingan antara JSONDiffpatch dan JSON Patch. JSONDiffpatch bekerja dengan baik di browser maupun di node/Cloudflare Workers.

  • Saya pernah kesulitan meyakinkan mitra eksternal untuk mempelajari JSON Patch. Saya memakainya di API yang ditujukan ke pelanggan, dan butuh banyak usaha agar pengguna bisa memahami dan mengadopsinya.

  • Spesifikasi JSON Pointer terasa sangat "URL-y", sehingga sepertinya bisa melewati sintaks meta-JSON. "test" dan "copy" itu khas milik spesifikasi JSON Patch, dan juga dimungkinkan melakukan "transaksi" yang menjalankan beberapa pengeditan sekaligus.