Nous concevons actuellement une API REST pour accéder aux données client classiques. L'un des éléments de l'API sont les actifs d'un utilisateur. Les actifs sont ajoutés sous un service donné. L'API backend n'ajoutera un actif à un utilisateur que pour un service donné. Il n'y a donc pas de relation Utilisateur - Actif, mais une relation Utilisateur - [Service] - Actif.
Nos URI ressembleront à ceci:
/users/{id}/assets/{id}/services/{id}
Les utilisations de l'API connaîtront l'ID d'actif et l'ID de service pour créer une nouvelle entrée. Ce avec quoi nous nous débattons, c'est la création de cette relation.
Une façon simple serait de publier toute la relation avec /users/{id}/assets/
POST /users/{id}/assets
{asset:${id}, service:{id}, attribute1:"{var}", attribute2:"{var}"}
mais alors nous ne créons pas réellement un actif comme l'URI pourrait l'indiquer, mais une relation actif-service.
Comme alternative, nous considérons POST'ing à l'URI adressant la relation, comme ceci:
POST /users/{id}/assets/{id}/service/{id}
{attribute1:"{var}", attribute2:"{var}"}
Mais dans ce cas, le chemin de ressource /users/{id}/assets/{id}
n'existera pas avant le POST et sera créé comme effet secondaire.
Le POST sur un chemin de ressource qui n'existe pas encore est-il autorisé?
Merci pour vos pensées,
Gerard.
la source
Il y a plusieurs points ici: Premièrement: vous ne devez pas mettre l'ID lors de la création d'une nouvelle ressource car cet ID pourrait déjà exister, ou le système peut utiliser une technique spécifique pour générer l'ID et vous le forcez à utiliser le vôtre, et pour le proposer que l'id soit créé par le système l'attribut d'en-tête d'emplacement doit être défini en cas de ressource de création, pour récupérer le feed avec l'id généré.
Deuxièmement: votre JSON n'est pas correct, vous devez traiter le service comme un autre objet à l'intérieur de l'objet d'actif, comme dans les services URI de ressource, vous devez le traiter comme un tableau.
doit être:
Si vous allez utiliser de cette façon
Troisièmement: je ne préfère pas utiliser cette méthode pour la conception, si ce cas a échoué, comment pourriez-vous savoir qu'il a échoué lors de la création d'un actif ou d'un service,
la source
Voici une ligne de pensée différente:
De cette façon, vous définissez les relations comme un lien à trois voies entre l'actif, le service et l'utilisateur et n'impliquez aucune relation hiérarchique
Vous pouvez ensuite récupérer une relation spécifique en:
ou recherchez un sous-ensemble de relations en:
ou
La manière originale n'est pas fausse, mais cette approche peut vous donner plus de flexibilité sur qui elle sera utilisée.
la source