Ответ
При успешной обработке запроса сервер возвращает статус-код из класса 2xx (Success). Конкретный код зависит от типа операции и соглашений API:
200 OK— самый распространенный ответ. Запрос успешно обработан, и тело ответа содержит запрошенные данные (например, результат GET-запроса или результат выполнения операции).-
201 Created— указывает, что новый ресурс был успешно создан в результате запроса (обычно POST). В заголовкеLocationдолжен быть указан URI созданного ресурса.// Пример ответа в Symfony контроллере после создания пользователя public function createUser(Request $request): JsonResponse { $user = new User($request->get('email')); $this->entityManager->persist($user); $this->entityManager->flush(); return $this->json( ['id' => $user->getId(), 'email' => $user->getEmail()], Response::HTTP_CREATED, // 201 ['Location' => '/api/users/' . $user->getId()] ); } 204 No Content— сервер успешно выполнил запрос, но не возвращает никакого содержимого в теле ответа. Часто используется для операций DELETE или PUT, когда нужно просто подтвердить успех.202 Accepted— запрос принят на обработку, но она еще не завершена (асинхронные задачи).206 Partial Content— сервер возвращает только часть данных (используется для докачки файлов).
Проверка успешного ответа в PHP (с использованием Guzzle HTTP Client):
$client = new GuzzleHttpClient();
$response = $client->post('https://api.example.com/items', [
'json' => ['name' => 'New Item']
]);
$statusCode = $response->getStatusCode();
if ($statusCode >= 200 && $statusCode < 300) {
// Запрос успешен
$body = json_decode($response->getBody(), true);
echo 'Создан элемент с ID: ' . $body['id'];
// Можно проверить конкретный код
if ($statusCode === 201) {
$newItemUrl = $response->getHeaderLine('Location');
echo ' Новый ресурс по адресу: ' . $newItemUrl;
}
} else {
// Обработка ошибки
throw new Exception('Запрос не удался: ' . $statusCode);
}
Выбор конкретного кода — важная часть дизайна RESTful API, так как он помогает клиенту понять результат операции без необходимости парсинга тела ответа.
Ответ 18+ 🔞
Э, слушай, вот тебе на самом деле важная штука, про которую многие забывают, а потом удивляются, почему у них всё ебется. Когда твой запрос таки долетел до сервера и тот его не послал нахуй, он вернёт статус из семейства 2xx (Success). Но тут, бля, не всё так просто — есть нюансы, ёпта.
200 OK— это классика, как борщ с пампушкой. Всё чётко, запрос отработал, и в теле ответа лежит то, что ты просил. Например, список пользователей после GET-запроса.-
201 Created— вот это уже поинтереснее. Это когда ты, сука, что-то создал (обычно POST'ом), и сервер тебе говорит: «Ну всё, чувак, родил ты нового юзера, держи его айдишник». И в заголовках ещё должен быть адрес, где этого новорождённого найти. Без этого — манда с ушами.// Допустим, в Symfony ты создал какого-то чела public function createUser(Request $request): JsonResponse { $user = new User($request->get('email')); $this->entityManager->persist($user); $this->entityManager->flush(); // Вот тут важно не забыть про заголовок Location, а то будет пиздец return $this->json( ['id' => $user->getId(), 'email' => $user->getEmail()], Response::HTTP_CREATED, // Это и есть 201 ['Location' => '/api/users/' . $user->getId()] ); } 204 No Content— а это когда ты, например, удалил что-то (DELETE) или обновил (PUT), и сервер тебе отвечает: «Да, бля, сделано, но смотреть тут не на что, тело ответа пустое». Типа, доверия ебать ноль, но так и задумано.202 Accepted— принято, но не готово. Асинхронщина, понимаешь? Запрос взяли в работу, а результат будет позже. Сиди, жди, не дёргайся.206 Partial Content— это когда ты качаешь порнофильм, а интернет говно, и ты просишь докачать с того места, где оборвалось. Сервер тебе шлёт только кусок данных.
А вот как это проверить на практике, чтобы не облажаться (на примере Guzzle):
$client = new GuzzleHttpClient();
$response = $client->post('https://api.example.com/items', [
'json' => ['name' => 'New Item']
]);
$statusCode = $response->getStatusCode();
// Главное правило: если код между 200 и 299 — всё пиздато
if ($statusCode >= 200 && $statusCode < 300) {
// Ура, товарищи!
$body = json_decode($response->getBody(), true);
echo 'Создан элемент с ID: ' . $body['id'];
// А можно и уточнить, что именно за успех
if ($statusCode === 201) {
$newItemUrl = $response->getHeaderLine('Location');
echo ' Новый ресурс по адресу: ' . $newItemUrl;
}
} else {
// А вот тут уже начинается ад. Обрабатывай ошибку.
throw new Exception('Запрос не удался: ' . $statusCode);
}
Короче, выбор правильного статус-кода — это не просто формальность, а часть уважения к тому, кто будет твой API использовать. Иначе получится хитрая жопа, когда по коду 200 прилетает сообщение об ошибке. Так делать — пидарас шерстяной.