Подводя итог: с одной стороны у вас есть APIView
, который является наиболее обобщенным c из трех, но также вы должны выполнять почти все бизнес-логики c «вручную». У вас есть методы класса, отображающие методы http (get
, post
, ...) и некоторые атрибуты класса для настройки таких вещей, как аутентификация, рендеринг и т. Д. c.
Часто вы будете разрабатывать конечные точки для взаимодействия с ресурсами (сущностями, такими как «Пользователи», «Продукты», «Заказы» и т. д. c.) с помощью операций CRUD, и для этого и используется ViewSet
: у них больше семантических c методов класса, таких как list
, create
, retrieve
... что маршрутизатор может затем автоматически сопоставить URL-адреса и методы http за счет принятия некоторых предположений: например, retrieve
предполагает, что вызов http равен GET /you_resource/<pk>
. Он более жесткий, чем универсальный c APIView
, но отнимает у вас некоторую шаблонную / ручную конфигурацию, которую вам придется повторять снова и снова в большинстве случаев.
Еще один шаг - ModelViewSet
, который является расширением ViewSet
, когда вы работаете с Django моделями. Просто указав serializer_class
и queryset
, у вас есть все операции CRUD ViewSet
, готовые к go. Очевидно, что вы также можете добавить свои собственные методы к ViewSet
или настроить поведение методов по умолчанию.
По моему опыту, использование ViewSets
окупается. Код выглядит чище, и вы избегаете шаблонного кода. Предположения, которые он делает, являются разумными, и я бы даже сказал, что вы, вероятно, получите более чистый дизайн API, следуя им.