【问题标题】:Params for a GET request for a REST Service JavaREST 服务 Java 的 GET 请求的参数
【发布时间】:2015-09-13 10:06:41
【问题描述】:

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

功能

“GET”文件状态:

参数:

时间范围:(字符串)

FlowId:(字符串)

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

IS_ADD_A= 或 IS_ADD_B= 或两者(字符串)

正则表达式=(字符串)

Cookie=XXXXX

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

【问题讨论】:

    标签: java rest http post get


    【解决方案1】:

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

    【讨论】:

    • 是的,我同意放置 body 将违反 HTTP 规范,使用 POST 获取数据将违反 REST,将参数用作标头是否有效且可取?跨度>
    • 您可能会争辩说,为搜索提供端点,例如每个 POST 的 myentity/search 和发送查询条件并不真正违反 REST 原则。查询可以是有效的实体,POST 不需要创建但可以。
    • 我不会使用标题来传输查询条件。标头用于元数据,在其中放入内容感觉不对。
    【解决方案2】:

    如果您的参数值不是很长,则使用查询字符串是您的最佳选择。 6 个参数并不多,只要不超过路径中字符的 IE 限制 - 2,048 (http://www.boutell.com/newfaq/misc/urllength.html)。例如,Google 搜索引擎使用的参数多于 6。如果 URL 路径有可能超出上述限制,则应使用 POST 代替。

    【讨论】: