Programování
Rest Api
Architektonický styl pro návrh webových služeb.
Zaměřuje se na data a využívá metod HTTP (GET, POST, PUT, DELETE) pro manipulaci s daty.
Klienty (jako jsou mobilní aplikace, webové aplikace) komunikují se servery pomocí těchto metod a datových formátů (často JSON nebo XML).
Vytváříme ASP.NET Core web API, tohle nám vytvoří API, které nám dá možnost posílat na webový server http požadavky a vracet nějaké informace.

Funguje je to uplně stejně jako v MVC, máme controllery, který vrací data místo zobrazení.

Controller vytváříme trošičku jinak.. Podobný controller, můžeme užít i v MVC projektu

Máme http request metody Když posíláme na server, musíme poslat
  • Http metodu
  • - Post, Get, Put, Delete
  • Body
  • - zde jsou podrobnější data, jako je třeba objekt v JSON, logicky v Get nebudeme posílat žádná data
Mapovani na akce
Každý API kontroller by měl mít attributy [Route("api/[controller]")] a [ApiController]. Route nám řiká kam se musíme doptávat, abychom dostali request.
Například:

Máme API controller PeopleController a jeho routa je [Route("api/[controller]")]. Takže pro aktivaci bude potřeba napsat api/People/[jakákoliv akce]

Příklad 2:
Máme API controller realEstatesController a jeho routa je [Route("houses/expensive/[controller]")]. Takže pro aktivaci bude potřeba napsat houses/expensive/realEstates/[jakákoliv akce]

Každá metoda by měla mít svoje označení o jakou http metodu se jedná. Do závorky té metody vkládáme jaké informace potřebuje její query string
Napříkad:
    
// Tímto jsme přidali nutnost přidat číslo na konec url 
// GET api/<ValuesController>/5
[HttpGet("{id}")]
public string Get(int id)
{
    return "value";
}

//Opět to samé, ale nyní musi být v těle string
// PUT api/<ValuesController>/5
[HttpPut("{id}")]
public void Put(int id, [FromBody] string value)
{
}
    
    
Response
Dá se vrátit prakticky skoro všechno, co má nějaký jednoduchý datový typ. Třeba struct, nebo jednoduchá třída nebo-li model.
    
return Json("nějaky objekt") // Vrací Json objekt

//XML vracíme jako string

return Ok("Nějaký objekt") //  http kodem 200

return Unauthorized("nějaky objekt") // http kodem 400

return List<string> 
    // mužeme vrace i jednoduše list věci, von je změní na json


return "Ahoj";
    
JSON a XML
Json
  • Lehký textový formát pro výměnu dat.
  • Strukturovaná data v podobě klíč-hodnota, pole a objekty.
  • Čitelný pro člověka i stroje, snadno se analyzuje a generuje.
    
{
  "jméno": "Jan",
  "příjmení": "Novák",
  "věk": 30,
  "adresa": {
    "město": "Praha",
    "PSČ": "100 00"
  },
  "zájmy": ["programování", "sport"]
}

        
    
Newtonsoft.Json
    
// Serializace objektu do JSON
var osoba = new Osoba { Jméno = "Jan", Příjmení = "Novák", Věk = 30 };
var json = JsonConvert.SerializeObject(osoba);
Console.WriteLine(json); // Vytiskne JSON řetězec

// Deserializace JSON do objektu
string jsonText = "{\"Jméno\":\"Jan\",\"Příjmení\":\"Novák\",\"Věk\":30}";
var deserializovanáOsoba = JsonConvert.DeserializeObject<Osoba>(jsonText);
Console.WriteLine(deserializovanáOsoba.Jméno); // Vytiskne "Jan"

        
    
XML
  • Označovací jazyk pro strukturovaná data..
  • Hierarchická struktura s tagy a atributy.
  • Čitelný pro člověka, pro stroje vyžaduje parsování.
    
<?xml version="1.0" encoding="utf-8"?>
<osoba>
  <jméno>Jan</jméno>
  <příjmení>Novák</příjmení>
  <věk>30</věk>
  <adresa>
    <město>Praha</město>
    <PSČ>100 00</PSČ>
  </adresa>
  <zájmy>
    <zájem>programování</zájem>
    <zájem>sport</zájem>
  </zájmy>
</osoba>
        
    
System.Xml.Serialization
    
// Serializace objektu do XML
var osoba = new Osoba { Jméno = "Jan", Příjmení = "Novák", Věk = 30 };
var xml = XmlSerializer.Serialize(osoba, typeof(Osoba));
Console.WriteLine(xml); // Vytiskne XML řetězec

