我需要更新返回可用订阅计划信息的现有 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 请求一起发送,但随后我必须进行两次调用,并且还要担心保存数据并清理它。
像我这样的情况还有其他选择吗?
POST。
违反规则的选项可能只是将其发布,但这似乎确实违反了 REST 原则。您面临的是一种紧张:您想发送一个通用组件会识别为安全的请求,但它们不是具有您需要的语义的注册方法(在本例中,安全 AND 具有语义上重要的请求主体)。
在 HTTP 中,“没有一个方法具有我需要的语义”的答案是使用 POST。
HTTP QUERY - 您可以查看规范草案,并确定语义是否满足您的需求。如果确实如此,您必须决定是否要承担基于过期规范草案实施 API 的风险。