Ich habe eine Reihe von Rest-APIs entwickelt, die für mobile Apps verfügbar gemacht werden 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 für alle meine APIs?Konsistente REST-API-Antwort in Laravel + Dingo
Zum Beispiel haben ich die folgenden Controller für die Anmeldung
public function authenticate()
{
$request = Request::all();
try {
// If authenticated, issue JWT token
//Showing a dummy response
return $token;
} catch (ValidatorException $e) {
return Response::json([
'error' =>true,
'message' =>$e->getMessageBag()
]);
}
}
Jetzt, wo ich einen Transformator und Moderator ins Bild kommen? Ich weiß, dass beide verwendet werden, um die Ausgabe zu formatieren, indem Sie das DB-Objekt konvertieren und ein formatiertes JSON erzeugen, damit es in meinen APIs einheitlich bleibt.
Die Dingo API und Fraktale oder sogar das Framework (L5 repository) bieten keine detaillierte Dokumentation und ich kann keine Tutorials zu diesem Thema finden.
ich habe folgende Moderator und Transformator für anderen API erstellt, die die Liste der Produkte
namespace App\Api\V1\Transformers;
use App\Entities\Product;
use League\Fractal\TransformerAbstract;
class UserTransformer extends TransformerAbstract {
public function transform(\Product $product)
{
return [
'id' => (int) $product->products_id
];
}
}
Presenter
<?php
namespace App\Api\V1\Presenters;
use App\Api\V1\Transformers\ProductTransformer;
use Prettus\Repository\Presenter\FractalPresenter;
/**
* Class ProductPresenter
*
* @package namespace App\Presenters;
*/
class ProductPresenter extends FractalPresenter
{
/**
* Transformer
*
* @return \League\Fractal\TransformerAbstract
*/
public function getTransformer()
{
return new UserTransformer();
}
}
Wie werde ich zurück stellen Sie den Moderator in der Steuerung und darauf zu reagieren gibt ? Versucht
$this->repository->setPresenter("App\\Presenter\\PostPresenter");
Aber es scheint nicht zu funktionieren und das Dokument zeigt nicht die vollständigen Schritte.
- Wie kann ich im obigen Beispiel eine Vorlage für eine Fehlerantwort erstellen, die ich in meinen APIs verwenden kann und wie werde ich meine Fehlerausnahmen an sie weitergeben?
- Es scheint wie presenter und Transformator kann verwendet werden, um die Datenbank Objekte in vorzeigbar JSON und nichts anderes zu konvertieren. Ist das richtig?
- Wie verwenden Sie einen Presenter und einen Transformator für eine Erfolgsantwort und eine Fehlerreaktion? Durch Übergabe von Ausnahmen anstelle von DB-Objekten an den Transformator?
return $ this-> response-> Artikel ($ user, neue UserTransformer); transformiert meine Antworten nicht wirklich. Es ist kein Fehler oder etwas darin gezeigt. Ich bekomme nur den einfachen JSON ohne irgendwelche Transformationen. – Ajeesh