ساخت REST API با Django REST Framework

ساخت REST API با Django REST Framework

در دنیای توسعه وب مدرن، معماری REST (Representational State Transfer) به عنوان یک الگوی رایج برای ساخت رابط‌های برنامه‌نویسی کاربردی (API) شناخته می‌شود. Django REST Framework (DRF) یک ابزار قدرتمند و انعطاف‌پذیر برای ساخت REST API با استفاده از فریم‌ورک Django پایتون است. این مقاله به آموزش گام به گام ساخت یک REST API ساده با استفاده از DRF می‌پردازد.

پیش‌نیازها

قبل از شروع، اطمینان حاصل کنید که موارد زیر را دارید:

  • پایتون نصب شده (نسخه 3.6 یا بالاتر توصیه می‌شود)
  • Django نصب شده
  • Django REST Framework نصب شده

برای نصب DRF، از دستور زیر استفاده کنید:

pip install djangorestframework

ایجاد یک پروژه Django

ابتدا یک پروژه Django جدید ایجاد کنید:

django-admin startproject myapi

سپس به دایرکتوری پروژه بروید:

cd myapi

ایجاد یک برنامه Django

یک برنامه Django جدید برای API خود ایجاد کنید:

python manage.py startapp snippets

تعریف مدل‌ها

در فایل snippets/models.py، مدل‌های مورد نیاز خود را تعریف کنید. به عنوان مثال، یک مدل برای ذخیره قطعه‌های کد:

from django.db import models

class Snippet(models.Model):
    title = models.CharField(max_length=100)
    code = models.TextField()
    created = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.title

سپس، مدل را در فایل snippets/admin.py ثبت کنید تا بتوانید آن را از طریق رابط کاربری Django Admin مدیریت کنید.

و در نهایت، تغییرات را در فایل myapi/settings.py اعمال کنید. در بخش INSTALLED_APPS، برنامه snippets را اضافه کنید:

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'snippets',
]

و همچنین، migration ها را اجرا کنید:

python manage.py makemigrations snippets
python manage.py migrate

ایجاد Serializer

Serializerها در DRF برای تبدیل مدل‌های Django به فرمت‌های قابل انتقال مانند JSON استفاده می‌شوند. در فایل snippets/serializers.py، یک Serializer برای مدل Snippet ایجاد کنید:

from rest_framework import serializers
from .models import Snippet

class SnippetSerializer(serializers.ModelSerializer):
    class Meta:
        model = Snippet
        fields = ['id', 'title', 'code', 'created']

ایجاد Viewها

Viewها منطق API را پیاده‌سازی می‌کنند. DRF انواع مختلفی از Viewها را ارائه می‌دهد. در اینجا از ListAPIView و CreateAPIView استفاده می‌کنیم:

در فایل snippets/views.py:

from rest_framework import generics
from .models import Snippet
from .serializers import SnippetSerializer

class SnippetList(generics.ListAPIView):
    queryset = Snippet.objects.all()
    serializer_class = SnippetSerializer

class SnippetCreate(generics.CreateAPIView):
    serializer_class = SnippetSerializer

تعریف URLها

URLها نقاط دسترسی به API را تعریف می‌کنند. در فایل myapi/urls.py، URLهای مربوط به برنامه snippets را تعریف کنید:

from django.urls import path, include
from snippets import views

urlpatterns = [
    path('snippets/', views.SnippetList.as_view()),
    path('snippets/create/', views.SnippetCreate.as_view()),
]

تست API

اکنون می‌توانید API خود را تست کنید. سرور توسعه Django را اجرا کنید:

python manage.py runserver

سپس، با استفاده از یک ابزار مانند curl یا Postman، درخواست‌های HTTP به URLهای تعریف شده ارسال کنید.

  • برای دریافت لیست قطعه‌های کد، به آدرس http://127.0.0.1:8000/snippets/ یک درخواست GET ارسال کنید.
  • برای ایجاد یک قطعه کد جدید، به آدرس http://127.0.0.1:8000/snippets/create/ یک درخواست POST با بدنه JSON حاوی اطلاعات قطعه کد ارسال کنید.

به عنوان مثال، برای ایجاد یک قطعه کد جدید با استفاده از curl:

curl -X POST -H "Content-Type: application/json" -d '{"title": "مثال قطعه کد", "code": "print("Hello, world!")"}' http://127.0.0.1:8000/snippets/create/

تنظیمات احراز هویت

برای محافظت از API خود، می‌توانید از مکانیزم‌های احراز هویت DRF استفاده کنید. DRF از انواع مختلفی از احراز هویت پشتیبانی می‌کند، از جمله:

  • Token Authentication
  • Session Authentication
  • OAuth2

برای فعال کردن Token Authentication، مراحل زیر را دنبال کنید:

  1. در فایل myapi/settings.py، تنظیمات مربوط به Token Authentication را اضافه کنید:
  2. REST_FRAMEWORK = {
        'DEFAULT_AUTHENTICATION_CLASSES': [
            'rest_framework.authentication.TokenAuthentication',
        ],
    }
    
  3. Migration ها را اجرا کنید:
  4. python manage.py makemigrations
    python manage.py migrate
  5. یک توکن برای یک کاربر ایجاد کنید. می‌توانید از رابط کاربری Django Admin یا از طریق کد پایتون این کار را انجام دهید.
  6. توکن را در هدر Authorization درخواست‌های HTTP خود قرار دهید.

تنظیمات مجوزها

برای کنترل دسترسی به API خود، می‌توانید از مکانیزم‌های مجوز DRF استفاده کنید. DRF انواع مختلفی از مجوزها را ارائه می‌دهد، از جمله:

  • IsAuthenticated
  • IsAdminUser
  • IsOwner

برای اعمال یک مجوز به یک View، ویژگی permission_classes را تنظیم کنید. به عنوان مثال، برای محدود کردن دسترسی به یک View فقط به کاربران احراز هویت شده:

class SnippetList(generics.ListAPIView):
    queryset = Snippet.objects.all()
    serializer_class = SnippetSerializer
    permission_classes = [permissions.IsAuthenticated]

سفارشی‌سازی Serializerها و Viewها

DRF امکان سفارشی‌سازی Serializerها و Viewها را برای پاسخگویی به نیازهای خاص شما فراهم می‌کند. می‌توانید Serializerها را با افزودن فیلدهای سفارشی، اعتبارسنجی داده‌ها و تغییر نحوه سریال‌سازی داده‌ها سفارشی کنید. همچنین می‌توانید Viewها را با افزودن منطق سفارشی، تغییر نحوه پردازش درخواست‌ها و پاسخ‌ها و تغییر نحوه نمایش داده‌ها سفارشی کنید.

نتیجه‌گیری

Django REST Framework یک ابزار قدرتمند و انعطاف‌پذیر برای ساخت REST API با استفاده از Django پایتون است. با استفاده از DRF، می‌توانید به سرعت و به آسانی APIهای پیچیده را ایجاد کنید که نیازهای برنامه‌های وب و موبایل شما را برآورده می‌کنند. این مقاله یک معرفی اولیه به DRF ارائه داد. برای یادگیری بیشتر، به مستندات رسمی DRF مراجعه کنید.

بدون دیدگاه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *