REST (Representational State Transfer) — это архитектурный стиль для создания веб-сервисов, основанный на стандартных HTTP-методах и статусах.
Метод | Описание | Пример использования |
---|---|---|
GET | Получение ресурса | Получить данные пользователя |
POST | Создание ресурса | Создать нового пользователя |
PUT | Полное обновление ресурса | Обновить все данные |
PATCH | Частичное обновление | Обновить только email |
DELETE | Удаление ресурса | Удалить пользователя |
$requestMethod = $_SERVER['REQUEST_METHOD'];
$uri = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
$uri = explode('/', trim($uri, '/'));
// Пример: /api/users/1 → ['api', 'users', '1']
$resource = $uri[1] ?? null;
$resourceId = $uri[2] ?? null;
header('Content-Type: application/json');
try {
switch ("$requestMethod $resource") {
case 'GET users':
echo json_encode(getUsers());
break;
case 'GET users' when $resourceId:
echo json_encode(getUser($resourceId));
break;
case 'POST users':
$data = json_decode(file_get_contents('php://input'), true);
echo json_encode(createUser($data));
break;
default:
http_response_code(404);
echo json_encode(['error' => 'Not Found']);
}
} catch (Exception $e) {
http_response_code(500);
echo json_encode(['error' => $e->getMessage()]);
}
function getUsers() {
// В реальном приложении - запрос к БД
return [
['id' => 1, 'name' => 'John'],
['id' => 2, 'name' => 'Jane']
];
}
function getUser($id) {
$users = getUsers();
foreach ($users as $user) {
if ($user['id'] == $id) {
return $user;
}
}
throw new Exception('User not found', 404);
}
function createUser($data) {
// Валидация данных
if (empty($data['name'])) {
throw new Exception('Name is required', 400);
}
// В реальном приложении - сохранение в БД
return ['id' => 3, 'name' => $data['name']];
}
// routes/api.php
Route::apiResource('users', UserController::class);
// app/Http/Controllers/UserController.php
class UserController extends Controller
{
public function index()
{
return User::all();
}
public function store(Request $request)
{
return User::create($request->validate([
'name' => 'required|string',
'email' => 'required|email|unique:users'
]));
}
// ... другие методы
}
Стандартные HTTP-статусы:
Версионирование API:
/api/v1/users
Accept: application/vnd.myapi.v1+json
Пагинация:
{
"data": [...],
"meta": {
"current_page": 1,
"per_page": 10,
"total": 100
}
}
Аутентификация:
Используйте инструменты:
Пример теста с PHPUnit:
class ApiTest extends TestCase
{
public function testGetUsers()
{
$response = $this->get('/api/users');
$response->assertStatus(200)
->assertJsonStructure([
'*' => ['id', 'name']
]);
}
}
REST API на PHP создается с использованием стандартных HTTP-методов и статусов. Для простых API можно использовать чистый PHP, но для production-решений лучше применять фреймворки (Laravel, Symfony). Ключевые аспекты: единообразие, версионирование, пагинация и грамотное документирование.