使用JSON作为HTTP GET输入参数是否有效的RESTful服务?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用JSON作为HTTP GET输入参数是否有效的RESTful服务?相关的知识,希望对你有一定的参考价值。
我有以下Backend API:
Endpoint
HTTP GET
https://localhost:8443/getSomeParameterInfo
Query Parameter
?inputAsJson
例
{
'url': 'http://semanticstuff.org/blah#Parameter,
'parameters_1': 'value1',
'someArray': [
'http://semanticstuff.org/blah#something1,
'http://semanticstuff.org/blah#something2
],
'someOtherArray': [
'http://....'
]
}
最终的HTTP GET调用是
https://localhost:8443/getSomeParameterInfo?inputAsJson= {aboveMentioned JSON}
由于后端的需求不断变化,上面提到的JSON结构通过添加新的键:值对而不断增加。 (此JSON结构也是对数据库的查询)
Hinderances
由于使用weblinks作为值,因此有必要使用encodeURIComponent
函数来成功进行REST调用。这意味着,需要对引号,正斜杠等进行编码以获得回复。当需要在独立的基础上进行测试时(使用Postman或其他REST客户端),这变得相当繁琐
我没有看到如上所述传递给API的JSON结构,因此我希望确认在进行这样的RESTful调用时使用大量参数的最佳实践和/或正确方法
我通常倾向于认为通过POST
获取某些东西是一种“坏”的做法。
然而,听起来像GET
中的身体不是禁止的东西,但仍然没有在框架中广泛实施。
在您的情况下,它将取决于您拥有多少属性和全局长度或您的json。
如果你继续使用GET
方法,那么使用你的JSON的“爆炸”键值表示应该是要走的路。
例:
{ "myKey": "myValue", "childObjKey": {"childObjProp": "childValue}}
可能成为
?myKey=myValue&childObjKey.childObjProp=childValue
但是查询参数的长度有一些限制,可以在客户端和/或服务器中实现。如果您的参数数量很大且值的长度不可预测(例如文本没有长度限制),那么使用POST
应该是可行的方法。
以上是关于使用JSON作为HTTP GET输入参数是否有效的RESTful服务?的主要内容,如果未能解决你的问题,请参考以下文章