Ce qui est actuellement recommandé d'effectuer des mises à jour partielles avec l'API Web?
Je me demandais comment mettre en œuvre des mises à jour partielles avec ASP.NET Web API RESTful de l'interface? Par exemple, disons que nous sommes les objets de passage sur le fil de la structure suivante:
public class Person {
public int Id { get; set; }
public string Username { get; set; }
public string Email { get; set; }
}
Comment pourrait-on charge la mise à jour de parties de Person
à un moment, par exemple la Email
propriété? Est-il recommandé de mettre en œuvre cette via OData et le PATCH verbe, ou serait-il mieux de mettre en œuvre PATCH soi-même?
- HTTP
PATCH
il est
Vous devez vous connecter pour publier un commentaire.
Il n'y a pas de support dans le courant de la dernière stable version de l'API Web (à partir d'août 2012). Donc, si vous voulez utiliser est l'API Web RTM, pour la mise en œuvre de l'ensemble de la plomberie vous-même.
Avec cela dit, OData version préliminaire du package prend en charge les mises à jour partielles très bien par le biais de la nouvelle
Delta<T>
objet.Actuellement le Microsoft.AspNet.WebApi.OData paquet est au RC de la version (0.3) et peut être obtenu à partir d'ici: http://www.nuget.org/packages/Microsoft.AspNet.WebApi.OData
Une fois que vous installez, vous pouvez ensuite l'utiliser en conséquence:
Et vous souhaitez appeler de la part du client, comme ceci:
L'avantage évident de cette est que cela fonctionne pour n'importe quelle propriété, et vous n'avez pas de soins si vous mettez à jour
Email
ouUsername
ou autres joyeusetés.Vous pouvez également regarder dans ce post, car il montre une technique similaire http://techbrij.com/http-patch-request-asp-net-webapi
MODIFIER (plus d'info):
Afin de simplement utiliser le PATCH, vous n'avez pas besoin d'activer quelque chose OData liées, sauf pour l'ajout de la OData package - pour obtenir l'accès à la
Delta<TEntityType>
objet.Vous pouvez alors faire ceci:
Si votre article est, disons le:
Vous pouvez PATCH pour
/api/values/3
avec:et qui sera correctement mise à jour de votre objet.
Delta<TEntity>
permettra de garder une trace des changements pour vous. C'est une classe dynamique qui agit comme un léger proxy pour votre Type et comprendre les différences entre l'objet d'origine (c'est à dire à partir de la DB) et celui transmis par le client.Cela n'affectera PAS le reste de votre API en aucun cas (sauf bien sûr le remplacement de la Dll avec les plus récents afin de faciliter la OData les dépendances de package).
J'ai ajouté un exemple de projet pour démontrer le travail de PATCH + Delta - vous pouvez le saisir ici (il.s VS2012) https://www.dropbox.com/s/hq7wt3a2w84egbh/MvcApplication3.zip