Restful API - 它需要接近,放置,发布,删除的接近程度?

时间:2017-11-20 19:37:20

标签: json spring http post restful-url

我在Spring中设置了一个API,客户端可以在其中指定要接收的对象的ID。它返回对象的JSON列表(使用"type 1 count: " + Types[0].Count + "type 2: count: " Types[1].Count 注释)。

但是,由于请求可以是长列表,因此我将其设置为POST,并将其作为名为@ResponseBody的对象接收(使用ProductRequest注解)。这似乎不符合官方REST API标准,因为帖子是官方创建新对象的,但是以这种方式实现它似乎更好,因为你不会用一堆id混淆URL。另外,我可以指定自定义输出的其他参数。

所以我的问题是,这可以被视为有效的RESTful设计吗? Post并不是用来创建一个对象,所以它并不严格符合restful。思考?

3 个答案:

答案 0 :(得分:1)

这是一个简单的GET请求。

@GetMapping(path = "/your-url")
public List<Object> method(@RequestParam(name="ids") List<Long> objectIds) {
}

您可以像简单的Java列表一样接收列表。

/api?ids=1,2,3

答案 1 :(得分:1)

你可以很好地做一个http POST到&#34;得到&#34;资源。有一些非常有效的例子,

  1. GraphQL - 我们所做的就是将请求体中的一些查询发送(POST)到&#34; GET&#34;一些我们喜欢的格式的数据

  2. 假设您必须使用用户名和密码进行身份验证以获取特定数据,您将在GET请求中将其发送到Header中,或者您将执行POST以获取&#39; GET&#39;一个数据。

答案 2 :(得分:1)

  

不能溢出URL字符串允许的最大值吗?

实际上,URI的长度没有限制。但是,实际上,你可以遇到一些。

根据RFC7230(强调我的),

  

HTTP不会对请求行的长度设置预定义的限制,如第2.5节所述。接收比其实现的任何方法更长的方法的服务器应该使用501 (Not Implemented)状态代码进行响应。接收请求目标的服务器长于其希望解析的任何URI必须使用414 (URI Too Long)状态代码进行响应。

     

在实践中发现了对请求行长度的各种临时限制。建议所有HTTP发件人和收件人至少支持8000个八位字节的请求行长度。

它清楚地表明,在我们处理您的问题时,我们不能依赖请求行。

  

这可以被视为有效的RESTful设计吗?

由于上述限制,使用POST是一种有效的解决方法

正如this Wikipedia article所述,

  

这些问题的常见解决方法是使用POST而不是GET并将参数存储在请求正文中。请求正文的长度限制通常远高于URL长度。

为了让您完全摆脱犹豫,有一个common non-standard header X-Http-Method-Override。它请求Web应用程序使用标头中给出的方法覆盖请求中指定的方法:

X-Http-Method-Override: GET

我不确定Spring是否处理标题。虽然,它有HiddenHttpMethodFilter过滤器似乎做类似的工作。