Konsistente REST-API-Antwort in Laravel + Dingo

9

Ich habe eine Reihe von Rest-APIs entwickelt, die für mobile Apps verfügbar sein sollen. Ich befolge das Repository-Muster für die Entwicklung des Laravel-Projekts. Wie implementiere ich einen Presenter und einen Transformer für die Formatierung einer konstanten JSON-Ausgabe im gesamten Set aller meiner APIs?

Zum Beispiel habe ich den folgenden Controller für den Login

%Vor%

Wo kommt nun ein Transformator und ein Moderator ins Bild? Ich weiß, dass beide verwendet werden, um die Ausgabe zu formatieren, indem Sie das DB-Objekt konvertieren und ein formatiertes JSON erzeugen, so dass es über meine APIs einheitlich bleibt.

Die Dingo-API und Fractal oder sogar das Framework ( L5-Repository ) bieten keine detaillierte Dokumentation und ich kann ' Ich finde keine Tutorials dazu.

Ich habe den folgenden Präsentator und Transformator für eine andere API erstellt, die die Liste der Produkte

enthält %Vor%

Moderator

%Vor%

Wie setze ich den Moderator in den Controller und antworte zurück? Versucht

%Vor%

Aber es scheint nicht zu funktionieren und das Dokument zeigt nicht die kompletten Schritte.

  1. Wie kann ich im obigen Beispiel eine Vorlage für eine Fehlerantwort erstellen, die ich in meinen APIs verwenden kann und wie erhalte ich meine Fehlerausnahmen?
  2. Es sieht so aus, als ob der Moderator und der Transformer verwendet werden können, um Objekte in vorzeigbares JSON zu konvertieren und sonst nichts. Ist das richtig?
  3. Wie verwenden Sie einen Moderator und einen Transformator für eine Erfolgsreaktion und eine Fehlerreaktion? Durch Übergabe von Ausnahmen anstelle von DB-Objekten an den Transformator?
Ajeesh 16.12.2015, 09:38
quelle

3 Antworten

1

Ich hatte das gleiche genaue Problem und hier ist, wie ich Dingo mit Transformator

verwendet habe

Controller:

%Vor%

Transformator:

%Vor%

und so behandle ich Fehler:

%Vor%     
Pawel Bieszczad 18.12.2015 16:38
quelle
1

Ich sehe gerade Ihre ähnliche Frage auch hier. So sehen Sie meine Antwort auf Ihre andere Frage hier: Ссылка .

Aus der anderen Frage, die ich abgeleitet habe, verwenden Sie Dingo , verwenden Sie das also als strukturierte Antwortklasse. Stellen Sie sicher, dass Sie den Controller von Dingo aus erweitern und dann können Sie Elemente und Sammlungen einfach in einer strukturierten Weise zurückgeben:

return $this->response->item($user, new UserTransformer);

return $this->response->collection($users, new UserTransformer);

Wenn Sie eine nette Fehlerbehandlung wünschen, suchen Sie hier nach den Dokumenten: Ссылка

Grundsätzlich können Sie jede der Kernausnahmen oder ein paar benutzerdefinierte Dingo Einsen werfen. Die Dingo-Ebene fängt sie ab und gibt eine strukturierte JSON-Antwort zurück. Wie in den Dingo-Dokumenten:

throw new Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException('Nope, no entry today!');

Erzeugt:

%Vor%     
tomvo 23.12.2015 07:34
quelle
0

Fractal ist hier vollständig dokumentiert: Ссылка Es gibt ein ausgezeichnetes Buch, das ich regelmäßig vom Phil Sturgeon Ссылка lese. Sie können die meisten Bücher finden verfügbar in github Ссылка . Sie können wirklich schöne Beispiele von Fractal dort finden.

  1. Ich würde einen Api Controller erstellen und ihn von meinen Controllern erweitern. Dort sollten alle Antwortfunktionen (respondWithError, respondWithArray etc.)
  2. sein
  3. Transformatoren transformieren Objekte in einem konsistenten json-Format, so dass alle Ihre Endpunkte für jede Entität das Gleiche liefern.

  4. Haben Sie wirklich keine Antwort auf diese

  5. Es gibt genügend Beispiele in der Fraktal-Dokumentation.
tix3 16.12.2015 10:49
quelle

Tags und Links