Как писать представления 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 для обработки запросов/ответов.