Jdi na navigaci předmětu

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
    • 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

Domácí úkol