2016-11-16 66 views
0

我被要求为前端团队创建一个端点RESTfull,它将向我发送有关用户表单的信息。REST API中的PUT和POST。它们只用于语义分离吗?

有很多的场景,但我会解释只有1个来试图解决我的问题:

  1. 他们会送我一个包含了很多关于用户数据的数组。例如userFirstName和userLastName。我需要检查用户是否存在于数据库中。如果存在,请更新表单中发送的所有数据。如果用户不存在,请在表中创建它,然后在所有相关表内创建与新用户相关的信息。

    1. 如果PUT更新数据
    2. 后,如果插入数据

    我一定要告诉他们什么动词:

因此,在这种情况下创建一个端点时,我们可以有两种可能性他们应该在调用我的端点时使用,如果是PUT或POST。 我可以给他们POST并在这个过程中做一些更新,或者我可以给他们一个PUT并做一些INSERT。

基于RESTfull标准,不应该这样做。但除了最佳实践标准(要语义化)之外,还有其他限制需要评估吗?

+0

“任何其他约束要评估” - 我不这么认为。两者都会完成这项工作。看来,你在这里不可能是纯洁的。所以只需选择一个并使用它。我建议POST更“通用”。 –

回答

0

基本上,当你想发送信息到服务器时,你应该使用HTTP方法POST。在我看来,你可以创建三个方法,POST方法来验证用户是否存在,以及可以在验证后调用的INSERT和UPDATE方法。

0

PUT在HTTP中有一个非常具体的含义,那就是它表示一个资源表示的幂等置换。 From RFC 7231

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

如果你把PUT消息的实体主体,从它从头开始构建资源的一个新的演示文稿,然后替代以前的表现(认为键值存储),然后将是适当的。

在另一方面,如果你是合并与你已有的代表性,然后将请求主体提供的表示是合适。

菲尔丁,响应一个注释It is ok to use POST,建议

我们只用PUT当更新的动作是幂等,并表示已完成。

在HTTP中,当其他方法都不合适时,POST是适当的方法,所以这就是您在此使用的方法。

但是......没有理由不能拥有更多资源(更多uris),包括对资源进行的每个编辑都有唯一的uri。使用PUT创建一个新的资源作为副作用也更新一些其他资源是一个完全可以接受的模式。这种新资源不一定非常耐用 - 您可以在副作用完成后尽快过期。

这为您提供了PUT的幂等写入语义,而不会违反HTTP施加的完整表示约束。

相关问题