2016-11-29 2 views
1

Dites que j'ai quelques API configurées en tant que micro-services. Une API est de gérer les utilisateurs (API utilisateur) et ressemble à:Points de terminaison similaires sur plusieurs API

/users     GET, POST 
    /{id}    GET, PUT, DELETE 

Ensuite, il y a une autre API qui est utilisée pour gérer les informations de sécurité (rôles d'accès, autorisations, etc.), et un user créé dans l'utilisateur L'API peut se voir attribuer un group défini dans l'API de sécurité. Cette association doit-elle être faite dans le micro-service de sécurité, ou dans le micro-service utilisateur?

Ma première pensée est dans le micro-service de sécurité puisque c'est là que toutes les applications vont demander l'information de sécurité. Avec cela, et qu'un user ne peut être attribué à un group, je viens donc avec le point final de:

/users/{id}/group  GET, POST, DELETE 

Mais ce point final se sent comme il appartient plus dans le micro-service utilisateur. Les autres paramètres qui sont une option sont:

/groups/{id}/users  GET, POST, DELETE 
       /{id} GET, DELETE 

Mais ce fait il semble qu'un user pourrait être attribué à plusieurs groupes. Cependant, je peux le concevoir de telle sorte que lorsqu'un user est associé à un group, il le dissocie d'un group auquel il était précédemment associé.

Quelle est la meilleure option, ou existe-t-il une meilleure façon de gérer ces types d'appels API que je ne connais pas?

Répondre

0

Je suppose qu'il n'y a pas nécessairement de "bonne" manière. Voici comment je l'aborderais.

Basé sur:

Cependant, je ne pouvais concevoir de telle sorte que lorsqu'un utilisateur est associé à un groupe , ce qu'il dissocie d'un groupe qu'il était auparavant associé à .

/groups/{id}/users  GET, POST, DELETE 
       /{id} GET, DELETE 

Ce critère d'évaluation causerait des problèmes en ce que les Id changeraient et vous auriez donc de changer l'URL que vous appelez après un utilisateur passe à un autre groupe. Les appels consécutifs doivent donc passer à un nouveau point de terminaison.

Par exemple: /groups/1/users/1 peut être valide un moment, mais lorsque l'utilisateur déplace des groupes, /groups/1/users/1 ne renverra plus de résultat. Il serait désormais /groups/2/users/1

Alors qu'avec:

/users/{id}/group  GET, POST, DELETE 

Le critère d'évaluation ne changera pas si l'utilisateur passe des groupes, qui maintient plus propre et plus claire à mon avis.L'utilisateur est toujours le même et il est clair que le groupe est associé à cet utilisateur, mais il n'a pas d'importance ce que group est fait référence car elle retournera toujours associée group pour la user avec cette id

Je suppose que la ligne de fond est que le critère d'évaluation doit refléter ce que vous essayez d'atteindre, si vous obtenez le groupe pour un utilisateur:

/users/{id}/group  GET, POST, DELETE 

ou si vous obtenez tous les utilisateurs pour un groupe:

/groups/{id}/users  GET, POST, DELETE