08 - REST API
- Teorie
- HTTP
- REST API
- Slim Framework
Teorie
Úlohy
Příprava
Pomocí composeru přidejte do projektu Slim framework
$ composer require slim/slim:^4.0 $ composer require slim/psr7
- Vytvořte nový PHP skript (např. server.php), ve kterém vytvoříte kód serveru, můžete použít kostru podle dokumentace
- Všechny API odpovědi vracejte ve formátu JSON
Produkty
- Vytvořte seznam produktů a k němu následující API
GET /products
- vrátí seznam všech produktůGET /products/{id}
- Pokud produkt s daným id existuje, API vrátí jeho data
- Pokud ne, vrátí HTTP chybu
404 Not found
- Seznam produktů můžete vytvořit jako pole instancí třídy Product
Zákazníci
- Vytvořte API pro registraci uživatelů
- Do Customer modelu přidejte položky username a password
Vytvořte následující API
> POST /customers { "name": "Karel Novák", "username": "knovak", "password": "password" } < 201 Created // No response body
- Ověřte, že request obsahuje všechny hodnoty
Pokud některá z hodnot chybí, API vrátí
400 Bad request
a pole chyb, např.< 400 Bad Request { "errors": [ "Missing field username", "Missing field password" ] }
- Není potřeba instanci Customer reálně ukládat
- Můžete použít middleware pro načítání request body
- Vytvořte seznam zákazníků API pro získání profilu aktuálního zákazníka pomocí HTTP Basic Auth
- Seznam zákazníků můžete vytvořit jako pole instancí třídy Customer, podobně jako v úloze s produkty
- Přidejte do aplikace další routu
GET /customer/current
- Vytvořte middleware, který
- ověří, že v request existuje hlavička Authorization dekóduje z ní username a password a ověří, že takový zákazník existuje
- pokud ne, vrátí 401 Unauthorized
- předá objekt zákazníka jako atribut do requestu
- ověří, že v request existuje hlavička Authorization dekóduje z ní username a password a ověří, že takový zákazník existuje
- Middleware přidejte k routě
/customer/current
. - V handleru pro
/customer/current
použijte objekt zákazníka z requestu a serializujte ho do JSONu Odpověď nesmí obsahovat heslo zákazníka
> GET /customer/current > Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ= < 200 OK { "name": "Karel Novák", "username": "knovak" }
> GET /customer/current < 401 Unauthorized