Je suis la conception d'une API REST pour la gestion des utilisateurs qui doivent prendre en charge les opérations de CRUD suivantes:REST conception API des ressources avec de nombreuses opérations en fonction de l'état des ressources
- créer un nouvel utilisateur (POST
/users
) - mettre à jour un utilisateur existant (PUT
/users/{userid}
) - supprimer un utilisateur (DELETE)
/users/{userid}
- détails get utilisateur (GET
/users/{userid}
)
et les opérations qui dépendent de l'état de l'utilisateur:
- activer un utilisateur
- bloc utilisateur
- débloquer un utilisateur
- suspendre un utilisateur
- archive un utilisateur
La charge utile des demandes ci-dessus ne contient pas de représentation utilisateur. Il contient des informations telles que par ex. le reson pourquoi le est bloqué/suspendu/archivé.
Selon les bonnes pratiques de conception REST, les URI ne devraient pas être des opérations API, il y a donc d'autres façons que par ex. POST /users/{userid}/activate
comment de telles opérations peuvent être mises en œuvre?
Merci pour la réponse. Un statut d'utilisateur peut-il être une ressource distincte? C'est une partie intégrante de l'utilisateur. Il n'a pas sa propre identité. Vous ne pouvez pas créer un statut d'utilisateur sans utilisateur. Comment faites-vous par exemple bloquer un utilisateur, vous appelez PUT '/ users/{userid}/status' avec JSON' {"command": "block"} '? –
@AdamSiemion Je viens de mettre à jour ma réponse: puisque le * status * appartient à un * user *, le * status * peut être géré comme une ** sous-ressource ** de la ressource * user *. Pour mettre à jour le statut de l'utilisateur, il suffit d'effectuer un 'PUT' sur'/users/{userid}/status' en envoyant le * status *. Je ne suis pas sûr de la propriété 'command'. J'utiliserais 'value' ou' status'. –
Ok, je vois. Je pense que ce que vous suggérez est le niveau 0 dans le Richardson Maturity Model - un URI, un verbe HTTP. Quelle que soit l'opération que vous voulez appeler, bloquer/débloquer/archiver vous appelez toujours le même URI '/ users/{userid}/status'. –