Как создать простой REST API эндпоинт с помощью Flask

Ответ

Flask — это микрофреймворк, который отлично подходит для создания легковесных REST API. Для более структурированного подхода часто используется расширение Flask-RESTful.

Ключевые компоненты:

  • Flask: Основной объект приложения.
  • Api: Точка входа для расширения Flask-RESTful.
  • Resource: Класс, который определяет логику для одного или нескольких HTTP-методов (GET, POST, PUT и т.д.) для конкретного эндпоинта.
  • api.add_resource(): Метод для регистрации класса Resource и связывания его с URL-маршрутом.

Пример: эндпоинт для получения задачи

from flask import Flask
from flask_restful import Resource, Api

# 1. Инициализация приложения
app = Flask(__name__)
api = Api(app)

# 2. Определение ресурса
class TodoItem(Resource):
    # Обработка GET-запроса
    def get(self, todo_id):
        # В реальном приложении здесь будет логика получения данных из БД
        tasks = {
            1: {"task": "Изучить документацию Flask"},
            2: {"task": "Создать REST API"}
        }
        return tasks.get(todo_id, {"error": "Задача не найдена"}, 404)

# 3. Регистрация ресурса и маршрута
# URL будет выглядеть как /todos/1, /todos/2 и т.д.
api.add_resource(TodoItem, '/todos/<int:todo_id>')

if __name__ == '__main__':
    app.run(debug=True)

Для полноценного приложения этот базовый пример дополняется:

  • ORM (например, SQLAlchemy) для работы с базой данных.
  • Сериализацией/валидацией (например, с помощью Marshmallow) для преобразования данных.
  • Аутентификацией (например, JWT) для защиты эндпоинтов.

Ответ 18+ 🔞

А, ну вот, смотри, опять про этот Flask начинают, блядь. Микрофреймворк, говоришь? Да он не микро, он просто не хочет за тебя всю хуйню делать, как эти монстры-фреймворки, которые тебе и унитаз протрут, и жопу подотрут. Самому надо шевелиться, понимаешь? Но для REST API — это, блядь, самое то, прям золотая середина, ёпта.

А если уж совсем структуру навести охото, чтобы не было как у соседа в гараже — всяких проводов и банок из-под пива, — то берут Flask-RESTful. Это типа надстройка, которая говорит: «Мужик, давай по-взрослому, по ресурсам».

Из чего тут всё собрано, блядь:

  • Flask: Это, сука, само приложение, его сердце и печень. Без него — нихуя.
  • Api: Это как главный диспетчер от Flask-RESTful. К нему все ресурсы на регистрацию приходят.
  • Resource: Вот это, блядь, ключевая штука! Это класс, который заточен под один эндпоинт. И внутри него ты пишешь методы: get, post, put — как будто это не класс, а швейцарский нож для HTTP-запросов.
  • api.add_resource(): Этой командой ты пристёгиваешь свой класс-Resource к конкретному URL. Типа прописываешь его по месту жительства.

Смотри, как это в жизни выглядит, на примере «получить задачу»:

from flask import Flask
from flask_restful import Resource, Api

# 1. Заводим движок, блядь
app = Flask(__name__)
api = Api(app)

# 2. Делаем наш «ресурс» — класс для одной задачи
class TodoItem(Resource):
    # Этот метод сработает, когда придет GET-запрос
    def get(self, todo_id):
        # Ну тут в идеале лезть в базу, но мы для примера сварганим словарик
        tasks = {
            1: {"task": "Изучить документацию Flask"},
            2: {"task": "Создать REST API"}
        }
        # Ищем задачу. Не нашли — отдаём ошибку 404, чтоб не болтался как хуй в проруби.
        return tasks.get(todo_id, {"error": "Задача не найдена"}, 404)

# 3. Прописываем наш ресурс по адресу. Видишь <int:todo_id>? Это чтобы по номеру искать.
api.add_resource(TodoItem, '/todos/<int:todo_id>')

if __name__ == '__main__':
    app.run(debug=True)

Ну и понятно, что в реальном проекте этот голый скелет обрастает мясом, блядь:

  • ORM (типа SQLAlchemy) — чтобы не писать эти ебуччие SQL-запросы руками, а работать с данными как с питоньими объектами. Красота, ёпта!
  • Сериализация/валидация (например, Marshmallow) — чтобы данные, которые приходят и уходят, были красивыми и правильными, а не какой-то свалкой, блядь.
  • Аутентификация (ну, там, JWT) — чтобы к твоему API не лезли все подряд, как в общественный сортир. Чтобы только свои, с пропуском.