Superglobals принадлежат адаптеру
$_GET, $_POST, $_FILES, $_COOKIE и $_SERVER описывают транспорт. Если передать их целиком в сервис, предметная логика начнёт зависеть от регистра заголовка, формы поля и глобального состояния. Контроллер выбирает ожидаемые значения и создаёт команду.
Скрытое поле, disabled input и значение из собственного JavaScript остаются пользовательским вводом. Сервер повторяет проверку формы, диапазона и права на действие. Клиентская валидация отвечает за удобство, не за доверие.
Адаптация запроса
Метод выражает намерение
GET читает и не меняет состояние. POST создаёт действие или запускает команду, PUT заменяет известное представление, PATCH изменяет часть, DELETE удаляет. Идемпотентность описывает эффект повтора, а не отсутствие тела.
Не завершайте тренировку ссылкой GET: браузер, crawler или prefetch способен перейти по ней без намерения пользователя. Изменение выполняется защищённой формой POST с CSRF-токеном либо API-командой с соответствующим механизмом авторизации.
Ответ говорит клиенту, что произошло
HTML-форма после успеха применяет Post/Redirect/Get. API создания возвращает 201 и адрес ресурса, ошибка формы — 422 с картой полей, конфликт версии — 409. 500 не раскрывает stack trace, но содержит correlation id для журнала.
Content-Type устанавливается явно. Не угадывайте желаемый формат только по расширению URL, если контракт использует Accept. Для одного небольшого сервиса допустимы раздельные маршруты /workouts и /api/workouts — важнее последовательность, чем архитектурная мода.
Минимальный front controller
<?php
declare(strict_types=1);
$request = Request::fromGlobals();
$response = $router->dispatch($request);
http_response_code($response->status);
foreach ($response->headers as $name => $value) {
header($name . ': ' . $value);
}
echo $response->body;Лабораторная работа
Опишите POST /workouts для создания тренировки. Перечислите поля, заголовки, успешный статус, ошибки формы, конфликт повтора и право текущего пользователя.
Закрепите материал
Отметка, заметка, чек-лист и ответы остаются в localStorage этого браузера и не отправляются в аналитику.
Перелинковка со справочником
Проверка актуальности
- cheatsheetseries.owasp.orghttps://cheatsheetseries.owasp.org/cheatsheets/Input_Validation_Cheat_Sheet.htmlПервичный источник для актуализации фактов. Адрес приведён как текст и не является активной ссылкой.
- cheatsheetseries.owasp.orghttps://cheatsheetseries.owasp.org/cheatsheets/Cross-Site_Request_Forgery_Prevention_Cheat_Sheet.htmlПервичный источник для актуализации фактов. Адрес приведён как текст и не является активной ссылкой.
Текст и схемы созданы для этого самоучителя без воспроизведения страниц, иллюстраций и листингов приложенной книги. Проверено: .