در جنگو، 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 نصب کنید:
پس از نصب، باید آن را به INSTALLED_APPS در فایل settings.py پروژه خود اضافه کنید:
...
'rest_framework',
]
۲.۲. ایجاد یک API ساده با Django REST Framework
در اینجا یک مثال ساده از نحوه ایجاد یک API برای یک مدل در جنگو آورده شده است. فرض کنید یک مدل به نام Book داریم و میخواهیم یک API برای مدیریت کتابها بسازیم.
-
تعریف مدل در 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 -
ایجاد 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'] -
تعریف 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 برای اضافه کردن کتاب جدید استفاده میشود.
-
تنظیم 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 اضافه کنید:
...
'rest_framework.authtoken',
]
سپس میتوانید از دکوراتورهای DRF برای محدود کردن دسترسی استفاده کنید.
2.4. Permissions
با استفاده از مجوزها، میتوانید تعیین کنید که کدام کاربران مجاز به انجام یک عمل خاص در API هستند. به طور مثال میتوانید دسترسی به API را برای کاربران غیر معتبر محدود کنید.
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 .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 .views import BookViewSet
router = DefaultRouter()
router.register(r'books', BookViewSet)
urlpatterns = router.urls
۶. مستندات API
DRF امکان تولید مستندات API را به راحتی فراهم میکند. شما میتوانید از ابزارهایی مانند drf-yasg برای تولید مستندات خودکار استفاده کنید.
برای نصب آن:
در urls.py:
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 را به شما ارائه میدهد.
