Что такое FastAPI
FastAPI — современный, быстрый фреймворк для создания API, построенный на Starlette и Pydantic. Он создан в 2018 году и быстро завоевал популярность благодаря производительности и удобству использования.
▸Ключевые особенности
▸Пример приложения
1from fastapi import FastAPI2from pydantic import BaseModel34app = FastAPI()56class User(BaseModel):7 name: str8 email: str9 age: int | None = None1011@app.get("/users/{user_id}")12async def get_user(user_id: int):13 return {"user_id": user_id, "name": "John"}1415@app.post("/users")16async def create_user(user: User):17 return {"message": f"User {user.name} created"}
Что такое Django
Django — «включённый» фреймворк, созданный в 2005 году. Он следует философии «batteries included» и предоставляет всё необходимое для веб-разработки.
▸Ключевые особенности
▸Пример приложения
1# models.py2from django.db import models34class User(models.Model):5 name = models.CharField(max_length=100)6 email = models.EmailField(unique=True)7 age = models.PositiveIntegerField(null=True, blank=True)89# views.py10from django.http import JsonResponse11from .models import User1213def get_user(request, user_id):14 user = User.objects.get(id=user_id)15 return JsonResponse({16 "user_id": user.id,17 "name": user.name,18 "email": user.email19 })
Сравнение производительности
▸Бенчмарки
По данным TechEmpower и различных тестов:
▸Причины разницы
Экосистема и библиотеки
▸Django: зрелая экосистема
▸FastAPI: растущая экосистема
Асинхронность
▸FastAPI: нативная асинхронность
1import httpx2from fastapi import FastAPI34app = FastAPI()56@app.get("/users/{user_id}")7async def get_user(user_id: int):8 async with httpx.AsyncClient() as client:9 response = await client.get(f"https://api.example.com/users/{user_id}")10 return response.json()
▸Django: ограниченная асинхронность
1# Django 4.1+ поддерживает async views2import httpx3from django.http import JsonResponse45async def get_user(request, user_id):6 async with httpx.AsyncClient() as client:7 response = await client.get(f"https://api.example.com/users/{user_id}")8 return JsonResponse(response.json())
Сценарии использования
▸Выбирайте FastAPI когда:
▸Выбирайте Django когда:
Интеграция друг с другом
Некоторые проекты используют Django для основной логики и FastAPI для высокопроизводительных эндпоинтов:
1# FastAPI + Django ORM2from fastapi import FastAPI3from django import setup4import os56os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings')7setup()89app = FastAPI()1011@app.get("/users/{user_id}")12async def get_user(user_id: int):13 # Используем Django ORM в FastAPI14 from myapp.models import User15 user = await User.objects.aget(id=user_id)16 return {"name": user.name, "email": user.email}
Заключение
FastAPI и Django — разные инструменты для разных задач. FastAPI идеален для API-сервисов с высокой нагрузкой, Django — для полноценных веб-приложений с богатой функциональностью. На собеседовании важно понимать компромиссы и уметь обосновать выбор.