V tomto článku si ukážeme, jak vytvořit jednoduché REST API v PHP 8.3, které umožní provádět CRUD operace (Create, Read, Update, Delete) nad seznamem položek. Použijeme čistý PHP kód bez frameworků, abychom co nejvíce pochopili, jak REST API funguje.
1. Nastavení projektu
- Vytvořte složku pro projekt:
mkdir php-rest-api cd php-rest-api
- Vytvořte soubor
index.php
, který bude sloužit jako vstupní bod API.
2. Datová struktura
Pro jednoduchost budeme data uchovávat v souboru data.json
. Tento soubor bude obsahovat seznam položek ve formátu JSON.
data.json:
[
{"id": 1, "name": "Položka 1", "description": "Popis položky 1"},
{"id": 2, "name": "Položka 2", "description": "Popis položky 2"}
]
3. Implementace REST API
Otevřete soubor index.php
a napište následující kód.
<?php
header("Content-Type: application/json");
// Načítání dat ze souboru
function loadData(): array {
$data = file_get_contents('data.json');
return json_decode($data, true);
}
// Ukládání dat do souboru
function saveData(array $data): void {
file_put_contents('data.json', json_encode($data, JSON_PRETTY_PRINT));
}
// Zjištění HTTP metody a cesty
$method = $_SERVER['REQUEST_METHOD'];
$path = trim($_SERVER['PATH_INFO'] ?? '/', '/');
// Rozdělení cesty na segmenty
$segments = explode('/', $path);
$data = loadData();
// Funkce pro odpovědi
function respond($status, $response) {
http_response_code($status);
echo json_encode($response);
exit;
}
// Route handling
if ($segments[0] === 'items') {
// GET /items - seznam položek
if ($method === 'GET' && count($segments) === 1) {
respond(200, $data);
}
// GET /items/{id} - detail položky
if ($method === 'GET' && count($segments) === 2) {
$id = (int) $segments[1];
foreach ($data as $item) {
if ($item['id'] === $id) {
respond(200, $item);
}
}
respond(404, ["message" => "Položka nenalezena"]);
}
// POST /items - vytvoření položky
if ($method === 'POST' && count($segments) === 1) {
$input = json_decode(file_get_contents('php://input'), true);
if (!isset($input['name']) || !isset($input['description'])) {
respond(400, ["message" => "Neplatná data"]);
}
$newItem = [
"id" => end($data)['id'] + 1,
"name" => $input['name'],
"description" => $input['description']
];
$data[] = $newItem;
saveData($data);
respond(201, $newItem);
}
// PUT /items/{id} - aktualizace položky
if ($method === 'PUT' && count($segments) === 2) {
$id = (int) $segments[1];
$input = json_decode(file_get_contents('php://input'), true);
foreach ($data as &$item) {
if ($item['id'] === $id) {
$item['name'] = $input['name'] ?? $item['name'];
$item['description'] = $input['description'] ?? $item['description'];
saveData($data);
respond(200, $item);
}
}
respond(404, ["message" => "Položka nenalezena"]);
}
// DELETE /items/{id} - smazání položky
if ($method === 'DELETE' && count($segments) === 2) {
$id = (int) $segments[1];
foreach ($data as $index => $item) {
if ($item['id'] === $id) {
array_splice($data, $index, 1);
saveData($data);
respond(204, null);
}
}
respond(404, ["message" => "Položka nenalezena"]);
}
}
// Neznámá cesta
respond(404, ["message" => "Neplatná cesta"]);
4. Testování API
Můžete API testovat pomocí nástrojů jako Postman nebo curl:
- Získání seznamu položek:
curl -X GET http://localhost/items
- Vytvoření položky:
curl -X POST http://localhost/items -H "Content-Type: application/json" -d '{"name": "Položka 3", "description": "Popis položky 3"}'
- Aktualizace položky:
curl -X PUT http://localhost/items/1 -H "Content-Type: application/json" -d '{"name": "Nová položka 1"}'
- Smazání položky:
curl -X DELETE http://localhost/items/1
Závěr
Tento článek ukazuje základní principy REST API v PHP. Pro produkční nasazení by bylo vhodné použít framework (např. Laravel nebo Nette) a databázi pro ukladání dat.