标签: http-verbs

REST - 修改资源的一部分 - PUT或POST

我正在看到如何使用REST更新资源的一部分(例如状态指示器)的主题.

选项似乎是:

  1. 抱怨HTTP没有PATCH或MODIFY命令.但是,对于REST的HTTP MODIFY动词,接受的答案是什么?能很好地展示为什么这不像看起来那么好.

  2. 将POST与参数一起使用并识别方法(例如,名为"action"的参数).一些建议是使用自定义方法名称指定X-HTTP-Method-Override标头.这似乎导致了基于你正在尝试做的事情在实现中切换的丑陋,并且批评不是一种特别的REST方式来使用POST.事实上,采用这种方法开始感觉像RPC类型的接口.

  3. 使用PUT覆盖资源的子资源,该子资源表示要更新的特定属性.实际上,这实际上是对子资源的重写,这似乎符合PUT的精神.

在这一点上,我认为#3是最合理的选择.

这是最佳做法还是反模式?还有其他选择吗?

rest http http-verbs http-headers

16
推荐指数
3
解决办法
1万
查看次数

PATCH方法应该返回响应主体中资源的所有字段吗?

PATCH方法应该返回响应主体中资源的所有字段吗?
或者它应该只返回更新的字段?

我正在读这个

例如,如果它仅返回更新的字段,则用户可以知道在服务器中更新了哪些字段,而用户更新了一些字段.

**Users resource representations**
name: string
age: number
createdon: date
modifiedon: date
Run Code Online (Sandbox Code Playgroud)


PATCH /users/{userId}
Request body
{
  name: 'changedname',
}
Run Code Online (Sandbox Code Playgroud)


Response body Case1
{
  name: 'changedname',
  age: 20,
  createdon: 2016-01-01,
  modifiedon: 2016-06-09
}
Run Code Online (Sandbox Code Playgroud)


Response body Case2
{
  name: 'changedname',
  modifiedon: 2016-06-09
}
Run Code Online (Sandbox Code Playgroud)

rest http httprequest http-verbs restful-architecture

15
推荐指数
3
解决办法
1万
查看次数

IsPostback在技术上如何运作?

我目前遇到一个奇怪的问题,即当我点击一个只返回同一页面的asp.net按钮时,除了谷歌Chrome之外的所有浏览器都在Page_Load事件中注册对IsPostback的调用为真.

这让我试着发现ASP .Net页面中的IsPostback属性是如何在技术上实现的,这是我很难找到的.

我的想法是,它可能与以下内容有关;

  • 请求VERB类型是POST而不是GET.
  • 包含Viewstate信息的隐藏输入没有信息,因此没有先前提交的控制信息可用.
  • 请求标头中的http referer与当前URL相同.

任何人都可以提供用于确定IsPostback布尔属性的条件的实际细分吗?

注意:我正在寻找实际的实现而不是感知/理论,因为我希望用它来积极解决问题.我也搜索过MSDN,迄今为止找不到任何准确覆盖该机制的技术文章.

布莱恩,提前谢谢.

asp.net http-verbs http-headers ispostback

13
推荐指数
1
解决办法
7054
查看次数

已经定义了一个名为'Create'的成员,它具有相同的参数类型

我有两个方法,并且由http动词区分:

public class ProductImageController : Controller
{
     [HttpGet]
     public ViewResult Create(int productId)
          {
             return View(productId);
          }

      [HttpPost]
      public ViewResult Create(int productId)
          {
          }
}
Run Code Online (Sandbox Code Playgroud)

但是获取错误:

已经定义了一个名为'Create'的成员,它具有相同的参数类型

asp.net-mvc http-verbs

13
推荐指数
1
解决办法
1万
查看次数

定义幂等

所以"幂等"可以定义为:

如果执行N次的动作与仅执行一次动作具有相同的效果.

明白了,很容易.

我的问题是关于这个定义的微妙之处 - 这个行为本身就被认为是幂等的,还是你还必须考虑传递给行动的数据?

让我用一个例子来澄清:

假设我有一个更新某些资源的PUT方法,我们称之为 f(x)

显然,f(3)只要我提供3作为输入,就是幂等的.同样显而易见的是,f(5)将改变资源的价值(即,它将不再是3或以前的任何值)

所以当我们谈论幂等性时,我们是指动作/函数的概括(如,f(x)),还是我们指的是动作/函数+传递给它的数据(即f(3))?

rest web-services http http-verbs idempotent

11
推荐指数
2
解决办法
3444
查看次数

