🌐 Detecting your location…
📢 Advertisement — Configure AdSense in Appearance → Customize → AdSense Settings

كيفية إنشاء REST API باستخدام FastAPI وPostgreSQL في عام 2026: البرنامج التعليمي الكامل

⏱️4 min read  ·  752 words

{
“@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، تحصل على مكدس قوي وجاهز للإنتاج ويمكن التوسع فيه بشكل جيد.

يبني هذا البرنامج التعليمي واجهة برمجة تطبيقات كاملة لإدارة المهام من الصفر إلى النشر.

المتطلبات

  • تم تثبيت بايثون 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. يمكنك الحصول على وثائق تلقائية ومعالجة آمنة للطلب/الاستجابة وأداء غير متزامن سريع وطبقة قاعدة بيانات ناضجة تم اختبارها في المعركة. يعد الكود الكامل لهذا البرنامج التعليمي أساسًا متينًا لأي واجهة برمجة تطبيقات إنتاجية – قم بإضافة البرامج الوسيطة للمصادقة وتحديد المعدل والمراقبة قبل بدء البث المباشر.

✍️ Leave a Comment

Your email address will not be published. Required fields are marked *

🌐 Read in:🇩🇪 Deutsch🇧🇷 Português🇸🇦 العربية🇮🇳 हिन्दी🇧🇩 বাংলা