Memisahkan struktur dari data
Sebuah URL query sering ditulis setelah tanda tanya sebagai pasangan key=value yang dipisahkan oleh ampersand. Pemisah-pemisah itu memiliki makna struktural. Jika nilai itu sendiri berisi sebuah ampersand, ia harus diwakili dalam nilai daripada salah untuk pasangan lain. Sebuah encoder komponen mempersiapkan satu bagian data; sebuah pembuat kueri mengambil kunci dan nilai dan bergabung dengan seluruh struktur. Ini adalah dua tingkat pekerjaan yang berbeda. Jangan lewatkan kueri yang selesai melalui encoder komponen atau tanda tanyanya, tanda sama dan ampersand akan menjadi data. Sebaliknya, jangan tempelkan nilai-nilai tak dipercaya antara pemisah dan berharap bahwa peramban menebak batas yang dimaksud.
Sebuah kueri yang bekerja dengan kunci yang diulang
Misalkan layar pencarian memerlukan nilai q berupa merah & biru dan dua nilai tag, a serta b. Berikan alat JSON ke string kueri sebuah objek yang memuat q sebagai string dan tag sebagai array. Serialisasi formulirnya menghasilkan q=merah+%26+biru&tag=a&tag=b. Tanda tambah mewakili spasi dalam konvensi ini, sedangkan %26 melindungi ampersand yang menjadi bagian dari frasa pencarian. Jika hasilnya diuraikan dengan alat pasangan, q kembali menjadi merah & biru dan tag menjadi array berisi dua string. Pengulangan kunci itu disengaja: tag=a&tag=b berbeda dari satu nilai yang berisi koma. Ubah salah satu tag pada konverter tersemat dan periksa bahwa pasangan kunci serta nilainya tetap sesuai.
- Raw: q = merah & biru; tag = a, b
- Query: q=merah+%26+biru&tag=a&tag=b
- Menguraikan: q adalah satu frasa; tag memiliki dua nilai
Mengapa komponen bisa terlihat berbeda
Encoder komponen URL yang didedikasikan menggunakan aturan komponen untuk satu nilai. Sebuah ruang dapat muncul sebagai %20 di sana, sementara serializer kueri gaya URLSearchParams menggunakan plus untuk ruang. Kedua ejaan mungkin valid dalam konteks masing-masing, tetapi mereka tidak harus string yang identik. Sebuah plus literal dalam kueri gaya form harus dihindari sehingga tidak berubah menjadi ruang selama pengolahan. Mengonversi tanda persentase yang sudah dikonversi memberikan %25, tanda yang familiar dari encoding ganda yang tidak sengaja. Simpan kunci dan nilai mentah sampai pembuat kueri menanganinya, atau enkode satu komponen tepat sebelum perakitan manual. Hindari mencampur kedua strategi pada data yang sama.
Tahu apa yang dijaga perjalanan pulang-pergi
Pembacaan kueri MultiVerto mengubah kunci yang diulang menjadi array. Semua nilai kueri datang sebagai string, bahkan jika pembuat JSON menerima angka atau boolean sebelum serialisasi. Hal ini tidak mengembalikan tipe numerik asli yang hilang. Array kosong dan objek bersarang tidak memiliki representasi langsung dalam format kunci/nilai sederhana ini, sehingga pengembang menolak mereka. API yang berbeda juga memilih kebijakan yang berbeda untuk nilai kosong, kunci duplikat dan pemesanan. Sebuah perjalanan pulang-pergi dapat karena itu mempertahankan pasangan yang berguna tanpa mempertahankan setiap detail dari objek JSON yang lebih kaya. Periksa kontrak API yang sebenarnya sebelum memutuskan bagaimana array, kolom yang tidak ada dan string kosong harus muncul.
Buat kasus uji stabil
Mulai dengan target endpoint dan tuliskan setiap kunci dan nilai mentah secara terpisah. Susun kueri satu kali dan memeriksa keluaran untuk karakter terlindung yang dienkode. Menganalisisnya kembali untuk memastikan bahwa pasangan yang diinginkan masih hidup, terutama nilai yang berisi ampersand, tanda plus, tanda persentase dan teks non-ASCII. Uji kunci yang diulang jika server mendukung array, dan konfirmasikan bahwa server menafsirkannya dengan cara yang sama. Jangan pernah memasukkan rahasia dalam string kueri hanya karena karakternya dikodekan: URL dapat disalin, dicatat dan dibagikan. MultiVerto menghitung contoh secara lokal, tetapi URL yang Anda akhirnya menerbitkan atau mengirimkan memiliki visibilitas dan peraturan pemeliharaan sendiri.