当前位置: 首页 > 知识库问答 >
问题:

S3 REST API和POST方法

郏博瀚
2023-03-14

我正在使用AWS S3 REST API,在解决了一些恼人的签名问题后,它似乎起作用了。但是,当我使用正确的REST动词创建资源时,即post,我得到405 method not allowed。相同的请求可以很好地使用put方法并创建资源。

是我做错了什么,还是AWS S3 REST API不完全符合REST?

共有1个答案

汪鸿志
2023-03-14

是的,您把CRUD映射到HTTP方法是错误的。

尽管POST的使用很流行,但也存在很多误解,包括这里关于堆栈溢出的高评价答案,POST并不是“创建资源的正确方法”。其他方法的语义由HTTP协议决定,但POST的语义由目标媒体类型本身决定。POST是用于任何未被HTTP标准化的操作的方法,因此它可以用于创建,也可以用于更新,或者其他方法尚未完成的任何操作。例如,使用POST进行检索是错误的,因为您已经对此进行了标准化,但是当客户端由于某种原因不能使用PUT时,使用POST创建资源是很好的。

同样,PUT也不是“更新资源的正确方法”。PUT是用于完全替换资源的方法,忽略其当前状态。如果您拥有服务器期望的全部表示形式,您可以使用PUT进行创建;如果您提供了完整的表示形式,包括您不会更改的部分,您可以使用PUT进行更新,但是使用PUT进行部分更新是不正确的,因为您要求服务器考虑资源的当前状态。修补程序就是这样做的方法。

在非正式语言中,每个方法对服务器说的是:

>

  • POST:获取此数据并将其应用于给定URI标识的资源,遵循您为资源媒体类型记录的规则。

    PUT:用这个数据替换给定URI标识的任何内容,忽略已经存在的内容(如果有的话)。

  •  类似资料:
    • 使用dropwizard框架实现了Resful应用程序。我使用dropwizard-auth-jwt对maven包进行身份验证: com.github.toastshaman dropwizard-auth-jwt 1.0.2-0 为了为资源添加身份验证,我实现了sampleAuthenticator,它是使用主体类进行身份验证检查的已实现的身份验证器类。 当MyUser实现主体时: 使用这种配置

    • 问题内容: 我使用window.open方法打开了带有参数的新站点,我必须通过post方法来传递它。我找到了解决方案,但不幸的是它不起作用。这是我的代码: 接下来,我创建数组: 并通过以下方式调用函数: 但是,当我单击此按钮时,站点test.asp为空(当然,我尝试获取传递值- )。 我怎么解决这个问题,为什么我不能获得通过值? 问题答案: 无需将表单写入新窗口(要用HTML代码中的值进行编码就很

    • 我是spring boot和Junit测试的新手。我在测试Rest Api的Get和Post方法时遇到了问题。许多在线教程指导在JUnit测试中使用mockMvc。但是这些对于JUnit 5仍然有效吗? 然而,我读到一篇文章说,从SpringBoot 2.1开始,您不需要包含@ExtendWith扩展。由于Junit 5和spring boot都从以前的版本更新了很多变化,所以很难分析在线可用的代

    • 主要内容:HTTP 请求:GET vs POST,jQuery $.get() 方法,实例,demo_test.php 文件代码:,jQuery $.post() 方法,实例,demo_test_post.php 文件代码:jQuery get() 和 post() 方法用于通过 HTTP GET 或 POST 请求从服务器请求数据。 HTTP 请求:GET vs POST 两种在客户端和服务器端进行请求-响应的常用方法是:GET 和 POST。 GET - 从指定的资源请求数据 POST -

    • 我有一个资源支持GET和POST请求。这里是示例资源的示例代码: 除了变量定义外,这两种方法中的代码实际上是相同的。使用

    • 我有POST方法,我想发送一个图像和一个JSON对象。这是我的方法: 我不明白我的问题在哪里,邮递员的要求还是我的方法? 这是我的分类模型: