Nikdy nevíš, kdy to přijde
Zobrazit menu   MENU

6. REST API: Vytvoření endpointů POST, PUT a DELETE

V minulém díle jsem si vytvořili první endpointy našeho knižního API, které umožnili získat výpis všech knih i detailu jedné knihy. Dnes budeme pokračovat s dalšími zbývajícímí třemi, aby bylo naše API z minulého dílu kompletní. V minulých dílech jsme si pro zasílání požadavků na server vystačili s obyčejnými prohlížečem. Tentokrát nám již náš oblíbený prohlížeč stačit nebude. Na server budeme zasílat složitější požadavky, k čemuž budeme potřebovat specializovaný program. Vhodnou volbou, která je zdarma, je program POSTMAN. Doporučuji vám ho nainstalovat, budeme ho dnes rozhodně potřebovat.

API bylo naše API plnohodnotné, musíme nejen umět položky získat, ale také měnit, vytvářet a mazat. Právě tyto endpointy nyní půjdeme vytvořit.

Vytvoření - POST

K vytváření dat je určená metoda POST. Touto metodou se například obvykle odesílají formuláře na webových stránkách. Klient nám pomocí POST zašle data, která budeme dále zpracovávat. Abychom v našem Node.js programu, mohli s těmito daty jednoduše pracovat, musíme využít tzv. middleware. Jde o proces který něco zpracovává ve fázi mezi přijetím požadavku a odesláním odpovědi ze serveru. My nyní využijeme express.json(), který zpracuje tělo požadavku. Najde-li v něm nějaké zaslaná data ve formátu JSON, naplní s nimi request.body. Na začátek programu (po vytoření proměnné app), musíme přidat tento kód:

app.use(express.json());


Nyní se již můžeme vrhnout na tvorbu samotného endpointu sloužícího k vytvoření nové knihy:

app.post('/api/books', (request, response) => {
var new_book_id = books.slice(-1)[0].book_id + 1;

var book = {
book_id: new_book_id,
name: request.body.name,
author: request.body.author,
isbn: request.body.isbn
};

books.push(book);
response.send(book);
});


Na prvním řádku vidíme, že zpracováváme POST metodu a to na adrese /api/books. Jakmile na tuto adresu přijde volání POST metody, bude vždy obsloužena právě tímto kódem. Jako první musíme určit, jaké unikátní ID bude mít nová kniha. Pro naší ukázku jsem použil řešení, kdy vezmeme ID posledního prvku v poli (nejvyšší) a zvýšíme o jedna. Následující kód už je velmi jednoduchý.

Vytvoříme nový objekt book, který naplníme daty z request.body (kde máme naparsovaná data z požadavku). Takto vytvořený objekt pak vložíme do pole books, které nám v tuto chvíli slouží jako databáze. V posledním řádku již pouze klientovi navrátíme celý seznam, nyní již obsahující i nově vloženou knihu.

Po vyzkoušení tohoto endopointu musíte využít program POSTMAN. Jeho nastavení pro tento požadavek vidíte na obrázku níže:




Editace - PUT

Zpracování PUT požadavku bude podobné. Hlavní odlišností je, že na začátku musíme provést kontrolu, zda-li upravovaná položka skutečně existuje.

app.put('/api/books/:book_id', (request, response) => {
var book_id = Number(request.params.book_id);
var book = books.find(book => book.book_id === book_id);
if (!book) {
response.status(404).send('Kniha nenalezena');
}
else {
book.name = request.body.name;
book.author = request.body.author;
book.isbn = request.body.isbn;
response.send(book);
}
});


Na prvním řádku můžeme vidět, že zpracováváme metodu PUT a v adrese nám tentokrát figuruje book_id, parametr podle kterého určíme o kterou knihu se jedná. Nejdříve musíme hodnotu přetypovat na číslo, abychom měli jistotu, že s ní můžeme dále pracovat. Poté již můžeme pomocí metody .find() nad polem books vyhledat správnou knihu. Pokud žádnou nenalezneme, vracíme status 404 s hláškou že dané kniha nebyla nalezena, tím program končí.

Pokud jsme danou knihu v naší "databázi" nalezli, aktualizujeme jednotlivé atributy objektu book. Jako poslední krok opět vrátíme klientovi celé pole books, kde již bude upravená kniha s novými údaji.


Mazaní - DELETE

Naším posledním endpointem bude DELETE, sloužící ke smazání záznamu z naší databáze. Můžete vidět že adresa je stejná jako v případě PUT, tato část kódu ale zpracovává pouze volání metodou DELETE.

app.delete('/api/books/:book_id', (request, response) => {
var book_id = Number(request.params.book_id);
var book = books.find(book => book.book_id === book_id);
if (!book) {
response.status(404).send('Kniha nenalezena');
}
else {
books.splice(books.indexOf(book), 1);
response.send(books);
}
});


První část kódu je totožná jako v předchozím případě. Knihu se pokusíme nalézt a v neúspěšném případě o tom informujeme klienta. Pokud však knihu nalezneme, vyřadíme jí z pole books a opět vracíme seznam, ovšem již bez smazané knihy.

Nyní máme hotové naše malé API. V příštím díle si ho ještě vylepšíme o validaci (kontrolu) údajů zasílaných na server.


Další díly tutoriálu

4. Co je to REST API
5. REST API: Založení projektu a první endpoint
6. REST API: Vytvoření endpointů POST, PUT a DELETE
7. Validace dat