Dois-je me fier aux codes d'état http? Ou devrais-je utiliser une sorte de réponse spéciale? Mon serveur exécute PHP et produit des réponses JSON simples.Mon client interroge mon serveur. Si la réponse est négative (par exemple erreur) comment dois-je la communiquer?
Répondre
Je dirais personnellement que vous devriez faire les deux! Renvoyer un code d'état 4xx/5xx approprié pour montrer que quelque chose s'est mal passé et inclure un message dans votre réponse JSON.
E.g. pour une demande réussie:
{
"success": "true"
}
Et pour Fail (par exemple 405 Méthode non autorisée):
{
"success": "false",
"message": "Requested data not available"
}
Il pourrait être mieux si, vous pouvez aller avec une entité avec deux propriétés comme: Status & Message
.
Vous héritez de votre entité de résultat de requête à partir de l'entité ci-dessus.
Si l'opération aboutit, définissez le Status to True
sinon définissez Status to False
et définissez error message into the Message property of above entity
approprié. Rappelez-vous qu'il est préférable de ne pas mettre des erreurs de base de données exactes dans les affichages côté client. Cela peut augmenter les chances d'attaques de piratage, au lieu de cela vous pouvez enregistrer le message exact sur le serveur afin que les personnes concernées puissent vérifier les messages, si quelque chose ne va pas.
Ainsi, if Status=True
seul le client peut encore traiter le message (comme l'accès aux propriétés ou les afficher, etc.), else if Status=False
, le texte d'erreur fixé à la logique d'accès aux données, dans la propriété Message
sera affiché.
Merci, mais j'ai une autre question. Je ne connais pas très bien le protocole HTTP. Comment le serveur décide-t-il d'afficher la page 404 par défaut ou mon message d'erreur? – gurghet
Dans le cas de 404, le serveur n'exécuterait pas votre script (à moins que vous n'effectuiez une sorte de réécriture), de sorte que la page d'erreur 404 par défaut serait affichée. Sinon, le serveur devrait utiliser le code + body renvoyé par votre script. – halfdan
Vous devez décider du code HTTP en utilisant la fonction d'en-tête php par exemple Php header ("HTTP/1.0 404 Not Found"); ?> –