2016-12-28 1 views
1

Autant que je comprends, GET doit être idempotent - il ne peut rien changer dans le système et répéter qu'il devrait toujours retourner la même chose à moins que quelque chose d'autre ait changé l'état de l'application.Peut-on utiliser HTTP GET s'il y a de petits effets secondaires?

Problème, sur mon site Web, il devrait y avoir beaucoup de petits changements basés sur si un certain contenu a déjà été vu par l'utilisateur. Je veux dire, comme les notifications, les alertes de nouveaux messages, le tri du contenu selon que l'utilisateur l'a vu ou non, combien d'utilisateurs voyaient les compteurs de contenu ... Par exemple, lorsque l'utilisateur clique sur notification, la notification disparaît de son panneau de notification. vu là encore, donc cela change quelque chose - l'état de la notification, mais je peux appuyer sur F5 autant de fois que je veux et il retourne toujours la même page avec la même info, les mêmes boutons, etc

Puis-je ignorer ce genre de Effet secondaire comme trop petit et je peux utiliser GET ou dois-je faire la plupart des liens et des boutons sur le site utilisent POST comme je le fais avec des liens et des boutons qui conduisent à des changements plus "sérieux"? Je fais cela en faisant des formes autour de chacun d'eux avec ces liens comme des actions de formulaire et des boutons originaux comme des boutons de soumission du formulaire qui me semblent un peu désordonnés et que je ne veux pas presque partout (ou y at-il un meilleur moyen?) .

+1

La question la plus importante est de savoir si la requête est * sûre *, voir https://greenbytes.de/tech/webdav/rfc7231.html#safe.methods –

Répondre

2

Cela peut être abordé de plusieurs points de vue, je vais éclairer sous cet angle:

Le résultat final ici est toujours la même, d'où la demande est idempotent.

L'utilisateur visite l'URL, le résultat final est que les notifications sont effacées. Ils peuvent visiter la page encore et encore, le résultat final est que les notifications sont effacées. Ils n'obtiendront pas de message d'erreur car les notifications ont déjà été effacées (cela ne serait pas idempotent). Oui, ils verront contenu différent chaque fois qu'ils visitent la page, mais rien ne dit que le contenu de la page doit être identique chaque fois que la ressource est demandée (ce qui mettrait la moitié du web dans une liaison). Comparez-le avec une requête POST à ​​/questions (qui crée une nouvelle question, par exemple): à chaque fois que vous répétez cette requête POST, une ressource entièrement nouvelle est créée. Vous POST une fois, et /questions/12345 est en cours de création. Vous répétez la même demande, /questions/12346 est en cours de création. C'est pas idempotent.

Non, vous n'avez pas besoin de faire toutes ces demandes dans les requêtes POST.