Что такое REST API и как с ним взаимодействовать в Python

Ответ

REST (Representational State Transfer) — это архитектурный стиль для создания веб-сервисов, который использует стандартные HTTP-методы для взаимодействия между клиентом и сервером. Данные обычно передаются в формате JSON.

Основные HTTP-методы в REST:

  • GET: Получение данных (ресурса).
  • POST: Создание нового ресурса.
  • PUT / PATCH: Обновление существующего ресурса.
  • DELETE: Удаление ресурса.

В Python для работы с REST API чаще всего используется библиотека requests для синхронных запросов или aiohttp для асинхронных.

Пример использования requests:

import requests
import json

# Базовый URL API
BASE_URL = 'https://jsonplaceholder.typicode.com'

# 1. GET-запрос: получение списка постов
try:
    response = requests.get(f'{BASE_URL}/posts/1')
    response.raise_for_status()  # Проверка на HTTP-ошибки (4xx или 5xx)
    post_data = response.json()
    print("GET-запрос успешен:")
    print(json.dumps(post_data, indent=2))

except requests.exceptions.RequestException as e:
    print(f"Ошибка GET-запроса: {e}")

# 2. POST-запрос: создание нового поста
new_post = {
    'title': 'foo',
    'body': 'bar',
    'userId': 1
}

headers = {'Content-type': 'application/json; charset=UTF-8'}

try:
    response = requests.post(f'{BASE_URL}/posts', json=new_post, headers=headers)
    response.raise_for_status()
    created_post = response.json()
    print("nPOST-запрос успешен:")
    print(f"Создан пост с ID: {created_post.get('id')}")

except requests.exceptions.RequestException as e:
    print(f"Ошибка POST-запроса: {e}")

Ключевые аспекты при работе с REST API:

  • Обработка статус-кодов: Анализ ответа сервера (200 OK, 201 Created, 404 Not Found, 500 Internal Server Error).
  • Аутентификация: Передача токенов (JWT, OAuth) или API-ключей, обычно в заголовках (Authorization header).
  • Обработка ошибок: Реализация логики для случаев таймаутов, проблем с сетью и некорректных ответов API.

Ответ 18+ 🔞

А, REST, блядь! Ну это ж классика, ёпта! Представь себе, что у тебя есть шкаф, а в нём — куча ящиков с данными. REST — это такой свод правил, как ты можешь эти ящики открывать, смотреть, что там, класть новое барахло, менять старое или вообще выкидывать нахуй. И всё это через обычный HTTP, который и так везде торчит.

Основные команды, которыми ты эти ящики долбишь:

  • GET: Посмотреть, что внутри. Сунул руку, пошарил, достал инфу.
  • POST: Засунуть в ящик какую-то новую хуйню.
  • PUT / PATCH: Достать старую хуйню из ящика, подпилить её напильником и засунуть обратно.
  • DELETE: Взять ящик и выкинуть его в мусоропровод. Пиздец ящику.

В Питоне, если ты не хочешь всё это руками через сокеты городить, есть библиотеки. Для простых, тупых запросов — requests. Если хочешь, чтобы всё летало как угорелое и не ждало друг друга — aiohttp, но там уже мозги надо включать.

Вот смотри, как это выглядит на практике с requests:

import requests
import json

# Адрес нашей конторы, где ящики лежат
BASE_URL = 'https://jsonplaceholder.typicode.com'

# 1. Команда "Посмотреть" (GET): Глянем, что в ящике под номером 1
try:
    response = requests.get(f'{BASE_URL}/posts/1')
    response.raise_for_status()  # Если сервер ответил "пошёл нахуй" (ошибка 4xx/5xx), упадём тут
    post_data = response.json()
    print("GET-запрос успешен:")
    print(json.dumps(post_data, indent=2))

except requests.exceptions.RequestException as e:
    print(f"Ошибка GET-запроса: {e}") # А вот тут мы эту ошибку и поймаем, если что

# 2. Команда "Засунуть" (POST): Создадим новый ящик с какой-то хренью
new_post = {
    'title': 'foo',
    'body': 'bar',
    'userId': 1
}

headers = {'Content-type': 'application/json; charset=UTF-8'} # Говорим серверу: "Держи, это JSON, не пугайся"

try:
    response = requests.post(f'{BASE_URL}/posts', json=new_post, headers=headers)
    response.raise_for_status()
    created_post = response.json()
    print("nPOST-запрос успешен:")
    print(f"Создан пост с ID: {created_post.get('id')}") # Сервер нам выдает номер нового ящика

except requests.exceptions.RequestException as e:
    print(f"Ошибка POST-запроса: {e}")

На что смотреть, чтобы не обосраться:

  • Статус-коды: Это как сервер тебе подмигивает. 200 — «всё чики-пуки, держи». 404 — «ящик, блядь, потерял, ищи в другом месте». 500 — «у меня тут внутри всё ебнулось, приходи позже».
  • Аутентификация: Часто чтобы ящики трогать, нужно показать пропуск. Токен, ключ. Кидаешь его обычно в шапку запроса (Authorization), типа «свой, ребята, пустите».
  • Обработка ошибок: Сеть может лечь, сервер — зависнуть, ответ может быть кривой, как рога барана. Надо быть готовым ко всему этому пиздецу и не падать в обморок, а обработать и что-то сделать.