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).