我正在看到如何使用REST更新资源的一部分(例如状态指示器)的主题.
选项似乎是:
抱怨HTTP没有PATCH或MODIFY命令.但是,对于REST的HTTP MODIFY动词,接受的答案是什么?能很好地展示为什么这不像看起来那么好.
将POST与参数一起使用并识别方法(例如,名为"action"的参数).一些建议是使用自定义方法名称指定X-HTTP-Method-Override标头.这似乎导致了基于你正在尝试做的事情在实现中切换的丑陋,并且批评不是一种特别的REST方式来使用POST.事实上,采用这种方法开始感觉像RPC类型的接口.
使用PUT覆盖资源的子资源,该子资源表示要更新的特定属性.实际上,这实际上是对子资源的重写,这似乎符合PUT的精神.
在这一点上,我认为#3是最合理的选择.
这是最佳做法还是反模式?还有其他选择吗?
PATCH方法应该返回响应主体中资源的所有字段吗?
或者它应该只返回更新的字段?
我正在读这个
例如,如果它仅返回更新的字段,则用户可以知道在服务器中更新了哪些字段,而用户更新了一些字段.
**Users resource representations**
name: string
age: number
createdon: date
modifiedon: date
PATCH /users/{userId}
Request body
{
  name: 'changedname',
}
Response body Case1
{
  name: 'changedname',
  age: 20,
  createdon: 2016-01-01,
  modifiedon: 2016-06-09
}
Response body Case2
{
  name: 'changedname',
  modifiedon: 2016-06-09
}
我目前遇到一个奇怪的问题,即当我点击一个只返回同一页面的asp.net按钮时,除了谷歌Chrome之外的所有浏览器都在Page_Load事件中注册对IsPostback的调用为真.
这让我试着发现ASP .Net页面中的IsPostback属性是如何在技术上实现的,这是我很难找到的.
我的想法是,它可能与以下内容有关;
任何人都可以提供用于确定IsPostback布尔属性的条件的实际细分吗?
注意:我正在寻找实际的实现而不是感知/理论,因为我希望用它来积极解决问题.我也搜索过MSDN,迄今为止找不到任何准确覆盖该机制的技术文章.
布莱恩,提前谢谢.
我有两个方法,并且由http动词区分:
public class ProductImageController : Controller
{
     [HttpGet]
     public ViewResult Create(int productId)
          {
             return View(productId);
          }
      [HttpPost]
      public ViewResult Create(int productId)
          {
          }
}
但是获取错误:
已经定义了一个名为'Create'的成员,它具有相同的参数类型
所以"幂等"可以定义为:
如果执行N次的动作与仅执行一次动作具有相同的效果.
明白了,很容易.
我的问题是关于这个定义的微妙之处 - 这个行为本身就被认为是幂等的,还是你还必须考虑传递给行动的数据?
让我用一个例子来澄清:
假设我有一个更新某些资源的PUT方法,我们称之为 f(x)
显然,f(3)只要我提供3作为输入,就是幂等的.同样显而易见的是,f(5)将改变资源的价值(即,它将不再是3或以前的任何值)
所以当我们谈论幂等性时,我们是指动作/函数的概括(如,f(x)),还是我们指的是动作/函数+传递给它的数据(即f(3))?
每当我必须创建一个RESTful Web服务并且用例意味着根据一组搜索条件获取数据时,我总是选择在主体中使用参数而不是GET请求的POST请求,原因很明显.我已经看过十几次,所以我认为这是最好的做法.
最近我偶然发现了Evert Pot的这篇有趣的博客文章,他在评论POST动词的缺点时,简单地说明了使用REPORT动词.他还指出"它的语义定义明确,并且无处不在".看完这篇文章之后,我一直试图找到关于这个REPORT动词的更多信息,但找不到多少.我知道它是RFC-3253的一部分,作为获取资源信息的一种方式,但除此之外我一无所知.
我的问题如下:
HTTP Method REPORT not supported从各种工具和框架中看到了很多 
 问题.先感谢您.
如果您有一个API并且仅仅因为URL长度限制和请求中复杂参数的传递而支持POST操作,您是否仍然可以说您拥有RESTful架构?
以上基本上意味着对于这个特定的(只读)API,GET和POST之间没有语义差异,因此使用POST可以完成的事情也可以通过POST完成(但反之亦然)限制).
这仍然会使该架构的风格成为RESTful吗?
我们目前正在处理来自我们巨石的小型服务.我们的域名与票务系统非常相似.我们已决定从域名的取消过程开始.
我们的取消服务具有简单的端点"取消",它接收票证的ID.在内部,我们检索id,执行与取消相关的一些操作,并更新商店中实体的状态.从商店的角度来看,取消的机票和实时机票之间的唯一区别是一些属性.
根据我的阅读,PATCH似乎是在这种情况下使用的正确动词,因为我只更新资源中的一个简单属性.
PATCH /api/tickets/{id}
Payload {isCancelled: true}
但isCancelled不是实体中的实际属性.在有效载荷中发送不属于实体的属性是否公平,还是应该考虑对此请求进行建模的其他形式?我不希望将整个实体作为有效载荷的一部分发送,因为它很大.
我考虑过创建一个新的资源CancelledTickets,但在我们的域名中,我们永远不需要对已取消的门票进行GET.因此,不必创建新资源
任何帮助将不胜感激
谢谢K.
但是,Stripe API 用于Post更新对象。为什么是这样?
例如,在Stripe 节点库中
  update: stripeMethod({
    method: 'POST',
    path: '{id}',
  }),
该update方法调用POST
我知道没有Patch方法,因为每次调用时都必须发送整个资源,为什么Put在这种情况下不使用 HTTP 动词?
(与有关 Facebook API 的 SO 问题中的示例不同,资源可以通过 URL 中传递的单个 ID 来识别)例如 URL 很简单/v1/customers/:id
对于 REST 和 ASP.NET Web API,即使 DTO 负载(例如 JSON)本身指定了标识符,是否也需要将标识符添加到 PUT 操作方法的路由中?
例如:
public void Put(int id, [FromBody]SomeDto someDto) // someDto has an 'Id' property
ASP.NET Web API 模板包含该id参数,我见过很多这样的例子。
相比之下,是否可以省略该id参数并仍然遵守 REST 准则?例如:
public void Put([FromBody]SomeDto someDto)
http-verbs ×10
rest ×6
http ×5
api ×2
http-headers ×2
architecture ×1
asp.net ×1
asp.net-mvc ×1
http-method ×1
http-patch ×1
httprequest ×1
idempotent ×1
ispostback ×1
put ×1
standards ×1
web-services ×1