2017-04-13 107 views
0

我正在设计一个API Rest服务,允许用户将文件上传到服务器。我可以在没有ID的情况下放入吗?

我在想这是一个PUT请求,它会去服务器/资源/ ID,并在json请求正文中有base64文件。

我的问题是关于这个ID。在我的脑海中,我将文件传递给服务器,服务器应该负责存储该文件并生成一个唯一的ID以便稍后检索该文件,然后将此ID返回给客户端,并且状态为ok。

所以我正在考虑这样做,将它发送到服务器/资源,没有ID,但是这是好的还是坏的设计?

+0

如果你想创建一个新的形象,你应该使用POST,在这种情况下,服务器将与ID返回对象,所以你是正确的,你不必使用一个ID,但该方法也是错误的。 –

回答

0

No. PUT的意思是“创建或更新”,并应带有明确的ID。 POST适用于创建新的东西。

参见:PUT vs POST in REST

2

关于这个问题我莫名其妙地与@TatsuyukiIshi给出的接受的答案不同意的实际称号。 PUT的语义是:将当前在给定URI处可获得的内容替换为请求中包含的有效内容。如果可以在没有ID的情况下识别资源,即只存在其中一种类型的资源,则有可能在不指定ID的情况下处理更新,因为“单个资源”的ID已经在端点本身中隐含地给出。尽管如此,我不得不承认这种情况很少。

这种情况可能是一个剪贴板资源,您可以随意放置任意内容并在稍后检索它。当然,你也可以使用POST,虽然POST请求收到的正文的语义不太清楚。与PUT操作相反,POST也不是幂等的。

然而,使用诸如PUT /api/messages之类的东西通常意味着用请求发送的内容代替所有消息,这可能并不是您真正想要的。通常您只需要一次修改单个资源,因此使用标识特定资源的随附标识。

关于问题的实际内容,通过POST上传文件是常见操作。在成功上传时,您将返回一个201 Created响应,其中包含指向生成的资源的Location HTTP标头。通过POST收到的请求业务处理内容的行为是完全以达到服务实现。因此,您可以创建一个新的资源,没有任何实际的资源创建或其他东西(甚至更新不规范禁止)执行一些任务的支持。

0

太晚了你,但我有同样的问题,发现了大量的错误信息,所以我会在这里让什么发现。

有2 RFC掌管REST风格的,关于这个问题的一个是RFC 7231中,你会发现:

目标资源的状态是 创建或替换的PUT方法请求包含在请求消息有效载荷中的表示 定义的状态。

所以你不能没有ID发送PUT。

很多RESTful API甚至会在更新时发送POST,这也是错误,因此您应该始终使用PUT来发送ID以创建它,或者应该使用POST来创建并更新PUT,但请记住POST应该总是创建,换句话说,如果你不先用GET来查找它,你会复制你的文件。

欲了解更多信息:https://tools.ietf.org/html/rfc7231#section-4.3.3

相关问题