الگوریتم اول

لطفا صبر کنید...

در جنگو، API (رابط برنامه‌نویسی نرم‌افزار) به عنوان ابزاری برای ارتباط میان برنامه‌ها و سیستم‌ها طراحی شده است. جنگو این امکان را به شما می‌دهد که بتوانید سرویس‌هایی را بسازید که داده‌ها را به صورت استاندارد (مثل JSON یا XML) برای استفاده دیگر برنامه‌ها و کلاینت‌ها ارائه دهند. یکی از متداول‌ترین روش‌ها برای ساخت API در جنگو، استفاده از Django REST Framework است که به صورت ویژه برای ساخت APIهای RESTful طراحی شده است.

۱. API در جنگو چیست؟

API به شما این امکان را می‌دهد که داده‌ها و منابع موجود در برنامه جنگو را به دیگر سیستم‌ها و کلاینت‌ها ارائه دهید. این ارتباط معمولاً با استفاده از پروتکل HTTP انجام می‌شود و داده‌ها به فرمت‌هایی مانند JSON یا XML ارسال و دریافت می‌شوند.

۲. آشنایی با Django REST Framework (DRF)

Django REST Framework (DRF) یک کتابخانه قدرتمند برای ایجاد APIهای RESTful در جنگو است که قابلیت‌هایی مانند آتوماسیون، اعتبارسنجی، مدیریت درخواست‌ها و پاسخ‌ها و امنیت را در اختیار شما قرار می‌دهد.

1.2. نصب Django REST Framework

برای نصب DRF ابتدا باید آن را از طریق pip نصب کنید:

pip install djangorestframework

پس از نصب، باید آن را به INSTALLED_APPS در فایل settings.py پروژه خود اضافه کنید:

INSTALLED_APPS = [
    ...
    'rest_framework',
]

۲.۲. ایجاد یک API ساده با Django REST Framework

در اینجا یک مثال ساده از نحوه ایجاد یک API برای یک مدل در جنگو آورده شده است. فرض کنید یک مدل به نام Book داریم و می‌خواهیم یک API برای مدیریت کتاب‌ها بسازیم.

  1. تعریف مدل در models.py:

    from django.db import models

    class Book(models.Model):
        title = models.CharField(max_length=200)
        author = models.CharField(max_length=100)
        published_date = models.DateField()

        def __str__(self):
            return self.title
  2. ایجاد Serializer برای مدل:

    در DRF، برای تبدیل داده‌های مدل به فرمت JSON یا سایر فرمت‌ها از Serializer استفاده می‌کنیم. یک Serializer برای مدل Book به شکل زیر تعریف می‌شود.

    from rest_framework import serializers
    from .models import Book

    class BookSerializer(serializers.ModelSerializer):
        class Meta:
            model = Book
            fields = ['id', 'title', 'author', 'published_date']
  3. تعریف View برای API:

    حالا باید یک ویو برای پردازش درخواست‌های API ایجاد کنیم. برای این کار می‌توانیم از APIView در DRF استفاده کنیم. این ویو می‌تواند درخواست‌های GET، POST، PUT و DELETE را مدیریت کند.

    from rest_framework.views import APIView
    from rest_framework.response import Response
    from rest_framework import status
    from .models import Book
    from .serializers import BookSerializer

    class BookList(APIView):
        def get(self, request):
            books = Book.objects.all()
            serializer = BookSerializer(books, many=True)
            return Response(serializer.data)

        def post(self, request):
            serializer = BookSerializer(data=request.data)
            if serializer.is_valid():
                serializer.save()
                return Response(serializer.data, status=status.HTTP_201_CREATED)
            return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

    در اینجا:

    • متد get تمام کتاب‌ها را به صورت JSON برمی‌گرداند.
    • متد post برای اضافه کردن کتاب جدید استفاده می‌شود.
  4. تنظیم URLها:

    باید ویوها را به URLهای مربوطه در پروژه‌تان متصل کنید. برای این کار فایل urls.py را به شکل زیر ویرایش کنید.

    در فایل urls.py:

    from django.urls import path
    from .views import BookList

    urlpatterns = [
        path('books/', BookList.as_view(), name='book-list'),
    ]

۳. مدیریت درخواست‌ها و پاسخ‌ها

در DRF، شما می‌توانید انواع درخواست‌ها (GET, POST, PUT, DELETE) را مدیریت کنید. همچنین DRF به شما این امکان را می‌دهد که پاسخ‌های مختلفی ارسال کنید و انواع مختلفی از فرمت‌ها را به کلاینت‌ها ارائه دهید.

  • GET: برای دریافت داده‌ها (مثل لیست کتاب‌ها)
  • POST: برای ارسال داده‌ها و ایجاد رکورد جدید
  • PUT: برای به‌روزرسانی یک رکورد موجود
  • DELETE: برای حذف یک رکورد

۴. استفاده از Authentication و Permissions

در جنگو REST Framework، شما می‌توانید از انواع مختلف احراز هویت (Authentication) و مجوزها (Permissions) برای کنترل دسترسی به API استفاده کنید.

1.4. احراز هویت (Authentication)

DRF از چندین روش احراز هویت پشتیبانی می‌کند:

  • Basic Authentication: استفاده از نام کاربری و رمز عبور در هدر درخواست
  • Session Authentication: استفاده از نشست‌های Django
  • Token Authentication: استفاده از توکن‌های JWT یا سایر توکن‌ها

برای فعال کردن توکن احراز هویت، می‌توانید آن را در فایل settings.py اضافه کنید:

INSTALLED_APPS = [
    ...
    'rest_framework.authtoken',
]

سپس می‌توانید از دکوراتورهای DRF برای محدود کردن دسترسی استفاده کنید.

2.4. Permissions

با استفاده از مجوزها، می‌توانید تعیین کنید که کدام کاربران مجاز به انجام یک عمل خاص در API هستند. به طور مثال می‌توانید دسترسی به API را برای کاربران غیر معتبر محدود کنید.

from rest_framework.permissions import IsAuthenticated

class BookList(APIView):
    permission_classes = [IsAuthenticated]

    def get(self, request):
        books = Book.objects.all()
        serializer = BookSerializer(books, many=True)
        return Response(serializer.data)

در اینجا، فقط کاربرانی که وارد سیستم شده‌اند (احراز هویت شده‌اند) می‌توانند داده‌ها را مشاهده کنند.

۵. استفاده از ViewSets و Routers

برای ساده‌تر کردن کار با API، DRF یک روش ساده‌تر به نام ViewSet را ارائه می‌دهد که به شما این امکان را می‌دهد که بدون نیاز به نوشتن ویوهای جداگانه، تمام عملیات‌های CRUD (ایجاد، خواندن، به‌روزرسانی و حذف) را مدیریت کنید.

1.5. ایجاد ViewSet

در اینجا یک مثال از استفاده از ViewSet آورده شده است:

from rest_framework import viewsets
from .models import Book
from .serializers import BookSerializer

class BookViewSet(viewsets.ModelViewSet):
    queryset = Book.objects.all()
    serializer_class = BookSerializer

2.5. استفاده از Routers

برای ایجاد URLها به صورت خودکار، از Router استفاده می‌کنیم. این کار باعث می‌شود که نیازی به اضافه کردن دستی URLها نباشد.

در فایل urls.py:

from rest_framework.routers import DefaultRouter
from .views import BookViewSet

router = DefaultRouter()
router.register(r'books', BookViewSet)

urlpatterns = router.urls

۶. مستندات API

DRF امکان تولید مستندات API را به راحتی فراهم می‌کند. شما می‌توانید از ابزارهایی مانند drf-yasg برای تولید مستندات خودکار استفاده کنید.

برای نصب آن:

pip install drf-yasg

در urls.py:

from rest_framework import permissions
from drf_yasg.views import get_schema_view
from drf_yasg import openapi

schema_view = get_schema_view(
   openapi.Info(
      title="My API",
      default_version='v1',
      description="Test description",
      terms_of_service="https://www.google.com/policies/terms/",
      contact=openapi.Contact(email="contact@myapi.local"),
      license=openapi.License(name="BSD License"),
   ),
   public=True,
   permission_classes=(permissions.IsAuthenticated,),
)

urlpatterns = [
    ...
    path('docs/', schema_view.as_view(), name='swagger-docs'),
]

نتیجه‌گیری

  • Django REST Framework به شما این امکان را می‌دهد که APIهای قدرتمند و مقیاس‌پذیر بسازید.
  • شما می‌توانید از ابزارهایی مانند ViewSet، Router، و Serializer برای مدیریت داده‌ها و درخواست‌ها به شکلی کارآمد استفاده کنید.
  • DRF امکاناتی برای احراز هویت، مجوزها، و مستندسازی خودکار API را به شما ارائه می‌دهد.