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?
django
rest
django-rest-framework
Zachar
źródło
źródło
Odpowiedzi:
Django-rest-framework działa dobrze nawet bez wiązania go z modelem. Twoje podejście brzmi dobrze, ale uważam, że możesz przyciąć niektóre kroki, aby wszystko działało.
Na przykład struktura REST zawiera kilka wbudowanych programów renderujących. Po wyjęciu z pudełka może zwracać JSON i XML konsumentowi API. Możesz również włączyć YAML, po prostu instalując wymagany moduł Pythona. Django-rest-framework wyświetli każdy podstawowy obiekt, taki jak dict, list i tuple, bez dodatkowej pracy z Twojej strony.
W zasadzie wystarczy utworzyć funkcję lub klasę, która pobiera argumenty, wykonuje wszystkie wymagane obliczenia i zwraca wyniki w postaci krotki do widoku REST api. Jeśli JSON i / lub XML pasuje do Twoich potrzeb, django-rest-framework zajmie się serializacją za Ciebie.
W takim przypadku można pominąć kroki 2 i 3 i po prostu użyć jednej klasy do obliczeń i jednej do prezentacji konsumentowi interfejsu API.
Oto kilka fragmentów, które mogą Ci pomóc:
Zwróć uwagę, że nie testowałem tego. To tylko przykład, ale powinno działać :)
CalcClass:
Widok REST:
Twój adres urls.py:
Ten kod powinien wyświetlać listę list podczas uzyskiwania dostępu do http://example.com/api/v1.0/resource/?format=json . Jeśli za pomocą przyrostka można zastąpić
?format=json
z.json
. Możesz także określić kodowanie, które chcesz przywrócić, dodając"Content-type"
lub"Accept"
do nagłówków.Mam nadzieję, że to ci pomoże.
źródło
.model
lub.queryset
.”. Wypróbowałem dokładnie podany przykład. Czy to może być coś z najnowszą wersją django-rest-framework?W pliku urls.py wymagana jest funkcja login_required
źródło
add a comment
sesji