Ceci est un suivi de Mise à jour d'une valeur de manière robistique avec la poste < / p>
Comment puis-je simplement ajouter à l'attribut d'une ressource à l'aide de repos. Imaginez que j'ai client.Balance et équilibre est un int. Disons que je veux juste dire au serveur de l'annexe 5 de l'équilibre actuel. Puis-je le faire de manière reposante? Si oui, comment? P>
Gardez à l'esprit que le client ne connaît pas l'équilibre existant du client, il ne peut donc pas P>
(il y aurait également des problèmes de concurrence avec ce qui précède.) p>
3 Réponses :
Pour y penser de manière reposante, vous devriez penser à l'action elle-même en tant que ressource. Par exemple, si cela était bancaire et que vous souhaitiez mettre à jour le solde sur un compte, vous créeriez une ressource de dépôt, puis en ajoute un de ceux-ci. La conséquence de cela serait de mettre à jour le solde du client p>
Cela aide également à faire face à des problèmes de concurrence, car vous soumettriez une action de +5 plutôt que de nécessiter une connaissance préalable du solde du client. Et, vous seriez également en mesure de rappeler cette ressource (par exemple de dépôt / 51 pour le dépôt avec un ID de 51) et de voir d'autres détails à ce sujet (c.-à-d. Raison du dépôt, date du dépôt, etc.). P>
Edit: réalisa que l'utilisation d'un ID de 5 pour le dépôt confond réellement le problème, alors changé à 51. P>
Je pourrais donc créer des dites: CLIENT / 21 / DÉBITS CLIENT / 21 / CRÉDITS Chacun aurait une collection de ressources de débit et de crédit? Maintenant, sous la hotte, je voudrais juste + = le montant du crédit et - = le débit sur le client.Balance. Cela signifie qu'un accès au client / 21 / crédit / 5 ne serait pas possible. Est-ce que ça va en termes de repos? Basé sur votre réponse, cela ne semble pas non plus.
Pour créer un nouveau débit, je posterais au client / 21 / Débits / NOUVEAU et inclut le montant de 5 comme montant dans le poste. Si je voulais obtenir le débit avec un ID de 5, j'aurais un client / 21 / débit / 5
Cela devrait être mis de côté pour créer une nouvelle ressource, bien sûr.
Ceci est une variante plus simple de mon Réponse à votre autre question . p>
i pense em> Vous êtes toujours dans les contraintes de repos si vous faites ce qui suit. Cependant, je suis curieux de ce que les autres pensent aussi de cette situation, alors j'espère entendre des autres. P> Votre URI sera le suivant: p> <credits href="/customer/21/credits">
<credit href="/customer/21/credits/credit-id-7382134">
<amount>13</amount>
...
</credit>
<credit href="/customer/21/credits/credit-id-134u482">
...
</credit>
...
</credits>
Votre approche semble la plus logique pour moi.
@Darrel - merci. J'aimerais vraiment savoir si vous avez une alternative. Vos tags indiquent que vous avez un très bon intérêt dans le repos, et vous avez probablement plus d'expérience que celle des suggestions ou des améliorations?
Le problème est que la question a des exigences relativement triviales afin que les informations que nous avons, je n'ai rien à ajouter. Les situations réelles ont tendance à devenir un peu plus difficiles, mais c'est incroyable combien de problèmes de repos peuvent être abordés en publiant une sous-ressource qui est une liste des "demandes de changement". Si vous regardez un peu plus de manière réaliste le scénario, vous pouvez voir que «Créditation» Un «client» est une simplification. Vous voudrez probablement poster à quelque chose comme / client / 21 / Comptebalance / Crédits. Mais cela dépasse la portée de la question initiale.
Une approche différente consisterait à modéliser les "Compte-cavaliers" et "Compte-Coprovins" comme des ressources entièrement distinctes et simples de rendre la propriété de la balance du "client" un champ calculé en lecture seule.
Je suis d'accord, je pense que ces approches offrent plus de flexibilité et de contrôle, et leur permettent également de croître plus facilement à l'avenir. Merci pour l'entrée.
Eh bien, il existe une alternative autre solution de @ Rob-Hruska.
L'idée fondamentale est la même: penser à chaque opération de crédit / débit en tant que transaction autonome. Cependant, j'ai utilisé une fois un backend qui prend en charge le stockage des données sans schéma dans Json, de sorte que je me retrouve avec la définition de l'API comme Je sais que cela n'est pas approprié dans le contexte "crédit / débit", car un compte actif pourrait avoir une augmentation des enregistrements de transaction. Mais dans mon contexte, j'utilise de telles tactiques pour stocker des données finies (en fait, je stockais des points différents de points de manière GPS lors d'une sortie de conduite). P> Inconvénients: Ce style API a une forte dépendance au schéma de comportement du backend Moins de fonctionnalités. P> Avantages: au moins mon approche est totalement reposante du point de vue sémantique. P> par contraste, @ Rob-Hruska "Simple et légèrement laid" Solution 1 N'a pas un en-tête de localisation valide pour revenir dans la réponse «créée 201 créée», ce qui n'est pas un comportement réparateur courant. (Ou peut-être, nous pouvons laisser la solution de @ Rob-Hruska 1 pour renvoyer également un en-tête d'emplacement factice, qui pointe vers une page "410 parti" ou "404 non trouvé". Est-ce plus reposant? Les commentaires sont les bienvenus!) P > p>
Je suis content que vous ayez posé cette question, même si je suis un peu déçu que cela n'obtienne pas beaucoup d'activité. J'aimerais voir ce que les gens avec plus d'expérience pensent de ce sujet.