Je travaille sur le spa JavaScript Client et une API reposante sur HTTPS.
L'application client doit appeler un point d'extrémité publique (aucun jeton requis) afin de valider (obtenir) un jeton spécifique précédemment rappelé dans l'application SPA.
API retourne:
{"isValid": "true"}
:{"isValid": "false"}
:{"isValid": "false"}
J'aimerais savoir:
Remarque: cette question n'est pas à peu près du code de statut, ma préoccupation concerne la conception d'un point final public qui fournit des informations à une application cliente dans laquelle le point final ne nécessite pas d'authentification à l'aide de jeton.
Cela dépend du but de l'API.
Si le but est la validation des jetons, le retour de 200 OK pour réussir les demandes semble sensible. Une erreur 4xx signifierait que le tilisation de l'API de validation est incorrect, et non que le jeton n'est pas valide.
Les choses sont différentes si le jeton gère l'accès à cette API. Dans ce cas, vous n'avez pas besoin d'un point de terminaison pour vérifier si le jeton est valide. Le backend doit vérifier le jeton d'accès sur chaque Demande. Ensuite, lorsqu'une demande échoue parce que le jeton n'est pas valide, je m'attendrais à une réponse non autorisée.
N'oubliez pas que REST API utilise http comme -transport. Les données réelles de votre API ne sont pas exprimées sur un niveau HTTP, mais dans les organes des demandes et des réponses. Les en-têtes HTTP et les codes d'état peuvent être utilisés pour les métadonnées, l'authentification et la messagerie d'erreur hors bande.
Il existe une analogie pour programmer des langages ici: un appel API est similaire à un appel de méthode. La réponse contient une valeur de retour - le corps de réponse. Mais si la réponse HTTP comporte un statut 4xx ou 5xx, c'est-à-dire comme si la méthode avait lancé une exception et ne revenait pas normalement.
Donc, votre validation de votre jeton: devrait-elle renvoyer true/false à la suite (une réponse de 200 avec un corps contenant ces données), ou devrait-elle ne rien retourner ou jeter une exception (réponse 2xx contre 4xx)?
Vous avez des codes de statut, vous devriez les utiliser :)
Pour moi, le développeur n'a pas conçu correctement les API, car il aurait dû utiliser des codes d'état comme vous l'avez suggéré.
Par conséquent, si la demande a un:
200
;400
;{"errno": X, "error": "<error-message>"}
;401
;Comme vous pouvez le voir, un corps JSON n'est pas toujours nécessaire, A REST API ne devrait pas compter uniquement sur les corps JSON, mais utilisez toute la sémantique de protocole HTTP (S).
Pour référence sur les codes d'état, prenez un look ici et ici .
@Ailurusfulgens suggéré ce RFC . Il est très utile de clarifier comment utiliser des corps JSON avec 4xx
code d'état.
En résumé: