向 REST API 的 GET 方法发送大参数的正确方法是什么?

问题描述 投票:0回答:1

我需要更新返回可用订阅计划信息的现有 REST API 方法。有点虚构,看起来像这样:

GET /api/available-plans/{provider-id}

...其中 {provider-id} 类似于“google”或“apple”。

我现在试图解决的问题是,有时可用的计划或其中的某些属性取决于一些附加信息,例如用户之前订阅了哪些计划。对于 Apple 订阅,我想发送用户当前的捆绑收据以在服务器上进行分析。

问题是收据数据可能非常大——至少有 10 秒 K,仅对于我的一个测试用户来说,所以对于某些用户来说可能是 100K 或更多。 2018 年 Stack Overflow 上的这篇文章表示最大安全查询字符串长度为 2048 个字符,而这篇文章表示 URL 的总长度应为 2000-8000 个字符。所以看来我无法安全地将其放入 URL 中。

一种选择可能是将其放入正文中,但我的理解是这违反了 GET 请求中的 REST 原则。

违反规则的选项可能只是将其发布,但这似乎确实违反了 REST 原则。

我想我可以将数据发布到某个地方,获取一个 URL,然后将 URL 与我的 GET 请求一起发送,但随后我必须进行两次调用,并且还要担心保存数据并清理它。

像我这样的情况还有其他选择吗?

rest http-get url-parameters
1个回答
0
投票
TL;DR:使用

POST

违反规则的选项可能只是将其发布,但这似乎确实违反了 REST 原则。

您面临的是一种紧张:您想发送一个通用组件会识别为安全的请求,但它们不是具有您需要的语义的注册方法(在本例中,安全 AND 具有语义上重要的请求主体)。

在 HTTP 中,“没有一个方法具有我需要的语义”的答案是使用 POST。


您想要的(也许)是

HTTP QUERY - 您可以查看规范草案,并确定语义是否满足您的需求。如果确实如此,您必须决定是否要承担基于过期规范草案实施 API 的风险。

© www.soinside.com 2019 - 2024. All rights reserved.