JavaRush /Курси /Модуль 3: Django /Створення першого API з DRF

Створення першого API з DRF

Модуль 3: Django
Рівень 16 , Лекція 3
Відкрита

Сьогодні ми створимо свій перший API за допомогою DRF. І ось як ми будемо це робити:

  1. Створимо модель даних.
  2. Визначимо серіалізатор для перетворення даних.
  3. Напишемо представлення для обробки запитів.
  4. Налаштуємо маршрути.
  5. І нарешті, протестуємо API.

Якщо ви готові, заварюйте каву і пристібайтесь. Політ у світ API починається!

1. Підготовка: модель даних

Почнемо з самої бази — моделі даних. Якщо ваш проєкт вже містить моделі, можна залишитися з ними. Якщо ні, давайте створимо просту модель для прикладу.

Додамо в наш додаток (назвемо його blog) модель Article, яка буде представляти статті.

# blog/models.py

from django.db import models

class Article(models.Model):
    title = models.CharField(max_length=100)  # Заголовок статті
    content = models.TextField()             # Зміст статті
    created_at = models.DateTimeField(auto_now_add=True)  # Дата створення

    def __str__(self):
        return self.title

Не забудьте виконати міграції, щоб наша база даних знала про цю модель:

python manage.py makemigrations
python manage.py migrate

Тепер у нас є проста, але функціональна модель для роботи.

2. Визначення серіалізатора

Серіалізатори — це серце DRF. Як ми пам'ятаємо, вони перетворюють дані з об'єктів Python (наприклад, моделей Django) у JSON і назад.

Створимо файл serializers.py всередині нашого застосунку blog і додамо туди серіалізатор для моделі Article.

# blog/serializers.py

from rest_framework import serializers
from .models import Article

class ArticleSerializer(serializers.ModelSerializer):
    class Meta:
        model = Article
        fields = ['id', 'title', 'content', 'created_at']  # Поля, які будуть повертатися API

Тут ми використовуємо ModelSerializer, щоб автоматично згенерувати серіалізатор на основі моделі Article. Це зручно і економить час — магія в дії!

3. Написання представлення (APIView)

Тепер додамо представлення для обробки запитів. Почнемо з базового класу APIView, щоб зрозуміти, як працює DRF.

Створимо файл views.py або оновимо його в нашому додатку.

# blog/views.py

from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import status
from .models import Article
from .serializers import ArticleSerializer

class ArticleListAPIView(APIView):
    def get(self, request):
        articles = Article.objects.all()  # Отримуємо всі статті з бази даних
        serializer = ArticleSerializer(articles, many=True)  # Серіалізуємо їх
        return Response(serializer.data)  # Повертаємо JSON з даними

    def post(self, request):
        serializer = ArticleSerializer(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)  # Помилка, якщо дані некоректні

Цей код створює API з двома методами:

  • GET — для отримання списку всіх статей.
  • POST — для створення нової статті.

4. Налаштування маршрутів

Тепер зв'яжемо наше представлення з маршрутом. Додамо новий маршрут у файл urls.py нашого додатку.

# blog/urls.py

from django.urls import path
from .views import ArticleListAPIView

urlpatterns = [
    path('articles/', ArticleListAPIView.as_view(), name='article-list'),  # Реєструємо маршрут
]

І не забудьте підключити маршрути додатку у базовому urls.py проєкту:

# project/urls.py

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('api/', include('blog.urls')),  # Підключаємо маршрути додатку `blog`
]

Тепер наше API доступне за адресою http://127.0.0.1:8000/api/articles/.

5. Тестування API

Перевіримо наш API. Відкрийте Postman, curl або просто браузер (для GET-запитів) і спробуйте звернутися до вашого API. Надішліть GET-запит на http://127.0.0.1:8000/api/articles/. Якщо у вас є дані в базі, ви отримаєте їх у форматі JSON:

[
    {
        "id": 1,
        "title": "Мій перший пост",
        "content": "Це опис мого першого поста.",
        "created_at": "2023-10-10T12:34:56Z"
    },
    {
        "id": 2,
        "title": "Ще один пост",
        "content": "Це опис іншого поста.",
        "created_at": "2023-10-11T15:22:33Z"
    }
]

Якщо база даних порожня, ви отримаєте порожній масив:

[]

Тепер створимо нову статтю. Надішліть POST-запит з тілом:

{
    "title": "Нова пригода",
    "content": "Щойно запустив свій перший API!"
}

У разі успіху ви отримаєте відповідь зі створеною статтею:

{
    "id": 3,
    "title": "Нова пригода",
    "content": "Щойно запустив свій перший API!",
    "created_at": "2023-10-12T10:00:00Z"
}

Якщо ви припустилися помилки (наприклад, не вказали обов'язкове поле title), сервер поверне повідомлення про помилку:

{
    "title": ["This field is required."]
}

6. Покращення: підключення Browsable API

DRF надає вбудований інтерфейс для тестування API через браузер. Відкрийте ваш API у браузері (http://127.0.0.1:8000/api/articles/) і насолоджуйтесь користувацьким інтерфейсом. Ви можете відправляти запити прямо з браузера без додаткових інструментів. Це неймовірно зручно для налагодження та досліджень.

Помилки та підказки

На початкових етапах роботи з DRF студенти часто стикаються з кількома типовими проблемами. Наприклад, якщо ви забули додати rest_framework у INSTALLED_APPS у settings.py, ваш проєкт не дізнається про DRF, і ви отримаєте помилку. Також не забувайте перевіряти маршрути: часто помилки з URL заважають додатку працювати.

Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