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óbPOST– utwórz zasóbPUT/PATCH– zaktualizuj zasóbDELETE– 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ówPOST /api/posts/– utworzenie postaGET /api/posts/1/– szczegóły postaPUT /api/posts/1/– edycja postaDELETE /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>