Lekce 1 - REST API v Django REST - Úvod do webových API Nové
Vítejte v e-learningovém kurzu Django REST Framework, kde se seznámíme s tvorbou moderních webových aplikací pomocí REST API. API jsou nejčastější typy projektů v Django REST Frameworku. Naším cílem bude vytvořit jednoduché RESTful API pro správu databáze filmů. Data o filmech, režisérech a hercích budeme moci přidávat, upravovat nebo mazat a samozřejmě si je i prohlížet.
Pro komunikaci s naším API v Pythonu budeme využívat již existujícího javascriptového klienta v Reactu nebo Angularu. Ukažme si, jak bude práce s naším API v klientu vypadat:

V dnešním Django REST Framework tutoriálu si vysvětlíme, proč se moderní webové aplikace vytvářejí pomocí API.
Minimální požadavky
Kurz předpokládá znalosti:
- Programování v Pythonu v rozsahu kurzů:
- Základní principy frameworku Django.
Pokud některé ze znalostí nemáte, absolvujte nejprve daný kurz.
Výhodou je zkušenost se:
- SQLite nebo jinou SQL databází,
- JavaScriptem, ideálně s knihovnou React nebo frameworkem Angular.
Kurzem budete moci projít, i když znalosti JavaScriptu nemáte. Jen nebudete rozumět tomu, jak klient funguje, což v zásadě nevadí – zaměřujeme se zde na server v Pythonu a Django REST Framework.
Co dělat, když mi něco v kurzu nepůjde?
Právě startuješ rozsáhlý a pokročilý kurz, ve kterém musíme s každou změnou aktualizovat buď všechny, nebo minimálně část vzorových projektů ke stažení. Není tedy již možné udržovat vzorové projekty pro každou lekci, jako tomu bylo např. v Základech programování. V kurzu je několik archivů se vzorovým projektem ke stažení, které tvoří záchytné body.
V případě jakéhokoli problému pokračuj ve výkladu a dojdi do nejbližší lekce s archivem. Tam si stáhni funkční vzorový projekt. Ten si můžeš porovnat se svým kódem a najít si tak chybu.
Motivace
V předchozím kurzu Základy Django frameworku pro Python jsme si vytvořili aplikaci kompletně jen v Djangu. V minulosti se webové aplikace opravdu takto tvořily a dodnes se některé aplikace tak i vyvíjejí. Hlavně ty, které jsou zaměřené na články (např. ITnetwork takto funguje).
Avšak v praxi se dnes na webu používá spousta aplikací, které jsou opravdu spíše aplikacemi než webovými stránkami s články, např. Spotify nebo Google Docs.

