Désolé mais je reste catégorique. Tu me décris précisément le mécanisme des permissions et ceci doit être géré par le code de réponse HTTP.
Absolument pas. Désolé Andr0 mais là je ne suis pas du tout d'accord.
C'est à peu près comme dire : il est inutile d'afficher les permissions sur les fichiers, si le mec l'ouvre en écriture et essaie de le sauvegarder, il va se faire jeter de toute façon.
Non, les erreurs HTTP sont là pour remonter des ERREURS du client. C'est une façon propre d'indiquer quel type d'erreur il a faite. Et accessoirement, cela permet de protéger le serveur (essentiellement l'erreur 400). Et oui, cela décrit, côté serveur, la gestion des permissions sur une ressource. Simplement, mets-toi deux secondes à la place d'un client.
Je veux afficher un topic, avec le bouton "éditer" à droite de la page, (appli mobile, web, …). Comment je détermine si le bouton doit être affiché ? Je fais une requête bidon de modification et je regarde si elle passe ? Tu bouffes complètement inutilement des ressources côté client et côté serveur (et un round-trip réseau qui ne ser à rien). Et si la requête passe, tu as potentiellement des effets de bord complètement indésirables (date de dernière modification changée, donc une indication fonctionnelle pour… une simple raison bassement technique : ça n'a pas de sens).
Les codes d'erreur HTTP permettent de gérer proprement les permissions côté serveur, et d'indiquer DES ERREURS je me répète, pas de donner une indication. L'API doit se mettre au service des besoins des clients. Là, clairement, il y a une gestion de l'affichage différente suivant qui visionne un sujet, un message, etc. C'est à l'API de fournir cette information au client. Pas au client de :
La façon la plus propre de faire ça au sens REST du terme (encore mieux qu'un flag, je dirais), c'est d'indiquer, soit dans les headers soit en payload de la requête les URL de modifications d'une ressource si, et seulement si, l'utilisateur en possède les droits.
PS : et non, ce n'est certainement pas de la pollution d'information ou du bruit. C'est une information essentielle pour tout client.
PPS : Exemple ? L'API Github :
https://developer.github.com/v3/repos/
| [
{
"id": 1296269,
/* ... */
"permissions": {
"admin": false,
"push": false,
"pull": true
}
}
]
|