您可能已经看过很多与此标题相关的帖子。但是,我认为,我有一个不同的情况需要帮助。我试图通过几个线程来解决我的问题,但找不到任何具体的答案,我可以自信地去。
为了解释,我想发布一个RESTful API,它根据提供的输入细节执行典型的GET操作。此API本质上是幂等的,不会创建,更新或删除任何资源。所以,我理想的选择应该是在这种情况下使用HTTP GET方法。
但是,要使事情变得复杂,我的API将需要一个带有详细信息的大型JSON对象作为请求的一部分,以获取响应所需的信息。不建议将JSON字符串放在请求URI中。因此,我必须把它放在请求体本身。但是,HTTP GET不考虑请求正文内容。并且,我不想(或者不知道我是否应该)对此API使用HTTP POST或PUT,因为API是幂等的,并且不会创建/修改任何资源。
目前,我更倾向于为此目的使用HTTP OPTIONS,但我不确定这是否应该考虑RESTful标准化。
那么,你有什么建议?在这种情况下使用POST或OPTIONS是否可以接受?或者,我应该做点什么?
作为参考,下面是请求数据对象的虚拟样本。
{
"parametersList": {
"itemRange": {
"code": "11",
"start": 100683,
"end": 168003
},
"dateRange": {
"startDate": "2017-10-01",
"endDate": "2017-10-31"
},
"market": {....},
"startTimeRange": {...},
"endTimeRange": {....},
"serviceType": {....},
"segmentType": {....},
"daysOfWeek": {
"days": ["MON", "WED", "THU", "FRI", "SAT", "SUN"]
},
"itemNumber": 0
}
}
上面示例中的{...}
表示内部对象结构,可能因数据而异。
答案 0 :(得分:1)
在这种情况下,您应该使用POST。 通常,如果没有其他方法适用,则使用POST。 OPTIONS有另一个目的,不能在这里使用。
例如,POST也用于大型搜索查询,您可以在其中指定正文中的搜索词
使用POST而不是GET的另一个好例子是在请求中发送敏感数据时。
答案 1 :(得分:1)
进行POST,即使你设法通过GET(创建URI)完成它也不是最佳解决方案,因为可能存在GET请求URL变得太长的情况。
此外,我没有找到任何可行的消息来阻止使用POST进行有效查询的查询。
POST(带有一些其他安全措施)也用于身份验证,不会创建/修改任何资源。因此,将它用于你的问题并不是一个坏习惯。
答案 2 :(得分:0)
这是一个有趣的,因为你需要发送一个大的JSON对象。
获取资源的REST API端点应始终使用带有GET参数的GET端点。您是否有特定原因要尝试发送JSON对象而不是发送参数?
如果您坚持发送JSON对象,我找到了base64编码JSON对象的现有代码示例,然后将其添加到GET参数中。但请注意,如果您尝试发送大量JSON对象,则可能会出现URL长度问题。但它永远不应该这样。在restful API上的GET参数应该总是简单而简短。如果您发送的数据过多,那么REST API的设计就会出现问题,需要仔细考虑。