Saya ingin tahu apakah akan menggunakan parameter matriks atau kueri di URL saya. Saya menemukan diskusi yang lebih tua dengan topik itu tidak memuaskan.
Contohnya
- URL dengan params kueri: http: //some.where/thing? ParamA = 1 & paramB = 6542
- URL dengan params matriks: http: //some.where/thing; paramA = 1; paramB = 6542
Pada pandangan pertama, params matriks tampaknya hanya memiliki keuntungan:
- lebih mudah dibaca
- tidak diperlukan penyandian dan decoding "&" dalam dokumen XML
- URL dengan "?" tidak di-cache dalam banyak kasus; URL dengan params matriks di-cache
- parameter matriks dapat muncul di mana saja di jalur dan tidak terbatas pada akhirnya
- parameter matriks dapat memiliki lebih dari satu nilai:
paramA=val1,val2
Namun ada juga kelemahannya:
- hanya beberapa kerangka kerja seperti parameter matriks dukungan JAX-RS
- Saat browser mengirimkan formulir melalui GET, params menjadi params kueri. Jadi itu berakhir dalam dua jenis parameter untuk tugas yang sama. Untuk tidak membingungkan pengguna layanan REST dan membatasi upaya untuk pengembang layanan, akan lebih mudah untuk menggunakan selalu kueri params - di area ini.
Karena pengembang layanan dapat memilih kerangka kerja dengan dukungan param matriks, satu-satunya kelemahan yang tersisa adalah browser membuat dengan parameter kueri default.
Apakah ada kerugian lain? Apa yang akan kamu lakukan?
Jawaban:
Perbedaan penting adalah bahwa parameter matriks berlaku untuk elemen jalur tertentu sementara parameter kueri berlaku untuk permintaan secara keseluruhan. Ini mulai berlaku saat membuat kueri gaya REST yang rumit ke berbagai tingkat sumber daya dan sub-sumber daya:
Itu benar-benar turun ke namespacing.
Catatan: 'level' sumber daya di sini adalah
categories
danobjects
.Jika hanya parameter kueri yang digunakan untuk URL multi-level, Anda akan berakhir dengan
Dengan cara ini Anda juga akan kehilangan kejelasan yang ditambahkan oleh lokalitas parameter dalam permintaan. Selain itu, saat menggunakan kerangka kerja seperti JAX-RS, semua parameter kueri akan muncul di setiap penangan sumber daya, yang mengarah ke potensi konflik dan kebingungan.
Jika kueri Anda hanya memiliki satu "level", maka perbedaannya tidak terlalu penting dan kedua jenis parameter ini dapat dipertukarkan secara efektif, namun, parameter kueri umumnya didukung lebih baik dan lebih dikenal luas. Secara umum, saya akan merekomendasikan Anda tetap dengan parameter kueri untuk hal-hal seperti formulir HTML dan API HTTP tingkat tunggal yang sederhana.
sumber
/?
bagian mewakili sumber daya??
dimulai parameter permintaan bagian dari permintaan. Parameter kueri adalah tipe paling umum dari parameter URL, berlawanan dengan parameter matriks. Garis miring sebelum tanda tanya memastikan bahwa parameter kueripage
tidak mengalami parameter matriks yang mendahului garis miring. Saya kira jika tidak ada parameter matriks yang dilampirkancategories
, parameter kueri dapat dilampirkan tanpa garis miring seperti ini:http://example.com/res/categories?page=1
Selain jawaban Tim Sylvester, saya ingin memberikan contoh bagaimana parameter matriks dapat ditangani dengan JAX-RS .
Parameter matriks pada elemen sumber daya terakhir
Anda dapat mengaksesnya menggunakan
@MatrixParam
anotasiTanggapan
Tetapi seperti negara-negara Javadoc
... apa yang membawa kita ke poin 2
Parameter matriks di tengah URL
Anda dapat mengakses parameter matriks di mana saja menggunakan variabel jalur dan
@PathParam
PathSegment
.Tanggapan
Karena parameter matriks disediakan sebagai
MultivaluedMap
Anda dapat mengakses masing-masing olehatau jika Anda hanya membutuhkan yang pertama
Dapatkan semua parameter matriks sebagai satu parameter metode
Gunakan
List<PathSegment>
untuk mendapatkan semuanyaTanggapan
sumber
--Terlalu penting untuk dipindahkan ke bagian komentar .--
Saya tidak yakin apa masalahnya dengan URL matriks. Menurut artikel desain w3c yang ditulis TBL, itu hanya ide desain dan secara eksplisit menyatakan bahwa itu bukan fitur web. Hal-hal seperti URL relatif tidak diterapkan ketika menggunakannya. Jika Anda ingin menggunakannya, tidak apa-apa; tidak ada cara standar untuk menggunakannya karena ini bukan standar. - Steve Pomeroy
Jadi jawaban singkatnya adalah, jika Anda membutuhkan RS untuk tujuan bisnis, Anda lebih baik menggunakan parameter permintaan.
sumber