json-api响应中的链接是否应编码?

时间:2016-10-04 22:44:32

标签: rest hyperlink url-encoding json-api

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!"
    }
  ]
}

1 个答案:

答案 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。