Вопрос проверяет понимание уровней абстракции в DRF и умение выбирать подходящий инструмент под задачу.
В DRF API можно создавать с помощью APIView, GenericAPIView, mixins, ViewSet и ModelViewSet. APIView дает полный контроль, но требует больше кода. Generic views и mixins уменьшают объем кода для CRUD. ViewSet и ModelViewSet позволяют быстро создавать REST API с автоматической маршрутизацией.
Django REST Framework предоставляет несколько уровней абстракции — от низкоуровневых до максимально автоматизированных.
Определение: Serializer — компонент, который преобразует модели в JSON и обратно.
Это самый базовый уровень.
Пример:
class UserView(APIView):
def get(self, request):
return Response({"status": "ok"})
Плюсы:
полный контроль,
гибкость.
Минусы:
больше кода.
Позволяет быстро реализовать стандартные операции.
Пример:
class UserListView(ListModelMixin, GenericAPIView):
queryset = User.objects.all()
serializer_class = UserSerializer
Плюсы:
меньше кода,
контроль остается достаточно гибким.
Позволяет объединить несколько действий в один класс.
class UserViewSet(ViewSet):
def list(self, request):
...
Плюсы:
удобная маршрутизация,
структурированность.
Самый высокий уровень абстракции:
list
create
retrieve
update
delete
Все реализовано автоматически.
Практическое правило:
Нестандартная логика → APIView
CRUD с небольшой кастомизацией → Generic views
Полноценный REST → ViewSet / ModelViewSet
DRF предлагает несколько уровней абстракции, и выбор зависит от того, нужен ли полный контроль или скорость разработки.