Как писать представления Django (JSON apis) со статически типизированными аргументами и ответами?

В Java Spring я могу записать (упрощенно):

List<Apple> fetchApples(Orange request) { ... }

class Orange { int a; double b; String c; ... }
class Apple { int d; double e; String f; ... }

Делая это, я могу быть уверен, что пользователи API будут передавать только некоторые данные типа {a: 42, b: 1.2, c: "hello"}, а не {a: "wtf", z: [1,2,3]}. Однако в Django я не нахожу никакого метода, чтобы намекнуть на это. Мне приходится использовать a = int(request['a']), чтобы вручную преобразовать этот параметр в тип int и так далее. Это становится еще более проблематичным при работе с более сложными структурами.

Так, как я могу сделать что-то похожее на Java Spring? Я знаю, что Django/Python не является статически типизированным, но подсказка типа лучше, чем ничего.

Почему мне это нужно: Во-первых, больше типизации лучше для кода (больше ошибок может быть найдено во время lint). Во-вторых, и это самое главное, я хочу запустить генератор кода , но это определенно требует некоторой подсказки статической типизации. Например, сгенерировать Dart/Flutter клиент Django сервера.

Для тех, кто видит этот вопрос, вот мои два цента.

Наконец, я использую FastAPI вместо этого, поскольку я делаю JSON запросы и ответы. Обратите внимание, что Django ORM работает хорошо, даже если мы используем FastAPI для обработки запросов/ответов.

Вернуться на верх