API i Django REST Framework (DRF)

1. Czym jest REST API

REST (Representational State Transfer) to architektoniczny styl projektowania usług sieciowych. REST API umożliwia wymianę danych pomiędzy klientem (np. aplikacją frontendową, mobilną) a serwerem w sposób prosty i ustandaryzowany.

Podstawowe zasady REST:

  • Zasoby – każda rzecz (np. użytkownik, post, produkt) jest reprezentowana jako zasób z unikalnym URL-em.
  • Operacje HTTP – CRUD realizuje się poprzez standardowe metody:

    • GET – pobierz zasób
    • POST – utwórz zasób
    • PUT/PATCH – zaktualizuj zasób
    • DELETE – usuń zasób
  • Format danych – najczęściej JSON.

  • Bezstanowość – każde żądanie zawiera komplet informacji potrzebnych do obsługi (brak przechowywania stanu sesji po stronie serwera).

Przykład endpointów REST dla modelu Post:

  • GET /api/posts/ – lista postów
  • POST /api/posts/ – utworzenie posta
  • GET /api/posts/1/ – szczegóły posta
  • PUT /api/posts/1/ – edycja posta
  • DELETE /api/posts/1/ – usunięcie posta

2. Instalacja i konfiguracja DRF

Django REST Framework (DRF) to popularna biblioteka Django do tworzenia API.

Instalacja

Konfiguracja w settings.py

Opcjonalnie można skonfigurować ustawienia globalne:


3. Tworzenie serializerów i widoków API

3.1. Serializery

Serializer konwertuje obiekty Pythona/Django (np. modele) na JSON oraz odwrotnie.

Przykład serializera dla modelu Post:


3.2. Widoki API

W DRF mamy kilka sposobów definiowania widoków:

a) APIView (najbardziej elastyczne)


b) Generic Views + Mixins (mniej kodu)


c) ViewSets + Routery (najbardziej kompaktowe)

Rejestracja w urls.py za pomocą routera:

Teraz API obsługuje: list, retrieve, create, update, delete bez dodatkowego kodu.


4. Autoryzacja w API

W API uwierzytelnianie odbywa się inaczej niż w klasycznych aplikacjach Django. Najczęściej używa się tokenów lub JWT.

4.1. Token Authentication (wbudowane w DRF)

Instalacja:

Dodajemy do INSTALLED_APPS:

Migracje:

Generowanie tokenu dla użytkownika:

Dodajemy w settings.py:

Teraz klient musi wysyłać w nagłówku:

Authorization: Token <token>

4.2. JWT Authentication (nowocześniejsze podejście)

JWT (JSON Web Token) jest powszechnie używany w aplikacjach SPA i mobilnych.

Instalacja:

Dodanie w settings.py:

W urls.py:

Użytkownik loguje się wysyłając dane do api/token/, otrzymuje:

  • access token (krótkotrwały, np. 5 minut)
  • refresh token (dłuższy, np. 1 dzień, do odnowienia access tokenu)

Przykład nagłówka:

Authorization: Bearer <access_token>