REST服务Java的GET请求的参数

REST服务Java的GET请求的参数,java,rest,http,post,get,Java,Rest,Http,Post,Get,我正在用Java创建一个REST服务,对GET方法的参数有疑问。 我必须在GET请求中传递以下参数 作用 “获取”文件状态: 参数: 时间范围:(字符串) FlowId:(字符串) ID_A=或ID_B=或两者(字符串) 是添加A=还是添加B=或两者都是(字符串) 正则表达式=(字符串) Cookie=XXXXX 因此,由于有6个参数,因此将其作为查询字符串传递将不是一种有效的方法,而且不能在正文中使用相同的方法(因为这违反了HTTP GET规范) 将此作为POST调用将违反REST原则,因为我

我正在用Java创建一个REST服务,对GET方法的参数有疑问。 我必须在GET请求中传递以下参数

作用

“获取”文件状态:

参数:

时间范围:(字符串)

FlowId:(字符串)

ID_A=或ID_B=或两者(字符串)

是添加A=还是添加B=或两者都是(字符串)

正则表达式=(字符串)

Cookie=XXXXX

因此,由于有6个参数,因此将其作为查询字符串传递将不是一种有效的方法,而且不能在正文中使用相同的方法(因为这违反了HTTP GET规范) 将此作为POST调用将违反REST原则,因为我想从服务器获取数据,
解决这个问题的有效方法是什么呢?将参数作为查询字符串传递是毫无疑问的,在正文中传递它是违反HTTP规范的,将其作为可能也不好的头,将此作为POST请求,这将证明fielding的REST原则。

在HTTP GET调用主体中传递数据不仅违反规范,而且会导致各种服务器端技术出现问题,这些技术假定您不需要在GET调用中访问主体。(一些客户端框架在GET和正文中的查询方面也存在一些问题)如果您使用长参数进行查询,我将使用POST。然后,它使用POST获取数据,但您并不是唯一一个必须采用这种方式来支持潜在的大型查询的人

如果参数值不是很长,使用查询字符串是最好的选择。6参数不是很多,只要不超过路径-2048()中字符的IE限制。例如,谷歌搜索引擎使用的参数比6多得多。如果URL路径有可能超过上述限制,则应改用POST

虽然6个参数不是很多,但是它们的长度会很长,而且URL可能会受到影响,POST会让远程客户端感到困惑,因为他想获取数据,但发现他正在使用POST。在这种情况下,您应该使用POST方法。将实际数据作为报头字段()传输被认为是不好的做法。你可以记录你的API以避免混淆。是的,我同意把body放在HTTP规范上是违反的,而发布获取数据的帖子则是违反其他规范的,将参数用作标题是否有效且可取?您可能会认为,为搜索提供端点(例如myentity/search)并为每篇文章发送查询条件并不真正违反REST原则。查询可以是一个有效的实体,POST不需要创建任何东西,但可以。我不会使用标题来传输查询条件。标题是用于元数据的,放在那里的内容感觉不太对劲。