- Mengusulkan metode HTTP baru, yaitu QUERY
- Metode permintaan yang aman dan idempoten, yang dapat mengirimkan konten saat request
- Dapat digunakan ketika data yang dikirim dalam request terlalu besar untuk dienkode ke dalam URI
- Jika parameter kueri berukuran beberapa KB atau lebih, banyak implementasi menerapkan batasan
- Sering kali batasan ini tidak dapat diketahui sebelumnya, dan karena harus dienkode, hal ini tidak efisien
- Karena itu, banyak implementasi menggunakan POST alih-alih GET untuk menjalankan kueri
- Namun tanpa pengetahuan spesifik tentang server, sulit mengetahui apakah operasi tersebut aman dan idempoten, sehingga tetap memiliki keterbatasan dasar yang sama seperti GET
- Metode QUERY menawarkan solusi untuk menjembatani kesenjangan antara penggunaan GET dan POST
- Seperti POST, input untuk operasi kueri dikirim di dalam konten request, bukan sebagai bagian dari URI request
- Namun tidak seperti POST, metode ini secara eksplisit aman dan idempoten, sehingga mendukung fitur seperti caching dan retry otomatis
Request
QUERY /contacts HTTP/1.1
Host: example.org
Content-Type: example/query
Accept: text/csv
select surname, givenname, email limit 10
Response
HTTP/1.1 200 OK
Content-Type: text/csv
Content-Location: /contacts/responses/42
Location: /contacts/queries/17
surname, givenname, email
Smith, John, john.smith@example.org
Jones, Sally, sally.jones@example.com
Dubois, Camille, camille.dubois@example.net
7 komentar
Saya tidak tahu kenapa ini perlu ditambahkan ke protokol.
Apakah benar ada begitu banyak skenario di mana parameter kueri melebihi beberapa KB?
https://www.baeldung.com/cs/http-get-with-body
Spesifikasi HTTP tampaknya memberi terlalu banyak ruang bagi pembaca untuk menafsirkannya sendiri dan berubah secara tidak konsisten, sampai-sampai terlihat seperti mereka ingin membuat metode yang benar-benar baru.
GET dengan body permintaan
Beberapa library client bahkan tidak menyediakan cara untuk mengirim
request bodysaat membuat permintaan GET, jadi ini sepertinya bisa menjadi alternatif.Dari sudut pandang implementasi library, bukankah ini justru usulan perubahan standar yang makin tidak diperlukan?
Dalam spesifikasi standar, GET tidak bisa memiliki request body, jadi library-lah yang secara sewenang-wenang mengirimkan request body...
Kalau begitu, bukankah tidak masalah jika cukup mengimplementasikan method kustom di level library saja?
Sulit untuk sepenuhnya menyangkal kebutuhannya, tetapi dibandingkan dengan PUT, PATCH, DELETE, dan sebagainya yang muncul saat HTTP berkembang dari 1.0 ke 1.1, rasanya ini kurang meyakinkan.
https://www.rfc-editor.org/rfc/rfc9110.html#name-method-definitions
https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/GET
https://stackoverflow.com/questions/978061/http-get-with-request-body
https://elastic.co/guide/en/…
Dalam spesifikasi standar, metode GET tidak menjelaskan bagian tentang body, tetapi tidak pernah melarang untuk menyertakannya.
Karena ada framework server yang tidak memproses body pada metode GET, MDN merekomendasikan agar tidak menyertakan body pada metode GET.
Elasticsearch mendukung body pada metode GET.
Menurut saya, jika spesifikasi harus diubah karena implementasi library, sepertinya perlu pertimbangan yang lebih matang.