HTTP动词REPORT的实际用例是什么?为什么它会随着时间的推移而被忽略?

每当我必须创建一个RESTful Web服务并且用例意味着根据一组搜索条件获取数据时,我总是选择在主体中使用参数而不是GET请求的POST请求,原因很明显.我已经看过十几次,所以我认为这是最好的做法.

最近我偶然发现了Evert Pot的这篇有趣的博客文章,他在评论POST动词的缺点时,简单地说明了使用REPORT动词.他还指出"它的语义定义明确,并且无处不在".看完这篇文章之后,我一直试图找到关于这个REPORT动词的更多信息,但找不到多少.我知道它是RFC-3253的一部分,作为获取资源信息的一种方式,但除此之外我一无所知.

我的问题如下:

  1. 在根据一组搜索条件请求资源的情况下,REPORT真的比POST更好吗?
  2. 开始使用它是否明智还是风险太大?我HTTP Method REPORT not supported从各种工具和框架中看到了很多 问题.
  3. 多年来为什么它似乎被忽视了,为什么我们对此知之甚少呢?
  4. 使用此动词的其他有效用例是什么?

先感谢您.

http http-verbs http-method

11
推荐指数
1
解决办法
1103
查看次数

使用POST作为URL字符限制的变通方法

如果您有一个API并且仅仅因为URL长度限制和请求中复杂参数的传递而支持POST操作,您是否仍然可以说您拥有RESTful架构?

以上基本上意味着对于这个特定的(只读)API,GET和POST之间没有语义差异,因此使用POST可以完成的事情也可以通过POST完成(但反之亦然)限制).

这仍然会使该架构的风格成为RESTful吗?

architecture rest http-verbs

10
推荐指数
1
解决办法
4132
查看次数

如何以RESTful方式建模CANCEL动作?

我们目前正在处理来自我们巨石的小型服务.我们的域名与票务系统非常相似.我们已决定从域名的取消过程开始.

我们的取消服务具有简单的端点"取消",它接收票证的ID.在内部,我们检索id,执行与取消相关的一些操作,并更新商店中实体的状态.从商店的角度来看,取消的机票和实时机票之间的唯一区别是一些属性.

根据我的阅读,PATCH似乎是在这种情况下使用的正确动词,因为我只更新资源中的一个简单属性.

PATCH /api/tickets/{id}
Payload {isCancelled: true}
Run Code Online (Sandbox Code Playgroud)

但isCancelled不是实体中的实际属性.在有效载荷中发送不属于实体的属性是否公平,还是应该考虑对此请求进行建模的其他形式?我不希望将整个实体作为有效载荷的一部分发送,因为它很大.

我考虑过创建一个新的资源CancelledTickets,但在我们的域名中,我们永远不需要对已取消的门票进行GET.因此,不必创建新资源

任何帮助将不胜感激

谢谢K.

api rest http-verbs http-patch

9
推荐指数
3
解决办法
4183
查看次数

Stripe为什么使用Post方法更新资源

根据RFCPut用于更新现有资源。

但是,Stripe API 用于Post更新对象。为什么是这样?

例如,在Stripe 节点库中

  update: stripeMethod({
    method: 'POST',
    path: '{id}',
  }),
Run Code Online (Sandbox Code Playgroud)

update方法调用POST

我知道没有Patch方法,因为每次调用时都必须发送整个资源,为什么Put在这种情况下不使用 HTTP 动词?

(与有关 Facebook API 的 SO 问题中的示例不同,资源可以通过 URL 中传递的单个 ID 来识别)例如 URL 很简单/v1/customers/:id

Stripe 客户更新 API 文档

api standards http http-verbs stripe-payments

9
推荐指数
1
解决办法
1297
查看次数

在正文或 URI 中指定 REST API PUT 请求的 DTO ID?

对于 REST 和 ASP.NET Web API,即使 DTO 负载(例如 JSON)本身指定了标识符,是否也需要将标识符添加到 PUT 操作方法的路由中?

例如:

public void Put(int id, [FromBody]SomeDto someDto) // someDto has an 'Id' property
Run Code Online (Sandbox Code Playgroud)

ASP.NET Web API 模板包含该id参数,我见过很多这样的例子。

相比之下,是否可以省略该id参数并仍然遵守 REST 准则?例如:

public void Put([FromBody]SomeDto someDto)
Run Code Online (Sandbox Code Playgroud)

rest put http-verbs asp.net-web-api

8
推荐指数
1
解决办法
2179
查看次数