可以在Scala / Play中为类似REST的API使用POST方法和JSON格式

时间:2015-09-14 19:17:49

标签: json scala rest playframework

我们决定对所有内部API使用POST方法和JSON格式,这使得一切变得更简单。但后来我们意识到这不是真正的RESTful。更重要的是,GET请求在高负载下比POST更轻量级。

我们有关于GET方法的问题。我们必须将条件对象绑定到HTTP请求(查询字符串),这迫使我们为每个条件模型构建Form对象。如您所知,构建Form对象将手动完成,并且没有像JSON格式化程序(Macro Inception)那样可用的自动化。

另一个问题是我们必须决定是使用路由参数还是查询字符串。

我认为使用单个HTTP方法并使所有API调用均匀是更简单的。它有意义吗?

2 个答案:

答案 0 :(得分:4)

POST是用于HTTP协议未标准化的任何操作的方法,简单检索在GET方法中标准化。因此,使用POST进行简单检索不是RESTful。更重要的是,您似乎希望使用POST,因此您可以像POST有效内容一样处理查询字符串参数,但REST URI是原子标识符,包括查询字符串。您的应用程序不应该依赖于URI语义,并且提取除了标识之外用于任何目的的信息位在REST中也没有多大意义。

坦率地说,根据您的描述,您的API远未被视为真正的RESTful,这根本不应该是一个问题。做任何与您的工具更一致的事情,并为您的应用程序更好地工作。 REST不适合所有人,并且担心如果不是您的应用程序的要求而设计真正REST的API,则更有可能导致糟糕的设计选择。

答案 1 :(得分:1)

使用像您描述的POST一样没有任何问题。实际上,GET请求不应该改变服务器的状态,而应该只用于检索。换句话说,如果您要将数据发送到服务器,例如,创建一个实体,那么使用GET在技术上是不正确的。

没有什么你在描述的声音“不是RESTful”。 POST绝对可以成为RESTful架构的一部分。

也就是说,您使用的HTTP方法应该与它将执行的操作相对应。例如,如果您按ID检索实体,则应使用GET,而如果您按ID更新实体,则应使用POSTPUT。这为使用API​​的开发人员提供了关于各种API方法的副作用和预期用途的提示。