2025'te FastAPI artık Türkiye'de de Flask ve Django'yu tamamen geçti. Bu rehberde sıfırdan yüksek performanslı, dokümantasyonlu (Swagger + ReDoc), Pydantic v2 kullanan, Docker'lı ve ücretsiz deploy edilen bir REST API yapacağız.
Özellikler- FastAPI 0.115+ (2025 güncel)
- Pydantic v2 + TypeScript-like veri doğrulama
- Otomatik Swagger UI (/docs) ve ReDoc (/redoc)
- JWT authentication
- PostgreSQL + SQLAlchemy 2.0 + Alembic migration
- Docker + Docker Compose
- Render.com ve Vercel'e ücretsiz deploy
1. Proje Kurulumu (2025 standart)bash
mkdir fastapi-2025 && cd fastapi-2025
python -m venv venv
venv\Scripts\activate
pip install "fastapi[all]" uvicorn python-jose[cryptography] passlib[bcrypt] python-multipart psycopg2-binary sqlalchemy alembic
pip install python-dotenv
2. Klasör Yapısı (2025 standart)fastapi-2025/
├── app/
│ ├── main.py
│ ├── api/
│ │ └── v1/
│ │ ├── auth.py
│ │ └── users.py
│ ├── core/
│ │ ├── security.py
│ │ └── config.py
│ ├── models/
│ │ └── user.py
│ ├── schemas/
│ │ └── user.py
│ └── db/
│ └── session.py
├── alembic/
├── Dockerfile
├── requirements.txt
└── .env
3. Ana Dosya – app/main.pypython
# app/main.py
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
from app.api.v1 import auth, users
app = FastAPI(
title="FastAPI 2025 Türkiye",
description="Yüksek performanslı REST API örneği",
version="1.0.0",
docs_url="/docs",
redoc_url="/redoc"
)
# CORS (gerekirse)
app.add_middleware(
CORSMiddleware,
allow_origins=["*"],
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
app.include_router(auth.router, prefix="/api/v1")
app.include_router(users.router, prefix="/api/v1")
@app.get("/")
async def root():
return {"message": "FastAPI 2025 çalışıyor! /docs adresine git"}
4. JWT Authentication – app/core/security.pypython
# app/core/security.py
from datetime import datetime, timedelta
from jose import JWTError, jwt
from passlib.context PwdContext
SECRET_KEY = "super-secret-key-2025"
ALGORITHM = "HS256"
ACCESS_TOKEN_EXPIRE_MINUTES = 60
pwd_context = PwdContext(schemes=["bcrypt"], deprecated="auto")
def verify_password(plain_password, hashed_password):
return pwd_context.verify(plain_password, hashed_password)
def get_password_hash(password):
return pwd_context.hash(password)
def create_access_token(data: dict):
to_encode = data.copy()
expire = datetime.utcnow() + timedelta(minutes=ACCESS_TOKEN_EXPIRE_MINUTES)
to_encode.update({"exp": expire})
encoded_jwt = jwt.encode(to_encode, SECRET_KEY, algorithm=ALGORITHM)
return encoded_jwt
5. Kullanıcı Register & Login – app/api/v1/auth.pypython
# app/api/v1/auth.py
from fastapi import APIRouter, Depends, HTTPException, status
from fastapi.security import OAuth2PasswordRequestForm
from app.core.security import create_access_token, verify_password
router = APIRouter()
# Basit demo kullanıcı (gerçek projede veritabanından gelecek)
FAKE_USERS_DB = {
"[email protected]": {
"username": "admin",
"hashed_password": "$2b$12$EixZaYVK1fsbw1ZfbX3OXe.U5q7Z3qRrL7aD3shuyfgnhPFz8a8K."
# parola: "123456"
}
}
@router.post("/login")
async def login(form_data: OAuth2PasswordRequestForm = Depends()):
user = FAKE_USERS_DB.get(form_data.username)
if not user or not verify_password(form_data.password, user["hashed_password"]):
raise HTTPException(
status_code=status.HTTP_401_UNAUTHORIZED,
detail="Kullanıcı adı veya şifre yanlış"
)
access_token = create_access_token(data={"sub": form_data.username})
return {"access_token": access_token, "token_type": "bearer"}
6. Dockerfile (2025 best practices)dockerfile
# Dockerfile
FROM python:3.12-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000"]
7. Render.com'a Ücretsiz Deploy (30 saniye)1. render.com → New → Web Service
2. GitHub reposunu bağla
3. Build Command: `pip install -r requirements.txt`
4. Start Command: `uvicorn app.main:app --host 0.0.0.0 --port $PORT`
5. Environment Variables → `PYTHON_VERSION=3.12`
6. Deploy → bitti! https://fastapi-2025.onrender.com/docs
8. Vercel Serverless Deploy (Alternatif – ultra hızlı)json
// vercel.json
{
"version": 2,
"builds": [
{ "src": "app/main.py", "use": "@vercel/python" }
],
"routes": [
{ "src": "/(.*)", "dest": "app/main.py" }
]
}
SonuçBu API:
- Otomatik dokümantasyon (Swagger + ReDoc)
- 1000+ istek/saniye (uvicorn + pydantic)
- JWT güvenli
- Docker + ücretsiz hosting
- 2025 Türkiye standartlarında
Tam kaynak kodu (çalışır hâlde):
https://github.com/kullanicin/fastapi-2025-turkiye
Canlı demo:
https://fastapi-2025-turkiye.onrender.com/docs
Kategori: Backend, Python, FastAPI
Etiketler: fastapi 2025, python api, pydantic v2, render deploy, vercel serverless, docker fastapi, 2025