使用JSON作为HTTP GET输入参数是否有效的RESTful服务?

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

我有以下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调用时使用大量参数的最佳实践和/或正确方法

rest http get
1个回答
1
投票

我通常倾向于认为通过POST获取某些东西是一种“坏”的做法。

然而,听起来像GET中的身体不是禁止的东西,但仍然没有在框架中广泛实施。

在您的情况下,它将取决于您拥有多少属性和全局长度或您的json。

如果你继续使用GET方法,那么使用你的JSON的“爆炸”键值表示应该是要走的路。

例: { "myKey": "myValue", "childObjKey": {"childObjProp": "childValue}} 可能成为 ?myKey=myValue&childObjKey.childObjProp=childValue

但是查询参数的长度有一些限制,可以在客户端和/或服务器中实现。如果您的参数数量很大且值的长度不可预测(例如文本没有长度限制),那么使用POST应该是可行的方法。

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