Sobes.tech
Junior

Môžeme použiť parametre dotazu (query) namiesto tela požiadavky (body)?

sobes.tech AI

Odpoveď od AI

Áno, ale záleží to od typu požiadavky a prenesených informácií.

Parametre požiadavky (Query Parameters)

  • Prenášajú sa v URL za znakom ? vo forme párov kľúč=hodnota oddelených &.
  • Často sa používajú pre GET požiadavky na filtrovanie, zoradenie, stránkovanie dát (napríklad: /api/items?category=electronics&sort=price).
  • Sú obmedzené veľkosťou v väčšine prehliadačov a serverov.
  • Sú viditeľné v logoch servera a histórii prehliadača (potenciálny bezpečnostný problém pre citlivé údaje).
  • Jednoducho sa cache-ujú.

Telo požiadavky (Request Body)

  • Prenáša sa v tele HTTP požiadavky.
  • Často sa používa pre POST, PUT, PATCH požiadavky na prenos väčších objemov dát, vytváranie alebo aktualizáciu zdrojov (napríklad: odoslanie formulára, JSON objektu).
  • Nie je prísne obmedzené veľkosťou (v rámci konfigurácií serverov).
  • Nie je viditeľné v URL, čo ich robí vhodnejšími na prenos citlivých dát.
  • Predvolene sa necache-ujú prehliadačmi.
  • Môžu obsahovať rôzne typy dát (JSON, XML, formuláre).

Prehľad rozdielov:

Kritérium Parametre požiadavky (Query Parameters) Telo požiadavky (Request Body)
Umiestnenie URL (po ?) HTTP telo požiadavky
Typické metódy GET POST, PUT, PATCH
Použitie Filtrovanie, zoradenie, stránkovanie Vytváranie/aktualizácia zdrojov, prenos veľkých dát
Veľkosť Obmedzená Prakticky neobmedzená
Viditeľnosť Viditeľné v URL Nie je viditeľné v URL
Cacheovanie Jednoducho cache-ovateľné Nie cacheované (štandardne)
Bezpečnosť Menej vhodné pre citlivé údaje Vhodnejšie pre citlivé údaje

Kedy použiť čo namiesto toho:

  • Query Parameters namiesto Body: teoreticky možné pre metódy POST, PUT a pod., ale neodporúča sa na prenos hlavného obsahu požiadavky. Môže narušiť sémantiku HTTP metód a sťažiť spracovanie. Používa sa veľmi zriedkavo, hlavne pre veľmi jednoduché prípady alebo špecifické architektúry. Prenos veľkých alebo štruktúrovaných dát cez query reťazec nie je vhodný.
  • Body namiesto Query Parameters: nie je možné pre GET požiadavky, pretože štandard HTTP nedefinuje sémantiku tela požiadavky pre GET. Pre iné metódy (POST, PUT a pod.) je telo štandardným spôsobom prenosu dát a je vhodnejšie, keď sa prenášajú štruktúrované alebo veľké objemy informácií, alebo ak sú dáta citlivé.

Vo väčšine prípadov je vhodné dodržiavať osvedčené konvencie: používať query parameters pre GET na filtrovanie/identifikáciu a body na odoslanie dát pri požiadavkách, ktoré menia stav (POST, PUT, PATCH).