Jestem początkującym we frameworku Django REST i potrzebuję twojej rady. Rozwijam usługę internetową. Usługa musi zapewniać interfejs REST do innych usług. Interfejs REST, który muszę zaimplementować, nie działa bezpośrednio z moimi modelami (mam na myśli operacje get, put, post, delete). Zamiast tego świadczy inne usługi z niektórymi wynikami obliczeń. Na żądanie mój serwis dokonuje obliczeń i po prostu zwraca wyniki (nie przechowuje wyników we własnej bazie danych).
Poniżej znajduje się moje zrozumienie, w jaki sposób można zaimplementować ten interfejs REST. Popraw mnie, jeśli się mylę.
- Utwórz klasę, która wykonuje obliczenia. Nazwij go „CalcClass”. CalcClass wykorzystuje modele w swojej pracy.
- Parametry potrzebne do obliczeń przekazywane są do konstruktora.
- Zaimplementuj operację calc. Zwraca wyniki jako „ResultClass”.
- Utwórz ResultClass.
- Pochodzi z obiektu.
- Ma tylko atrybuty zawierające wyniki obliczeń.
- Jedna część wyników obliczeń jest reprezentowana jako krotka krotek. Jak rozumiem, dla dalszej serializacji lepiej byłoby zaimplementować oddzielną klasę dla tych wyników i dodać listę takich obiektów do ResultClass.
- Utwórz serializator dla ResultClass.
- Pochodzi z serializatorów.
- Wyniki obliczeń są tylko do odczytu, więc używaj głównie klasy Field dla pól, zamiast klas specjalistycznych, takich jak IntegerField.
- Nie powinienem implementować metody save () ani na ResultClass, ani na Serializerze, ponieważ nie zamierzam przechowywać wyników (chcę je tylko zwrócić na żądanie).
- Impl serializer dla zagnieżdżonych wyników (pamiętaj o krotce krotek wspomnianych powyżej).
- Utwórz widok, aby zwrócić wyniki obliczeń.
- Pochodzą z APIView.
- Wystarczy pobrać ().
- W get () utwórz CalcClass z parametrami pobranymi z żądania, wywołaj jego calc (), pobierz ResultClass, utwórz Serializer i przekaż do niego ResultClass, zwróć Response (serializer.data).
- Adresy URL
- W moim przypadku nie ma korzenia API. Powinienem mieć tylko adresy URL, aby uzyskać różne wyniki obliczeń (kalkulator z parametrami różnic).
- Dodaj wywołujące format_suffix_patterns do przeglądania interfejsu API.
Przegapiłem coś? Czy podejście jest ogólnie poprawne?