Jednoduché API ve frameworku Slim 4 – č. 2 Základní CRUD
- Jednoduché API ve frameworku Slim 4 – č. 1 Instalace
- Jednoduché API ve frameworku Slim 4 – č. 2 Základní CRUD
- Jednoduché API ve frameworku Slim 4 – č. 3 Struktura API a připojení k databázi
- Jednoduché API ve frameworku Slim 4 – č. 4 Testování funkcionality našeho malého API
- Jednoduché API ve frameworku Slim 4 – č. 5 Vylepšení UserControlleru
- Jednoduché API ve frameworku Slim 4 – č. 6 Přidání Model a Repositories
- Jednoduché API ve frameworku Slim 4 – č. 7 Validace dat
- Jednoduché API ve frameworku Slim 4 – č. 8 Přidáme si do datbáze produkty
Takže v dalším dílu bychom si naše API rozšířili o základní CRUD operace. Minule jsem provedli základní instalaci frameworku a vytvoření jednoduchého endpointu pro ověření správného výstupu ve formátu JSON. Dnes bychom si API rozšířili o základní CRUD operace.
GET /api/users
– získá seznam všech uživatelůGET /api/users/{id}
– získá konkrétního uživatelePOST /api/users
– vytvoří nového uživatelePUT /api/users/{id}
– aktualizuje uživateleDELETE /api/users/{id}
– smaže uživatele
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 |
<?php use Psr\Http\Message\ResponseInterface as Response; use Psr\Http\Message\ServerRequestInterface as Request; use Slim\Factory\AppFactory; use Slim\Exception\HttpNotFoundException; require __DIR__ . '/vendor/autoload.php'; // Vytvoření Slim aplikace $app = AppFactory::create(); // Middleware pro zpracování JSON $app->addBodyParsingMiddleware(); // Přidání error middleware $app->addErrorMiddleware(true, true, true); // Simulace databáze pomocí pole $users = [ ['id' => 1, 'name' => 'Jan Novák', 'email' => 'jan@example.com'], ['id' => 2, 'name' => 'Marie Nová', 'email' => 'marie@example.com'] ]; // GET - Získání všech uživatelů $app->get('/api/users', function (Request $request, Response $response) use ($users) { $response->getBody()->write(json_encode($users)); return $response ->withHeader('Content-Type', 'application/json') ->withStatus(200); }); // GET - Získání konkrétního uživatele $app->get('/api/users/{id}', function (Request $request, Response $response, array $args) use ($users) { $id = (int)$args['id']; $user = array_filter($users, function($u) use ($id) { return $u['id'] === $id; }); if (empty($user)) { throw new HttpNotFoundException($request); } $response->getBody()->write(json_encode(reset($user))); return $response ->withHeader('Content-Type', 'application/json') ->withStatus(200); }); // POST - Vytvoření nového uživatele $app->post('/api/users', function (Request $request, Response $response) use (&$users) { $data = $request->getParsedBody(); $newUser = [ 'id' => count($users) + 1, 'name' => $data['name'] ?? '', 'email' => $data['email'] ?? '' ]; $users[] = $newUser; $response->getBody()->write(json_encode($newUser)); return $response ->withHeader('Content-Type', 'application/json') ->withStatus(201); }); // PUT - Aktualizace uživatele $app->put('/api/users/{id}', function (Request $request, Response $response, array $args) use (&$users) { $id = (int)$args['id']; $data = $request->getParsedBody(); foreach ($users as &$user) { if ($user['id'] === $id) { $user['name'] = $data['name'] ?? $user['name']; $user['email'] = $data['email'] ?? $user['email']; $response->getBody()->write(json_encode($user)); return $response ->withHeader('Content-Type', 'application/json') ->withStatus(200); } } throw new HttpNotFoundException($request); }); // DELETE - Smazání uživatele $app->delete('/api/users/{id}', function (Request $request, Response $response, array $args) use (&$users) { $id = (int)$args['id']; foreach ($users as $index => $user) { if ($user['id'] === $id) { unset($users[$index]); return $response->withStatus(204); } } throw new HttpNotFoundException($request); }); // Spuštění aplikace $app->run(); |
Celou naši aplikaci jsme doplnili o $app->addErrorMiddleware(true, true, true); pro zobrazení chybových hlášení.
A také každý endpont nám nyní posílá i stavový kód požadavku např. $response->withStatus(204)