JSON-API响应中出现的链接中的查询参数是否应为百分比编码?
来自jsonapi.org的示例未编码,如:
{
"links": {
"self": "http://example.com/articles",
"next": "http://example.com/articles?page[offset]=2",
"last": "http://example.com/articles?page[offset]=10"
},
"data": [{
"type": "articles",
"id": "1",
"attributes": {
"title": "JSON API paints my bikeshed!"
}
]
}
但是,还有关于请求中编码参数的说明:
GET /articles?include=author&fields[articles]=title,body&fields[people]=name HTTP/1.1
Accept: application/vnd.api+json
注意:上面的示例URI仅显示未编码的[和]字符以便于阅读。实际上,根据RFC 3986中的要求,这些字符必须按百分比编码。
此说明是否仅适用于请求?或者响应也应该是百分比编码,如:
{
"links": {
"self": "http://example.com/articles",
"next": "http://example.com/articles?page%5Boffset%5D=2",
"last": "http://example.com/articles?page%5Boffset%5D=10"
},
"data": [{
"type": "articles",
"id": "1",
"attributes": {
"title": "JSON API paints my bikeshed!"
}
]
}
答案 0 :(得分:2)
是的,您问题中有关编码URI的说明仅适用于请求,而不适用于响应
在响应中返回json
字符串后,唯一需要转义的是双引号字符"
GET 请求(不是回复)是一个不同的蜡球。作为URL中的参数传递的GET请求中的任何内容都必须进行URL编码。因此,如果您有参数url=http://some.url.com
,则参数分配右侧的网址需要编码。
POST和PUT请求很棘手。根据标头中设置的内容类型,您可能需要进行编码。如果您的内容类型为application/json
,则不需要在json字符串中对任何内容进行url编码(不包括前面提到的"
)。
现在,如果您所声明的特定内容编码与您的发送内容不匹配(或者您没有明确添加一个内容并且默认为某些内容),就像您发送content-type: application/x-www-form-urlencoded
但是发送一个json字符串,API服务可能会或可能不会接受它,谁知道它将如何处理内部的内容,直到解码它的URL。