标签: http-method

REST API - PUT与PATCH的实例

首先,一些定义:

PUT在第9.6节RFC 2616中定义:

PUT方法请求将所包含的实体存储在提供的Request-URI下.如果Request-URI引用已经存在的资源,则封闭的实体应该被视为驻留在源服务器上的实体的修改版本.如果Request-URI未指向现有资源,并且该URI能够被请求用户代理定义为新资源,则源服务器可以使用该URI创建资源.

PATCH在RFC 5789中定义:

PATCH方法请求将请求实体中描述的一组更改应用于Request-URI标识的资源.

另外根据RFC 2616第9.1.2节, PUT是幂等的,而PATCH则不是.

现在让我们来看一个真实的例子.当我/users使用数据进行POST {username: 'skwee357', email: 'skwee357@domain.com'}并且服务器能够创建资源时,它将响应201和资源位置(假设/users/1),并且/users/1将返回对GET的任何下一次调用{id: 1, username: 'skwee357', email: 'skwee357@domain.com'}.

现在假设我要修改我的电子邮件.电子邮件修改被视为"一组更改",因此我应该修补/users/1 " 补丁文档 ".在我的情况下,它将是一个json {email: 'skwee357@newdomain.com'}.然后服务器返回200(假设权限正常).这让我想到第一个问题:

  • PATCH不是幂等的.它在RFC 2616和RFC 5789中也这么说.但是如果我发出相同的PATCH请求(使用我的新电子邮件),我将获得相同的资源状态(将我的电子邮件修改为所请求的值).为什么PATCH不是幂等的?

PATCH是一个相对较新的动词(2010年3月引入的RFC),它解决了"修补"或修改一组字段的问题.在引入PATCH之前,每个人都使用PUT来更新资源.但是在引入PATCH之后,让我感到困惑的是当时使用的PUT是什么?这让我想到了第二个(也是主要的)问题:

  • 什么是PUT和PATCH之间的真正区别?我读过PUT可能用于替换特定资源下的整个实体,因此应该发送完整实体(而不是像PATCH一样发送属性集).这种情况的实际用法是什么?您希望何时替换/覆盖特定资源URI下的实体以及为什么不将此类操作视为更新/修补实体?我在PUT中看到的唯一实际用例是在集合上发布PUT,即/users替换整个集合.在引入PATCH之后,在特定实体上发布PUT是没有意义的.我错了吗?

rest json http put http-method

614
推荐指数
8
解决办法
36万
查看次数

POST和GET有什么区别?

我最近才参与PHP/AJAX/jQuery,在我看来,这些技术的一个重要部分就是POSTGET.

首先,POST和之间有什么区别GET?通过实验,我知道GET将返回的变量及其值附加到URL字符串

website.com/directory/index.php?name=YourName&bday=YourBday
Run Code Online (Sandbox Code Playgroud)

POST不是.

那么,这是唯一的区别还是有特定的规则或惯例使用其中一个?

其次,我也看到POSTGETPHP之外:还AJAX和jQuery.这3个怎么做POSTGET不同?它们是相同的想法,相同的功能,只是采用不同的方式?

post get http http-method

371
推荐指数
6
解决办法
63万
查看次数

REST API PATCH或PUT

我想用以下场景的适当方法设计我的休息端点.

有一个小组.每个组都有一个状态.管理员可以激活或取消激活该组.

我应该将我的终点设计为

PUT /groups/api/v1/groups/{group id}/status/activate
Run Code Online (Sandbox Code Playgroud)

要么

PATCH /groups/api/v1/groups/{group id}

with request body like 
{action:activate|deactivate}
Run Code Online (Sandbox Code Playgroud)

rest http http-put http-method http-patch

252
推荐指数
4
解决办法
16万
查看次数

我什么时候应该使用GET或POST方法?他们之间有什么区别?

使用GETPOST方法有什么区别?哪一个更安全?他们每个人的(dis)优势是什么?

(类似问题)

forms post get http http-method

236
推荐指数
11
解决办法
17万
查看次数

哪种HTTP方法与哪种CRUD方法匹配?

在RESTful样式编程中,我们应该使用HTTP方法作为构建块.虽然哪种方法与经典的CRUD方法相匹配,但我有点困惑.GET/Read和DELETE/Delete非常明显.

但是,PUT/POST有什么区别?它们是否与"创建和更新"一对一匹配?

rest http crud http-method

206
推荐指数
6
解决办法
12万
查看次数

curl -GET和-X GET

Curl提供了一系列不同的http方法调用,它们以X为前缀,但也提供了相同的方法.我已经试过了两个,我似乎无法找出差异.有人可以快速向我解释这两种操作有何不同?

curl http-method

111
推荐指数
2
解决办法
16万
查看次数

DELETE Request Body的RESTful替代方案

