Saya sudah bolak-balik ~ 5 kali sudah. Titik akhir REST ini /api/tags/
akan untuk penggunaan internal (tidak ada klien pihak ke-3), saya satu-satunya yang bekerja dengannya.
Saya memutuskan antara dua representasi ini:
Datar
{
"types":[
{
"id":1,
"text":"Utility"
},
{
"id":7,
"text":"Lease Terms"
},
],
"tags":[
{
"id":8,
"text":"Water",
"type":1
},
{
"id":9,
"text":"Electricity",
"type":1
},
{
"id":5,
"text":"Minimum 12 month lease",
"type":7
},
{
"id":17,
"text":"lease negotiable/flexible",
"type":7
},
]
}
- Ini agak modular. Dapat menambahkan lapisan teratas lain seperti "negara" tanpa merusak kompatibilitas.
Bersarang
{
"1":{
"text":"Utility",
"tags":{
"8":{
"text":"Water"
},
"9":{
"text":"Electricity"
},
}
},
"2":{
"text":"Lease Terms",
"tags":{
"5":{
"text":"Minimum 12 month lease"
},
"17":{
"text":"lease negotiable/flexible"
},
}
},
}
- Sudah dalam format yang dapat digunakan. Tidak perlu mengulang-ulang data sebelum menggunakannya.
- Menghemat bandwidth. Bahkan setelah gzip, ini sedikit lebih kecil.
Yang mana yang harus digunakan, dan mengapa? Jika ini adalah masalah preferensi pribadi, representasi mana yang akan disukai pengembang dan mengapa?
rest
api-design
json
dvtan
sumber
sumber
Is this a matter of personal preference?
. Aku pikir begitu. Persyaratan> kebutuhan> preferensiJawaban:
Tergantung pada kasus penggunaan Anda.
Saat menggunakan JSON dengan bahasa yang diketikkan statis, ada bonus besar jika struktur Anda memetakan ke jenis Anda. Ini berarti bahwa semua nama kunci harus diketahui sebelumnya.
Jadi, jika Anda berencana menggunakan Java untuk menggunakan layanan ini, atau jika Anda berencana untuk mendokumentasikannya dengan Skema JSON, nomor satu akan jauh lebih bersih (tentu saja keduanya akan berfungsi).
sumber
Sulit dikatakan tanpa lebih banyak konteks. Saya telah bekerja dengan keduanya tetapi semakin saya mulai bersandar ke # 1. Secara umum, saya telah menemukan kesederhanaan lebih relevan daripada kecanggihan.
Di # 1, entitas dan hubungan jelas dan jelas, sedangkan # 2 membutuhkan cara berpikir yang berbeda. Bagi sebagian orang, pohon (sebagai struktur data) tidak menggambarkan diri sendiri. Pikirkan pengembang junior yang hampir tidak pernah melihat komposisi | agregasi yang lebih dalam dari Person> Address .
Saya bisa membaca # 1 sebagai:
Tapi, bagaimana kita bisa menggambarkan # 2 hanya dalam 7 kata? Jika saya tidak terbiasa dengan struktur pohon saya bisa membaca # 2 sebagai
Jangan salah paham, # 2 bisa menjadi solusi cerdas, tapi saya tidak akan mengorbankan keterbacaan untuk kepintaran (atau efisiensi) tanpa perlu.
Pada penulisan jawaban ini, saya sedang mengerjakan sebuah proyek yang perlu diintegrasikan dengan layanan pihak ke-3 yang responsnya sangat mirip dengan # 2. Layanan ini memberi kami kalender: tahun, bulan, hari, dan jam sehari
Sebagai pengembang Java, deserialisasi respons layanan berakhir dengan kode yang sama sekali tidak dapat dibaca karena tidak ada pemetaan langsung ke kelas melalui getter | setter | konstruktor. Sebaliknya, saya harus melintasi dokumen ( getNode, getSiblings, getNodeName, getChildAsText, isNodeObject, isText, dll) dan mengisi hirarki kelas saya secara manual. Akhirnya, saya berhasil memetakan pohon angka ke dalam koleksi cap waktu! Struktur mana yang menurut Anda lebih mudah dibaca dan deserialise? Dan yang mana yang ingin Anda dapatkan jika Anda berada di sisi klien?
sumber
Jika Anda tidak menginginkan yang lain, Anda bisa menggunakan:
Sayangnya di sini JSON hanya mengizinkan string sebagai kunci.
sumber
"Utility": ["Water","Electricity"]
dll