Od takové aplikace uživatel čeká spíše funkčnost, jakou mají třeba desktopové aplikace běžící v systému Windows, a ne webové stránky, kde se celá stránka přenačte vždy, když se na něco klikne. Proto se dnes server již nepoužívá k posílání celé stránky do prohlížeče, ale pouze k posílání dat, která si stránka nebo aplikace zpracovává, aniž se musí neustále obnovovat a vykreslovat.
Jak funguje aplikace s API?
Taková webová aplikace má potom dvě části a jedná se v podstatě o dvě oddělené aplikace:
- API server – Aplikace s databází běžící na vzdáleném serveru, která posílá a přijímá data. Tuto aplikaci budeme v tomto kurzu vytvářet.
- Tlustý klient – Webová stránka v JavaScriptu nebo mobilní aplikace, které se serverem komunikují. Tuto aplikaci si jen stáhneme a budeme ji používat pro komunikaci s naším API serverem. Pro zájemce se jedná o aplikaci vytvořenou podle kurzů REST API klient v Reactu - Filmová databáze nebo Základy Angular frameworku. Můžete se tedy podívat, jak byla vytvořena, a případně si ji i upravit.
Výhodou serveru je samozřejmě to, že data naší aplikace jsou na internetu, a tudíž stále aktuální. Kdokoli si spustí klienta, uvidí poslední data, například to, jaké byly dnes přidané nové filmy.
API
API je zkratka pro Application Programming Interface, česky aplikační programové rozhraní. Je to obecně cokoli, co umožňuje jednotlivým částem softwaru komunikovat mezi sebou. Komunikace mezi serverem a klientem musí být samozřejmě přesně definovaná, jinak si aplikace mezi sebou nebudou rozumět. Náš server tedy naprogramujeme podle dokumentace, aby poskytoval API (rozhraní), se kterým daný klient umí pracovat.
API si můžeme představit jako číšníka v restauraci, který zajišťuje (a překládá) komunikaci mezi hostem a kuchařem. Nebo jako palubní desku automobilu, která pomocí přesně definovaných metod (tlačítka na desce) předá to, co řidič (jedna komponenta) chce, jiné komponentě (motoru). A návod k autu je jako API dokumentace, kde jsou jednotlivé metody (tlačítka) popsané.
Existují grafická API, API pro frameworky a knihovny, API operačních systémů, ale nás budou zajímat hlavně webová API.
Webová API
Webové API definuje, jak spolu komunikují nějaké komponenty po internetu. Synonymem může být webová služba. Typicky jde o jednu z následujících možností:
- Dvě části aplikace – Webová stránka si dotahuje ze serveru potřebná data pomocí AJAX dotazu.
- Dvě různé aplikace – Mobilní aplikace si stahuje data z webu.
Naše webové API bude umožňovat provádět operace nad databází filmů, např. vyhledá existující film nebo vloží film nový. Webová API samozřejmě nejsou omezena jen na databáze, můžeme prostřednictvím nich posílat SMS, zjistit aktuální počasí a podobně.
Ukázka webového API
Malé, ale velmi populární API mezi českými e-shopy běží na stránkách České národní banky. Konkrétně na této adrese.
Na adrese jsou dostupné kurzy měn pro aktuální den. Nejde však o žádnou HTML stránku, nýbrž o surová data ve formátu CSV. Webová API totiž nejsou určená lidem, ale programům. Výstup tohoto API vypadá takto:
07.01.2019 #4 země|měna|množství|kód|kurz Austrálie|dolar|1|AUD|15,947 Brazílie|real|1|BRL|6,053 Bulharsko|lev|1|BGN|13,076 Čína|žen-min-pi|1|CNY|3,262 Dánsko|koruna|1|DKK|3,425 EMU|euro|1|EUR|25,575 Filipíny|peso|100|PHP|42,647 Hongkong|dolar|1|HKD|2,852 Chorvatsko|kuna|1|HRK|3,442 Indie|rupie|100|INR|32,093 Indonesie|rupie|1000|IDR|1,586 Island|koruna|100|ISK|18,916 Izrael|nový šekel|1|ILS|6,049 Japonsko|jen|100|JPY|20,641 Jižní Afrika|rand|1|ZAR|1,612 Kanada|dolar|1|CAD|16,737 Korejská republika|won|100|KRW|1,996 Maďarsko|forint|100|HUF|7,965 Malajsie|ringgit|1|MYR|5,431 Mexiko|peso|1|MXN|1,156 MMF|ZPČ|1|XDR|31,079 Norsko|koruna|1|NOK|2,609 Nový Zéland|dolar|1|NZD|15,111 Polsko|zlotý|1|PLN|5,960 Rumunsko|leu|1|RON|5,485 Rusko|rubl|100|RUB|33,405 Singapur|dolar|1|SGD|16,467 Švédsko|koruna|1|SEK|2,502 Švýcarsko|frank|1|CHF|22,780 Thajsko|baht|100|THB|69,878 Turecko|lira|1|TRY|4,169 USA|dolar|1|USD|22,347 Velká Británie|libra|1|GBP|28,501
Toto API používá např. web ITnetwork, který si z něj v pravidelných
časových intervalech aktualizuje kurz EUR pro nákupy kurzů ze Slovenska.
Každý řádek reprezentuje jednu měnu vůči české koruně, sloupce v
řádku jsou oddělené znakem |
.
Ukázka API pro získání detailu herce
Pro ilustraci si ukažme také to, jak bude vypadat odpověď API, které budeme v kurzu vytvářet. Níže je uvedena odpověď na požadavek klienta na konkrétního herce ve formátu JSON:
{ "_id": "1", "name": "Dwayne Johnson", "birthDate": "1972-05-02T00:00:00.000Z", "country": "USA", "biography": "Nejprve atlet a hráč amerického fotbalu, poté wrestler a následně herec.", "role": "actor", "__v": 0 }
Pokud jste se s JSON ještě nesetkali, nemusíte mít strach, brzy si jej vysvětlíme. Naším úkolem tedy bude vytvořit takovouto službu s databází, s níž se bude komunikovat pomocí textových zpráv, jako je ta výše.
V další lekci, REST API v Django REST - SOAP, GraphQL, REST a JSON, se seznámíme s různými typy aplikačních rozhraní, abychom mohli tvořit zajímavé webové aplikace.