// Deserializace XML do objektu
string xmlText = "<osoba><jméno>Jan</jméno><příjmení>Novák</příjmení><věk>30</věk></osoba>";
var deserializovanáOsoba = XmlSerializer.Deserialize(new StringReader(xmlText), typeof(Osoba)) as Osoba;
Console.WriteLine(deserializovanáOsoba.Jméno); // Vytiskne "Jan"
        
    
Stavové kódy HTTP
Stavové kódy HTTP informují klienta (např. webový prohlížeč) o výsledku jeho požadavku na server. Každý kód má specifický význam a sděluje, zda byl požadavek úspěšný, zda nastala chyba, nebo zda je nutné provést další akci.
  • 200 OK : Požadavek byl úspěšně zpracován a server odesílá požadovaný zdroj.
  • 201 Vytvořeno : Požadavek byl úspěšně splněn a na serveru byl vytvořen nový zdroj.
  • 301 Trvale přesměrováno : Požadovaný zdroj byl trvale přesunut na jinou adresu URL. Klient by měl automaticky přesměrovat na novou adresu.
  • 302 Nalezeno : Požadovaný zdroj byl dočasně přesunut na jinou adresu URL. Klient by měl přesměrovat na novou adresu.
  • 400 Špatná žádost : Požadavek klienta byl nesprávně formulován. Server nerozumí, co klient chce.
  • 401 Neoprávněno : Klient se nepokusil ověřit (např. zadáním uživatelského jména a hesla) a nemá přístup k požadovanému zdroji.
  • 403 Zakázáno : Klient má ověření, ale nemá oprávnění k přístupu k požadovanému zdroji.
  • 404 Nenalezeno : Požadovaný zdroj neexistuje na serveru.
  • 500 Vnitřní chyba serveru : Na serveru došlo k neočekávané chybě a nemohl zpracovat požadavek klienta.
Stavové kódy HTTP jsou důležitou součástí komunikace mezi klientem a serverem. Pochopení jejich významu vám pomůže při ladění webových aplikací a diagnostice problémů s připojením.
Jwt Token
JWT (JSON Web Token) je kompaktní a bezpečný formát pro reprezentaci identity a autorizačních informací mezi dvěma stranami. Často se používá v webových aplikacích a API pro autentizaci uživatelů a autorizaci přístupu k chráněným zdrojům.
  1. Klient (např. webová aplikace) odešle požadavek na server s přihlašovacími údaji (uživatelské jméno a heslo).
  2. Server ověří přihlašovací údaje klienta.
  3. Pokud je ověření úspěšné, server vygeneruje a podepíše JWT token.
  4. Server odešle JWT token klientovi.
  5. Klient uloží JWT token do zabezpečeného úložiště (např. localStorage v prohlížeči).
  6. Při každém dalším požadavku na server klient zahrne JWT token do hlavičky HTTP.
  7. Server ověří JWT token a na základě informací v tokenu určí identitu a oprávnění klienta.
  8. Server na základě oprávnění klienta rozhodne, zda má klient přístup k požadovanému zdroji.
Více informací: jwt.io
REST

REST je architektonický styl pro návrh webových služeb, který se zaměřuje na reprezentaci dat a využívá protokoly HTTP (GET, POST, PUT, DELETE) pro manipulaci s daty. Klienty (např. mobilní aplikace, webové stránky) komunikují se servery pomocí těchto metod a datových formátů (často JSON nebo XML).

RESTful formáty adres

RESTful formáty adres jsou URL adresy, které se řídí principy REST a usnadňují klientovi pochopení struktury a manipulace s daty.

Vlastnosti RESTful formátů adres:

  • Hierarchická struktura: Adresy odrážejí hierarchii dat na serveru. Například `/users/:id` by se dalo použít pro přístup k uživatelskému profilu s daným ID.
  • Smysluplné názvy: Názvy v adresách by měly jasně popisovat, co daný zdroj reprezentuje. Například `/users` by se dalo použít pro získání seznamu všech uživatelů.
  • Použití metod HTTP: Různé metody HTTP (GET, POST, PUT, DELETE) se používají pro různé operace s daty. Například GET se používá pro získání dat, POST pro vytvoření dat, PUT pro aktualizaci dat a DELETE pro smazání dat.
  • Formáty dat: Data se obvykle přenáší ve formátech JSON nebo XML.
Příklad: Formát adresy /users/:id

* `/users/` - Tato část adresy indikuje, že klient chce přistupovat k kontrolleru "uživatelé".
* `:id` - Tato část adresy je zástupný symbol pro ID uživatele. Klient by ho nahradil skutečným ID uživatele, ke kterému chce přistupovat. Například `/users/123` by znamenalo přístup k profilu uživatele s ID 123.