Ich bin Anfänger im Django REST Framework und brauche Ihren Rat. Ich entwickle einen Webdienst. Der Dienst muss eine REST-Schnittstelle zu anderen Diensten bereitstellen. Die REST-Schnittstelle, die ich implementieren muss, funktioniert nicht direkt mit meinen Modellen (ich meine die Operationen get, put, post, delete). Stattdessen bietet es anderen Diensten einige Berechnungsergebnisse. Auf Anfrage führt mein Dienst einige Berechnungen durch und gibt nur die Ergebnisse zurück (speichert die Ergebnisse nicht in einer eigenen Datenbank).
Im Folgenden verstehe ich, wie diese REST-Schnittstelle implementiert werden kann. Korrigieren Sie mich, wenn ich falsch liege.
- Erstellen Sie eine Klasse, die die Berechnungen durchführt. Nennen Sie es 'CalcClass'. CalcClass verwendet die Modelle in seiner Arbeit.
- Die für die Berechnungen erforderlichen Parameter werden an den Konstruktor übergeben.
- Implementieren Sie die Berechnungsoperation. Es gibt Ergebnisse als 'ResultClass' zurück.
- ResultClass erstellen.
- Abgeleitet vom Objekt.
- Es enthält nur Attribute, die die Berechnungsergebnisse enthalten.
- Ein Teil der Berechnungsergebnisse wird als Tupel von Tupeln dargestellt. Soweit ich weiß, ist es für die weitere Serialisierung besser, eine separate Klasse für diese Ergebnisse zu implementieren und ResultClass eine Liste solcher Objekte hinzuzufügen.
- Erstellen Sie den Serializer für ResultClass.
- Ableiten von Serializers.Serializer.
- Die Berechnungsergebnisse sind schreibgeschützt. Verwenden Sie daher hauptsächlich Feldklassen für Felder anstelle von Spezialklassen wie IntegerField.
- Ich sollte die save () -Methode weder in ResultClass noch in Serializer implementieren, da ich die Ergebnisse nicht speichern werde (ich möchte sie nur auf Anfrage zurückgeben).
- Impl Serializer für verschachtelte Ergebnisse (denken Sie an das oben erwähnte Tupel Tupel).
- Ansicht erstellen, um Berechnungsergebnisse zurückzugeben.
- Ableiten von APIView.
- Muss nur bekommen ().
- Erstellen Sie in get () CalcClass mit Parametern, die aus der Anforderung abgerufen wurden, rufen Sie calc () auf, rufen Sie ResultClass ab, erstellen Sie Serializer und übergeben Sie die ResultClass an sie, und geben Sie Response (serializer.data) zurück.
- URLs
- In meinem Fall gibt es keine API-Wurzel. Ich sollte nur URLs haben, um verschiedene Berechnungsergebnisse zu erhalten (Berechnung mit diff-Parametern).
- Fügen Sie aufrufende format_suffix_patterns für das API-Browsing hinzu.
Habe ich etwas verpasst? Ist der Ansatz im Allgemeinen korrekt?