Comment produire des erreurs de l'API réponses dans Laravel 5.4?
Chaque fois que je fais un appel à /api/v1/posts/1
, l'appel est transféré à la show
méthode
public function show(Post $post) {
return $post;
}
dans PostController.php
ingénieux contrôleur. Si le poste n'existe pas, le serveur renvoie une réponse JSON. Toutefois, si le post ne pas existe pas, le serveur renvoie HTML, en dépit de la demande clairement attend JSON en retour. Voici une démonstration avec le Facteur.
Le problème est qu'une API est censé renvoyer application/json
, pas text/html
. Donc, voici mes questions:
1. Ne Laravel la prise en charge intégrée pour automatiquement retour JSON si des exceptions se produisent lorsque nous utilisons implicite modèle de feuille de route de liaison (comme dans show
méthode ci-dessus, lorsque nous avons 404)?
2. Si oui, comment puis-je l'activer? (par défaut, je reçois HTML, pas de JSON)
Si ce n'est pas quelle est l'alternative à la réplication de l'suivantes à travers chaque API contrôleur
public function show($id) {
$post = Post::find($id); //findOrFail() won't return JSON, only plain HTML
if (!$post)
return response()->json([ ... ], 404);
return $post;
}
3. Est-il un générique de l'approche à utiliser dans app\Exceptions\Handler
?
4. Ce n'est un standard d'erreur/exception réponse contenir? J'ai googlé mais trouvé coutume beaucoup de variations.
5. Et pourquoi n'est-elle pas la réponse JSON encore intégré dans implicite route de la liaison de modèle? Pourquoi ne pas simplifier les devs de la vie et de la poignée de cette baisse de niveau de tapage automatiquement?
MODIFIER
Je suis parti avec une énigme après les gens de chez Laravel IRC m'a conseillé de quitter l'erreur réponses seulement, en faisant valoir que HTTP standard exceptions sont rendus au format HTML par défaut, et le système qui consomme de l'API doit gérer une erreur 404 sans regarder le corps. J'espère que plus de gens vont se joindre à la discussion, et je me demande comment vous allez y répondre.
Vous devez vous connecter pour publier un commentaire.
J'utilise ce code dans
app/Exceptions/Handler.php
, probablement vous aurez besoin de faire quelques changementsEn outre, si vous utilisez formRequest validations, vous avez besoin de remplacer la méthode
response
, ou vous allez être redirigé et il peut causer des erreurs.prepareException
est une méthode deIlluminate\Foudantion\Exceptions\Hanlder
laravel.com/api/5.4/Illuminate/Foundation/Exceptions/... s'il vous Plaît, passez en revue vos commentaires avant de les postes un commentaire comme celui-ci, et être sûr que vous n'aurez pas de commentaires du tout tort. Ce ne sera pas aider tout le monde.response
fonction aller? J'ai fait un recherche globale, mais ne pouvait pas trouver une méthode avec cette signature.Vous pouvez vérifier si json est prévu dans le générique de gestionnaire d'exception.
La façon dont nous avons géré par la création d'un contrôleur de base qui prend en charge le retour de la réponse de la partie. Ressemble à quelque chose comme cela,
Maintenant, vous avez besoin d'étendre cette dans votre contrôleur
Vous souhaitez obtenir ce type de réponse
Vous suffit d'utiliser
use Illuminate\Support\Facades\Response;
.ensuite, faites le revenir comme suis:
Et maintenant, vous aurez un retour JSON....