Я начинаю работать в Django REST и нуждаюсь в вашем совете. Я разрабатываю веб-сервис. Служба должна предоставить интерфейс REST другим службам. Интерфейс REST, который мне нужно реализовать, напрямую не работает с моими моделями (я имею в виду операции get, put, post, delete). Вместо этого он предоставляет другие услуги с некоторыми результатами расчета. По запросу моя служба выполняет некоторые вычисления и возвращает результаты обратно (не сохраняет результаты в собственной базе данных).
Ниже мое понимание того, как можно реализовать интерфейс REST. Поправьте меня, если я ошибаюсь.
- Создать класс, который выполняет вычисления. Назовите его "CalcClass". CalcClass использует модели в своей работе.
- Параметры, необходимые для вычислений, передаются конструктору.
- Внедрить операцию calc. Он возвращает результаты как "ResultClass".
- Создать ResultClass.
- Производится из объекта.
- Он имеет только атрибуты, содержащие результаты вычисления.
- Одна часть результатов вычисления представлена в виде кортежей кортежей. Насколько я понимаю, для дальнейшей сериализации было бы лучше реализовать отдельный класс для этих результатов и добавить список таких объектов в ResultClass.
- Создать сериализатор для ResultClass.
- Вывести из сериализаторов. Сериализатор.
- Результаты вычислений доступны только для чтения, поэтому в основном используйте класс Field для полей вместо специализированных классов, таких как IntegerField.
- Я не должен использовать метод save() ни для ResultClass, ни для Serializer, потому что я не собираюсь хранить результаты (я просто хочу вернуть их по запросу).
- Серийный анализатор Impl для вложенных результатов (помните кортеж кортежей, упомянутый выше).
- Создать представление, чтобы возвращать результаты расчета.
- Вывести из APIView.
- Нужно просто get().
- В get() создать CalcClass с параметрами, полученными из запроса, вызвать его calc(), получить ResultClass, создать Serializer и передать ResultClass к нему, вернуть Response (serializer.data).
- URL-адрес
- В моем случае нет корня api. Я должен просто иметь URL-адреса для получения различных результатов вычисления (calc with diff params).
- Добавляем вызовы format_suffix_patterns для просмотра api.
Я что-то пропустил? Правильно ли этот подход?