Implementace REST API v ASP.NET, routování, controller, metody HTTP (GET, POST, PUT, DELETE)
Formát: 30 min praktická úloha, 15 min obhajoba + teorie. Podle informací z minulých let se u praktiky dodělává endpoint do existujícího starter projektu. Připraveno na to.
REST (Representational State Transfer) je architektonický styl pro komunikaci klient-server přes HTTP. Každý zdroj (resource) má svou URL a operace s ním odpovídají HTTP metodám.
Klasický chyták: REST není protokol, je to architektonický styl. HTTP je protokol, REST se postavil nad ním jako konvence "jak ho používat".
| Vlastnost | Co znamená |
|---|---|
| Stateless | Server si nepamatuje stav klienta. Každý request obsahuje vše potřebné (token, ID, atd.) |
| Client-Server | Klient a server jsou odděleny, komunikují přes HTTP |
| Uniform Interface | Jednotné konvence pro URL a metody |
| Cacheable | Odpovědi lze cachovat (GET typicky ano, POST ne) |
| Layered System | Klient nemusí vědět, jestli komunikuje přímo se serverem nebo přes proxy/CDN |
| Resource-based | Vše je "zdroj" identifikovaný URL |
Stateless je důležitý pojem: server si nic nepamatuje mezi requesty. Proto se token posílá v hlavičce každého requestu, ne v session.
| HTTP Metoda | CRUD | Atribut v ASP.NET | Stav úspěchu | Vrátí tělo |
|---|---|---|---|---|
| GET | Read | [HttpGet] |
200 OK | Ano |
| POST | Create | [HttpPost] |
201 Created | Ano (nový záznam) |
| PUT | Update (celý) | [HttpPut("{id}")] |
200 OK nebo 204 No Content | Volitelné |
| PATCH | Update (část) | [HttpPatch("{id}")] |
200 OK | Ano |
| DELETE | Delete | [HttpDelete("{id}")] |
204 No Content | Ne |
Idempotentní operace = můžeš ji volat víckrát se stejným výsledkem.
| Metoda | Idempotentní | Bezpečná |
|---|---|---|
| GET | Ano | Ano (nemění data) |
| POST | Ne (vytvoří nový záznam pokaždé) | Ne |
| PUT | Ano (nahradí stejně) | Ne |
| PATCH | Záleží na implementaci | Ne |
| DELETE | Ano (smazáno = smazáno) | Ne |
GET /api/produkty → seznam všech
GET /api/produkty/{id} → jeden záznam
POST /api/produkty → vytvoř nový
PUT /api/produkty/{id} → nahraď celý
PATCH /api/produkty/{id} → uprav část
DELETE /api/produkty/{id} → smaž
GET /api/produkty/{id}/recenze → vnořený zdroj
GET /api/produkty?skladem=true → filtrace přes query string