Premièrement, les deux permettent de rester flexible, c'est justement l'intérêt. Dans les deux cas "L'API mappera" (c'est plutôt vague comme formule), dans un cas à travers le routage des paths (fichier routes j'imagine dans Django si ça marche comme RoR et consorts), dans l'autre cas à travers un espèce d'intercepteur ou de filtre (suivant de quel framework on parle) lisant l'en-tête HTTP de la requête et routant sur la bonne classe côté serveur.
J'aurais tendance à penser tout l'inverse de toi.
Le jour où tu as N groupes avec plein de permissions différentes :
-
en approche 2 tu te retrouves avec du code spaghetti côté serveur (si on parle Seam : généralement un espèce de router en intercepteur de tes requêtes API, si on parle RoR/Spring ou assimilés : un filtre assez moche pour les requêtes API). Et ce n'est pas naturel pour le client que d'avoir des résultats différents en fonction du contexte d'appel. C'est pénible aussi pour la recherche de bugs (les bugs à la con où t'as pas de stacktrace, du style "ça renvoie rien") : "ça buggait ?" "ah je reproduis pas" "ah oui mais t'étais loggé en tant que quoi ?". Si t'as le path dans les logs, t'es sauvé. Une requête == un scénario à rejouer.
-
en approche 1 tu as N ensembles de routes mappées assez proprement sur des méthodes de classes côté serveur. Tu as plus de routes. Donc un fichier routes plus "long" mais plus lisible. Typiquement ce genre de trucs :
"/api/1/public/membres":[Controller:"MembresInPublicContext", Action:"List"]
Si jamais les deux routes mappent sur la même "ressource API" alors le fichier de routage est simple.
En gros l'approche 1 est déclarative, et honnêtement, plus tu as de groupes (voire de clients utilisant l'API dans des contextes assez différents) plus l'approche 1 donne des résultats intéressants.
En outre, on peut citer la documentation, dans laquelle c'est beaucoup plus simple d'associer un ensemble de paths/fonctionnalités disponibles section par section. Eg. Section 1 : API publique. 1.1 Ressources disponibles. 1.2 Méthodes autorisées, ...
plutôt que de décrire "Si vous êtes loggés en tant que staff alors vous avez en plus accès à".
Idem pour les logs que j'ai cités plus haut.
Après si ça se joue sur un pauvre PUT
perdu tout seul alors dans ce cas pas la peine de reconstruire toute une série de paths. Mais au contraire de ce que tu énonces dans ton message, je pense que plus tu as de clients et de contextes d'appel différents, mieux vaut s'orienter vers une approche déclarative "chemin par chemin" plutôt que "tout le monde le même chemin, on routera en fonction du token"