虽然HTTP 1.1规范似乎允许DELETE请求上的消息体,但它似乎表明服务器应该忽略它,因为它没有定义的语义.

4.3消息正文

服务器应该在任何请求上读取和转发消息体; 如果请求方法不包含实体主体的定义语义,那么在处理请求时应该忽略消息主体.

我已经回顾了有关SO及其他内容的几个相关讨论,例如:

大多数讨论似乎都同意允许在DELETE上提供消息体,但通常不建议这样做.

此外,我注意到各种HTTP客户端库中的趋势,这些库中似乎记录了越来越多的增强功能,以支持DELETE上的请求主体.大多数图书馆似乎都有责任,尽管偶尔会有一些初步阻力.

我的用例要求在DELETE上添加一些必需的元数据(例如删除的"原因",以及删除所需的一些其他元数据).我已经考虑了以下选项,其中任何一个看起来都不合适,并且与HTTP规范和/或REST最佳实践内联:

  • 消息正文 - 规范表明DELETE上的消息体没有语义值; HTTP客户端不完全支持; 不是标准做法
  • 自定义HTTP - 需要自定义标头通常违反标准做法 ; 使用它们与我的其余API不一致,其中没有一个需要自定义标头; 此外,没有好的HTTP响应可用于指示错误的自定义标头值(可能是一个单独的问题)
  • 标准HTTP标头 - 没有标准标头是合适的
  • 查询参数 - 添加查询参数实际上会更改要删除的Request-URI; 违反标准做法
  • POST方法 - (例如POST /resourceToDelete { deletemetadata })POST不是删除的语义选项; POST实际上代表了所需的相反操作(即POST创建资源下属;但我需要删除资源)
  • 多个方法 - 将DELETE请求拆分为两个操作(例如,PUT删除元数据,然后删除DELETE)将原子操作拆分为两个,可能会留下不一致的状态.删除原因(和其他相关元数据)不是资源表示本身的一部分.

我的第一个偏好可能是使用消息体,第二个是自定义HTTP头; 但是,如上所述,这些方法存在一些缺点.

是否有任何与REST/HTTP标准一致的建议或最佳实践,以便在DELETE请求中包含此类必需的元数据?还有其他我没有考虑的替代方案吗?

rest http httprequest http-method

86
推荐指数
3
解决办法
6万
查看次数

我应该使用什么方法进行登录(身份验证)请求?

我想知道在执行登录请求时我应该使用哪种http方法,为什么?由于此请求在服务器上创建了一个对象(用户会话),我认为它应该是POST,你怎么看?但由于登录请求应该是幂等的,它可能是PUT,不是吗?

对于注销请求,我应该使用DELETE方法吗?

login logout http-method

74
推荐指数
5
解决办法
6万
查看次数

HTTP请求方法的有效负载

HTTP上Wikipedia条目列出了以下HTTP请求方法:

  • HEAD:要求响应与对应于GET请求的响应相同,但没有响应主体.
  • GET:请求指定资源的表示.
  • POST:将要处理的数据(例如,从HTML表单)提交到标识的资源.数据包含在请求正文中.
  • PUT:上传指定资源的表示.
  • DELETE:删除指定的资源.
  • TRACE:回显收到的请求,以便客户端可以查看中间服务器所做的更改或添加(如果有).
  • 选项:返回服务器支持指定URL的HTTP方法.这可以通过请求'*'而不是特定资源来检查Web服务器的功能.
  • CONNECT:将请求连接转换为透明的TCP/IP隧道,通常是为了通过未加密的HTTP代理实现SSL加密通信(HTTPS).
  • 补丁:用于对资源应用部分修改.

我有兴趣了解(特别是关于前五种方法):

  • 哪些方法能够(应该?)接收有效载荷
    • 可以接收有效载荷的方法,它们如何接收?
      • 通过URL中的查询字符串?
      • 通过URL编码的身体?
      • 通过raw/chunked body?
      • 通过上述([全部/部分])的组合?

我很欣赏所有的输入,如果你能分享一些(最好是轻的)阅读,那也很棒!

rest http request payload http-method

68
推荐指数
2
解决办法
9万
查看次数

HTTP方法GET,POST,PUT和DELETE有什么区别

我正在开发REST WCF服务,理论上我知道何时选择什么目的.

  • GET 获得资源
  • PUT 更新
  • POST 插入
  • DELETE 删除

但是,如果我们不遵循上述规则,假设插入一个我使用过的GET方法的记录,有什么不利之处呢?

.net rest wcf web-services http-method

46
推荐指数
3
解决办法
7万
查看次数

标签 统计

http-method ×10

http ×7

rest ×6

get ×2

post ×2

.net ×1

crud ×1

curl ×1

forms ×1

http-patch ×1

http-put ×1

httprequest ×1

json ×1

login ×1

logout ×1

payload ×1

put ×1

request ×1

wcf ×1

web-services ×1