Django REST Framework verbindet Datenmodelle mit einer HTTP-Schnittstelle. Für eine brauchbare API benötigen Sie neben den Endpunkten einen klaren Vertrag: Welche Daten darf ein angemeldeter Nutzer sehen, welche Änderungen sind erlaubt und wie werden Fehler zurückgegeben? Ein ViewSet nimmt Ihnen diese Entscheidungen nicht ab.
Modell und Ausgabe getrennt festlegen
Das folgende Beispiel gehört in eine bereits eingerichtete Django-App namens api. Django und Django REST Framework müssen installiert, die App registriert und die Migrationen ausgeführt sein. Es zeigt eine einfache Objektverwaltung; eine Mandantentrennung ist darin nicht enthalten. Der Serializer nennt die erlaubten Felder ausdrücklich, damit spätere Modelländerungen nicht automatisch Teil der öffentlichen API werden.
# models.py in der App 'api'
from django.db import models
class Item(models.Model):
name = models.CharField(max_length=100)
description = models.TextField()
# serializers.py in der App 'api'
from rest_framework import serializers
from .models import Item
class ItemSerializer(serializers.ModelSerializer):
class Meta:
model = Item
fields = ('id', 'name', 'description')
# views.py in der App 'api'
from rest_framework import viewsets
from rest_framework.permissions import IsAuthenticated
from .models import Item
from .serializers import ItemSerializer
class ItemViewSet(viewsets.ModelViewSet):
permission_classes = [IsAuthenticated]
queryset = Item.objects.all()
serializer_class = ItemSerializer
# urls.py in der App 'api'
from django.urls import path, include
from rest_framework.routers import DefaultRouter
from .views import ItemViewSet
router = DefaultRouter()
router.register(r'items', ItemViewSet)
urlpatterns = [
path('', include(router.urls)),
]
Berechtigungen auf den Anwendungsfall zuschneiden
IsAuthenticated verlangt eine Anmeldung. Alle angemeldeten Nutzer sehen in diesem Beispiel dieselben Objekte. Wenn Daten einem Kunden oder Eigentümer gehören, müssen Sie die Auswahl im QuerySet und die Rechte auf einzelne Objekte entsprechend begrenzen. Prüfen Sie außerdem die erlaubten Felder beim Anlegen und Bearbeiten. Eine erfolgreiche Anmeldung ist keine Freigabe für sämtliche Daten.
Verhalten prüfen, bevor Sie die API freigeben
Testen Sie die Endpunkte mit gültigen und ungültigen Eingaben sowie mit verschiedenen Benutzerrollen. Eine Anfrage ohne Anmeldung muss abgewiesen werden; ein Nutzer darf keine fremden geschützten Objekte lesen oder ändern. Legen Sie Pagination, Fehlerformat und das Verhalten bei unbekannten IDs fest. Dokumentieren Sie diese Regeln zusammen mit den Endpunkten, damit ein Client sie verlässlich verwenden kann.
Für den Betrieb kommen passende Authentifizierung, HTTPS, Überwachung und Schutz vor übermäßiger Last hinzu. Die Auswahl hängt von Ihren Clients und der Infrastruktur ab. Aus dem kompakten Beispiel lässt sich deshalb keine Aussage über die Sicherheit oder Belastbarkeit einer konkreten Installation ableiten.
Weiterführende Dokumentation: Django REST Framework: Permissions.