我有User的用户集合。用户 - Id,FName,LName。
对于insert,我使用Id,FName,LName传递User实例。如果用户不存在,该服务会插入用户。
对于更新,我再次使用所有参数传递User实例。该服务使用给定的Id更新用户的FName和LName。
我希望在服务中插入和更新为2个单独的方法。
我不能为这两种方法使用相同的URI。如下所示:
[WebInvoke(UriTemplate = "Users", Method = "PUT")]
void UpdateUser(User instance);
[WebInvoke(UriTemplate = "Users", Method = "PUT")]
void AddUser(User instance);
实现这一目标的最佳途径是什么?
我不同意一篇帖子说更新URI有类似的内容:
[WebInvoke(UriTemplate = "Users/{userId}", Method = "PUT")]
void UpdateUser(string userId, User instance);
因为用户ID已存在于Userinstance中。
虽然我同意PUT方法可以执行插入和更新。出于某种原因,我需要将它们分开。
答案 0 :(得分:3)
PUT,作为idempotent操作应该在您正在PUT或完全替换现有资源的URL上创建一个新资源(在此处输入此资源)。如果您多次对相同的URL执行相同的PUT,您仍将使用相同的资源。
POST不一定是幂等的,因为您正在更改现有资源。如果你的POST正在做一些事情,比如在订单中添加项目,并且将相同的数据发布到同一个url多次,那么最终可能会得到一个包含同一项目的倍数的订单。
简短回答,让您的插入操作PUT并更新POST。
我认为this SO Answer能够很好地解释它。
答案 1 :(得分:1)
你可以通过几种方式看待它
所以我会说:
然后通过GET获取用户信息/ Users / {userId}或删除用户/ Users / {userId}并删除。
不确定这是否有帮助,如果没有,请告诉我,我会再试一次: - )