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.


Část 1: Teorie

Co je REST

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

Klíčové vlastnosti

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 metody + CRUD

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

Idempotence: důležitý pojem

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

Konvence URL endpointů

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

HTTP stavové kódy (nejdůležitější)