Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Что такое код ошибки HTTP
HTTP код ошибки (HTTP Status Code) — это трёхзначный код, который сервер возвращает в ответ на запрос клиента. Код указывает результат обработки запроса: успешно ли выполнено, произошла ли ошибка, нужно ли выполнить какое-то действие.
Категории кодов
1xx — Информационные (редкие)
- 100 Continue — продолжить отправку тела запроса
2xx — Успех
- 200 OK — запрос успешно выполнен
- 201 Created — ресурс создан
- 204 No Content — успех, но нет контента для возврата
3xx — Перенаправление
- 301 Moved Permanently — постоянный редирект
- 302 Found — временный редирект
- 304 Not Modified — ресурс не изменился
4xx — Ошибка клиента
- 400 Bad Request — некорректный запрос
- 401 Unauthorized — требуется авторизация
- 403 Forbidden — доступ запрещён
- 404 Not Found — ресурс не найден
- 429 Too Many Requests — слишком много запросов
5xx — Ошибка сервера
- 500 Internal Server Error — внутренняя ошибка сервера
- 502 Bad Gateway — ошибка шлюза
- 503 Service Unavailable — сервис недоступен
- 504 Gateway Timeout — timeout
Наиболее частые коды
200 OK — успешный запрос:
import requests
response = requests.get('https://api.example.com/users')
print(response.status_code) # 200
print(response.json()) # Данные пользователей
201 Created — ресурс создан:
response = requests.post('https://api.example.com/users',
json={'name': 'Alice', 'email': 'alice@example.com'})
print(response.status_code) # 201
print(response.json()) # Новый пользователь с ID
400 Bad Request — некорректный запрос:
response = requests.post('https://api.example.com/users',
json={'invalid_field': 'value'})
print(response.status_code) # 400
print(response.json()) # {'error': 'Missing required fields'}
401 Unauthorized — требуется авторизация:
response = requests.get('https://api.example.com/protected')
print(response.status_code) # 401
print(response.json()) # {'error': 'Unauthorized'}
403 Forbidden — доступ запрещён:
# У пользователя есть авторизация, но нет прав
response = requests.get('https://api.example.com/admin')
print(response.status_code) # 403
404 Not Found — ресурс не найден:
response = requests.get('https://api.example.com/users/999')
print(response.status_code) # 404
print(response.json()) # {'error': 'User not found'}
500 Internal Server Error — внутренняя ошибка сервера:
response = requests.get('https://api.example.com/users')
print(response.status_code) # 500
# Сервер сломался, возвращает ошибку
Обработка ошибок в коде
import requests
def fetch_user(user_id):
response = requests.get(f'https://api.example.com/users/{user_id}')
if response.status_code == 200:
return response.json()
elif response.status_code == 404:
print(f'Пользователь {user_id} не найден')
return None
elif response.status_code == 401:
print('Требуется авторизация')
return None
elif response.status_code >= 500:
print('Ошибка сервера')
return None
else:
print(f'Ошибка: {response.status_code}')
return None
user = fetch_user(123)
Правильная обработка с try/except
import requests
from requests.exceptions import RequestException
def fetch_data(url):
try:
response = requests.get(url, timeout=5)
response.raise_for_status() # Выкинет ошибку для 4xx и 5xx
return response.json()
except requests.exceptions.HTTPError as e:
print(f'HTTP ошибка: {e.response.status_code}')
except requests.exceptions.Timeout:
print('Timeout')
except requests.exceptions.RequestException as e:
print(f'Ошибка запроса: {e}')
return None
REST API Best Practices
Правильные коды для разных операций:
from fastapi import FastAPI, HTTPException
app = FastAPI()
# GET — получить данные
@app.get('/users/{user_id}')
def get_user(user_id: int):
if user_id not in users:
raise HTTPException(status_code=404, detail='User not found')
return users[user_id]
# POST — создать данные
@app.post('/users')
def create_user(user: UserData):
if not user.email:
raise HTTPException(status_code=400, detail='Email required')
user_id = len(users) + 1
users[user_id] = user
return {'id': user_id, 'status_code': 201} # 201 Created
# PUT — обновить данные
@app.put('/users/{user_id}')
def update_user(user_id: int, user: UserData):
if user_id not in users:
raise HTTPException(status_code=404, detail='User not found')
users[user_id] = user
return {'status_code': 200}
# DELETE — удалить данные
@app.delete('/users/{user_id}')
def delete_user(user_id: int):
if user_id not in users:
raise HTTPException(status_code=404, detail='User not found')
del users[user_id]
return {'status_code': 204} # 204 No Content
Проверка кодов в тестах
import requests
from unittest.mock import patch, MagicMock
def test_fetch_user():
with patch('requests.get') as mock_get:
mock_response = MagicMock()
mock_response.status_code = 200
mock_response.json.return_value = {'id': 1, 'name': 'Alice'}
mock_get.return_value = mock_response
result = fetch_user(1)
assert result['name'] == 'Alice'
def test_user_not_found():
with patch('requests.get') as mock_get:
mock_response = MagicMock()
mock_response.status_code = 404
mock_get.return_value = mock_response
result = fetch_user(999)
assert result is None
HTTP коды ошибок — стандартный способ коммуникации между клиентом и сервером.