背景信息分析:
根据 RFC 2616,第 9.5 条,POST 用于创建资源:
使用 POST 方法要求原始服务器接受请求中包含的实体作为请求-URI 在请求线中识别的资源的新子属。
根据 RFC 2616,第 9.6 条,PUT 用于创建或取代资源:
PUT 方法要求关闭的实体存储在提供的请求-URI. 如果请求-URI 提到已经存在的资源,关闭的实体 SHOULD 将被视为居住在原始服务器的修改版本. 如果请求-URI 没有指向现有资源,并且 URI 能够由请求用户年龄定义为新资源。
我的问题:
那么,哪种HTTP方法应该用于创建资源?或者两者都应该得到支持?
您应该使用 PATCH. 您应该使用 PATCH 等问题列表
PATCH /questions HTTP/1.1
包含您要创建的对象的列表,如
[
{
"title": "I said semantics!",
"content": "Is this serious?",
"answer": "Not really"
}
]
您将修改现有资源列表,而无需提供全新的内容,您将从不存在的数据转换为现有信息的状态,而无需提供所有数据(服务器最有可能将添加身份证)。
这个方法的一个很好的优点是,您可以使用单个请求创建多个实体,简单地将所有实体列入列表中。
一个缺点是,可能没有人这样使用PATCH,我害怕,我只是发明了它,但我希望,我提供了一个很好的论点。
至于语法,CREATE是IMHO的唯一正确选择,其余的一切都是一个圆洞的平方点,不幸的是,我们所有的都是圆洞。
被认为是不同的,在这个“PUT”,如“GET”被认为是无效的 - 也就是说,你可以要求相同的准确的PUT多次,结果将是像你执行它只有一次。
我将描述我认为最广泛使用和最有用的条约:
当你在一个特定的URL中找到一个资源时,发生的事情就是它应该在这个URL上存储,或者沿着这些行走。
例如,当你想创建一个新流时,你可以将其输入到某些URL,但是当你想向现有流发送一个消息时,你可以将其输入到URL。
至于修改流的属性,您可以使用 PUT 或 POST. 基本上,只使用“PUT”当操作是无效的 - 否则使用 POST。
但是,请注意,并不是所有现代浏览器都支持其他HTTP字母,而不是GET或POST。