{
“@context”: “https://schema.org”,
“@type”: “TechArticle”,
“headline”: “كيفية إنشاء REST API باستخدام FastAPI وPostgreSQL في عام 2026: البرنامج التعليمي الكامل”,
“description”: “أنشئ واجهة برمجة تطبيقات REST جاهزة للإنتاج من البداية باستخدام FastAPI وPostgreSQL وSQLAlchemy وDocker. كاملة مع المصادقة، CRUD، والنشر.”,
“url”: “https://techpulsesite.com/how-to-build-a-rest-api-with-fastapi-and-ar/”,
“datePublished”: “2026-06-24T10:50:00+00:00”,
“dateModified”: “2026-06-29T04:14:54+00:00”,
“author”: {
“@type”: “Organization”,
“name”: “TechPulse Editorial Team”,
“url”: “https://techpulsesite.com”
},
“publisher”: {
“@type”: “Organization”,
“name”: “TechPulse”,
“url”: “https://techpulsesite.com”
},
“inLanguage”: “ar”
}
{
“@context”: “https://schema.org”,
“@type”: “TechArticle”,
“headline”: “كيفية إنشاء REST API باستخدام FastAPI وPostgreSQL في عام 2026: البرنامج التعليمي الكامل”,
“description”: “أنشئ واجهة برمجة تطبيقات REST جاهزة للإنتاج من البداية باستخدام FastAPI وPostgreSQL وSQLAlchemy وDocker. كاملة مع المصادقة، CRUD، والنشر.”,
“url”: “https://techpulsesite.com/how-to-build-a-rest-api-with-fastapi-and-ar/”,
“datePublished”: “2026-06-24T10:50:00+00:00”,
“dateModified”: “2026-06-21T05:55:20+00:00”,
“author”: {
“@type”: “Organization”,
“name”: “TechPulse Editorial Team”,
“url”: “https://techpulsesite.com”
},
“publisher”: {
“@type”: “Organization”,
“name”: “TechPulse”,
“url”: “https://techpulsesite.com”
},
“inLanguage”: “ar”
}
FastAPI أصبح المعيار الذهبي لواجهات برمجة تطبيقات Python REST في عام 2026 – فهو أسرع من Flask، ويحتوي على التحقق من صحة البيانات المضمن عبر Pydantic v2، وينشئ مستندات OpenAPI تلقائيًا، وهو غير متزامن تمامًا. بالدمج مع PostgreSQL وSQLAlchemy، تحصل على مكدس قوي وجاهز للإنتاج ويمكن التوسع فيه بشكل جيد.
📋 Table of Contents
يبني هذا البرنامج التعليمي واجهة برمجة تطبيقات كاملة لإدارة المهام من الصفر إلى النشر.
المتطلبات
- تم تثبيت بايثون 3.11+
- PostgreSQL 15+ قيد التشغيل (أو Docker)
- الفهم الأساسي لمفاهيم REST وPython
إعداد المشروع
mkdir taskapi && cd taskapi
python -m venv venv && source venv/bin/activate
pip install fastapi uvicorn sqlalchemy psycopg2-binary pydantic python-jose passlib python-dotenv alembic
إنشاء هيكل المشروع:
taskapi/
├── app/
│ ├── __init__.py
│ ├── main.py
│ ├── database.py
│ ├── models.py
│ ├── schemas.py
│ ├── crud.py
│ └── routers/
│ ├── tasks.py
│ └── auth.py
├── .env
└── requirements.txt
تكوين قاعدة البيانات
In .env:
DATABASE_URL=postgresql://user:password@localhost:5432/taskdb
SECRET_KEY=your-secret-key-here
ALGORITHM=HS256
ACCESS_TOKEN_EXPIRE_MINUTES=30
In app/database.py:
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker, DeclarativeBase
from dotenv import load_dotenv
import os
load_dotenv()
DATABASE_URL = os.getenv("DATABASE_URL")
engine = create_engine(DATABASE_URL)
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
class Base(DeclarativeBase):
pass
def get_db():
db = SessionLocal()
try:
yield db
finally:
db.close()
النماذج والمخططات
In app/models.py:
from sqlalchemy import Column, Integer, String, Boolean, DateTime, ForeignKey
from sqlalchemy.sql import func
from .database import Base
class User(Base):
__tablename__ = "users"
id = Column(Integer, primary_key=True, index=True)
email = Column(String, unique=True, index=True)
hashed_password = Column(String)
is_active = Column(Boolean, default=True)
created_at = Column(DateTime(timezone=True), server_default=func.now())
class Task(Base):
__tablename__ = "tasks"
id = Column(Integer, primary_key=True, index=True)
title = Column(String, index=True)
description = Column(String, nullable=True)
completed = Column(Boolean, default=False)
owner_id = Column(Integer, ForeignKey("users.id"))
created_at = Column(DateTime(timezone=True), server_default=func.now())
In app/schemas.py:
from pydantic import BaseModel, EmailStr
from datetime import datetime
from typing import Optional
class TaskCreate(BaseModel):
title: str
description: Optional[str] = None
class TaskResponse(TaskCreate):
id: int
completed: bool
owner_id: int
created_at: datetime
class Config:
from_attributes = True
class UserCreate(BaseModel):
email: EmailStr
password: str
class Token(BaseModel):
access_token: str
token_type: str
عمليات الخام
In app/crud.py:
from sqlalchemy.orm import Session
from . import models, schemas
from passlib.context import CryptContext
pwd_context = CryptContext(schemes=["bcrypt"])
def get_user_by_email(db: Session, email: str):
return db.query(models.User).filter(models.User.email == email).first()
def create_user(db: Session, user: schemas.UserCreate):
hashed = pwd_context.hash(user.password)
db_user = models.User(email=user.email, hashed_password=hashed)
db.add(db_user); db.commit(); db.refresh(db_user)
return db_user
def get_tasks(db: Session, owner_id: int, skip=0, limit=100):
return db.query(models.Task).filter(
models.Task.owner_id == owner_id).offset(skip).limit(limit).all()
def create_task(db: Session, task: schemas.TaskCreate, owner_id: int):
db_task = models.Task(**task.model_dump(), owner_id=owner_id)
db.add(db_task); db.commit(); db.refresh(db_task)
return db_task
def update_task(db: Session, task_id: int, completed: bool):
task = db.query(models.Task).filter(models.Task.id == task_id).first()
if task:
task.completed = completed; db.commit(); db.refresh(task)
return task
التطبيق الرئيسي والطرق
In app/main.py:
from fastapi import FastAPI
from .database import engine
from . import models
from .routers import tasks, auth
models.Base.metadata.create_all(bind=engine)
app = FastAPI(title="Task API", version="1.0.0")
app.include_router(auth.router, prefix="/auth", tags=["auth"])
app.include_router(tasks.router, prefix="/tasks", tags=["tasks"])
@app.get("/health")
def health(): return {"status": "ok"}
تشغيل مع:uvicorn app.main:app --reload
زيارةhttp://localhost:8000/docs لواجهة مستخدم Swagger التي تم إنشاؤها تلقائيًا.
النشر باستخدام Docker
FROM python:3.11-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000"]
معdocker-compose.yml:
services:
api:
build: .
ports: ["8000:8000"]
env_file: .env
depends_on: [db]
db:
image: postgres:15
environment:
POSTGRES_DB: taskdb
POSTGRES_USER: user
POSTGRES_PASSWORD: password
أفضل الممارسات للإنتاج
- استخدمالإنبيك لعمليات ترحيل قاعدة البيانات بدلاً من
create_all() - أضفتحديد المعدل مع
slowapiالحزمة - استخدمغير متزامن SQLAlchemy مع
asyncpgسائق للتزامن العالي - أضفRedis التخزين المؤقت لنقاط النهاية التي يتم قراءتها بشكل متكرر
- إعدادالحارس لتتبع الأخطاء في الإنتاج
- لا تعرض أبدًا أخطاء قاعدة البيانات الأولية لعملاء واجهة برمجة التطبيقات
الأسئلة المتداولة
س: FastAPI vs Django REST Framework في 2026؟
ج: FastAPI أسرع، ويتمتع بدعم أفضل للمزامنة، ويتطلب قدرًا أقل من البيانات النمطية. يعد Django DRF أفضل للوحات الإدارة المعقدة وميزات ORM والفرق التي تستخدم Django بالفعل.
س: كيف يمكنني التعامل مع عمليات ترحيل قاعدة البيانات؟
ج: استخدم الإنبيك:alembic init alembic، قم بتكوين عنوان URL لقاعدة البيانات، ثمalembic revision --autogenerate -m "init" وalembic upgrade head.
س: كيف يمكنني إضافة ترقيم الصفحات؟
ج: أضفskip: int = 0, limit: int = 20 المعلمات إلى نقطة النهاية الخاصة بك، ثم استخدم.offset(skip).limit(limit) في الاستعلام الخاص بك.
س: هل يستحق SQLAlchemy 2.0 استخدامه في عام 2026؟
ج: بالتأكيد. النمط 2.0 معselect() البيانات أنظف وأسرع وأفضل للاستخدام غير المتزامن. يجب على جميع المشاريع الجديدة استخدامه.
س: كيف يمكنني إضافة مهام الخلفية؟
ج: يحتوي FastAPI علىBackgroundTasks للحالات البسيطة. بالنسبة لسير العمل المعقد، استخدم Celery مع Redis كوسيط.
الخلاصة
يعد FastAPI + PostgreSQL + SQLAlchemy واحدًا من أفضل مجموعات الواجهة الخلفية لـ Python المتوفرة في عام 2026. يمكنك الحصول على وثائق تلقائية ومعالجة آمنة للطلب/الاستجابة وأداء غير متزامن سريع وطبقة قاعدة بيانات ناضجة تم اختبارها في المعركة. يعد الكود الكامل لهذا البرنامج التعليمي أساسًا متينًا لأي واجهة برمجة تطبيقات إنتاجية – قم بإضافة البرامج الوسيطة للمصادقة وتحديد المعدل والمراقبة قبل بدء البث المباشر.
🔗 Share this article
✍️ Leave a Comment