web-dev-qa-db-fra.com

REST API - Manipulation de la manutention

Supposons qu'il existe une ressource principale "/ comptes" qui comporte profil (nom, identifiant national, DOB), adresses et contacts (email, téléphones). Je les considère comme des sous-ressources car ils ne peuvent pas exister sans compte. Pour les mettre à jour, je pense que deux options

Option 1

  • Met/Comptes/{CompteID}/Adresse
  • Met/Comptes/{CompteID}/Contacts
  • Met/Comptes/{CompteID}/Profil

option 2

  • Met/Comptes/{CompteID}
    [.____] (Selon la présence/l'absence d'adresse/téléphone/profil, décidez quelles mises à jour pour effectuer)

Je suis tenté d'utiliser l'option 1 car de la perspective de la mise en œuvre chacune des mises à jour contient son propre flux logique et de processus. Un URI séparé peut garder la mise en œuvre plus propre et gérable

  1. Serait-il incorrect d'envisager un profil, une adresse, des contacts comme des sous-sortes. Si oui, quel serait un moyen approprié de les représenter
  2. S'ils peuvent être considérés comme des sous-ressources qui parmi les éléments ci-dessus sont une option appropriée ou y a une option complètement différente à considérer
7
sbhas

Serait-il incorrect d'envisager un profil, une adresse, des contacts comme des sous-sortes.

Non, tout ce que vous aimez peut être une subrédération. REST NE SPURE (une sous-sérése est une ressource) et utiliser des chemins est une conception URI appropriée pour des éléments hiérarchiques.

existe-t-il une option complètement différente à prendre en compte?

Vous voudrez peut-être des modifications dirigées vers des ressources plus fines. La méthode de vente est excellente pour les modifications idempotes. C'est un peu twitchy pour des modifications partielles - officiellement, la spécification HTTP "ne définit pas comment la méthode de vente affecte l'état du serveur d'origine"; Mais il est largement compris que la mise en place est censée inclure une représentation complète de la ressource, de créer ou de remplacer la sémantique.

Par exemple: Si vous allez toujours modifier les trois champs du profil ensemble, utilisez une seule ressource pour modifier le lot est approprié. D'autre part, si vous souhaitez soutenir le remplacement de la date de naissance sans gêner les autres champs, vous aurez surpris de moins de personnes si vous écrivez la modification à une sous-ressource dédiée (c.-à-d.:/Comptes/{CompteID}/Profil/Dob ).

Ceci est une préoccupation générale: mettez-vous à jour une ressource en la modifiant directement ou en induisant des modifications en modifiant une sous-ressource. Par exemple, vous semblez avoir plusieurs contacts dans votre définition - il peut être approprié d'accepter directement les modifications des contacts ou que la représentation des contacts est plutôt une reflexion des modifications effectuées sur des contacts/email ou de contacts/téléphone. .

4
VoiceOfUnreason

Http and REST Ne vous inquiétez pas si une ressource est une "sous-ressource", elle n'a aucune connaissance structurelle d'un "ne peut exister sans" contrainte.

D'une perspective de cohérence, si PUT est autorisé pour une "sous-ressource", je m'attendrais au moins à pouvoir être capable de GET cela séparément de sa ressource parentale. Ensuite, un strict niveau REST Approche (hateoas) recommanderait probablement probablement de mettre un lien hypermédia à la ressource d'adresse dans la réponse pour GET Account Au lieu d'inclure directement les données d'adresse là-bas.

1
guillaume31