RESTful API:如何建模JSON表示?

时间:2010-04-29 13:47:48

标签: xml json api rest

我正在为预订应用程序设计RESTful API。您可以要求提供住宿清单。这就是我真的不知道如何设计JSON表示的地方。这是我的XML表示:

<?xml version="1.0" encoding="utf-8"?>
<accommodations>
    <accommodation>
        <name>...</name>
        <category>couch</category>
    </accommodation>
    <accommodation>
        <name>...</name>
        <category>room</category>
    </accommodation>
<accommodations>

我第一次尝试将其转换为JSON导致此输出(1):

{
    "0": {
        "name": "...",
        "category": "couch"
    },
    "1": {
        "name": "...",
        "category": "room"
    }
}

但是当我看到其他API如何做到这一点时,我发现了更像这样的东西(2):

[
    {
        "name": "...",
        "category": "couch" 
    },
    {
        "name": "...",
        "category": "room" 
    }
]

我知道版本1是一个对象,版本2是一个数组。

但在这种情况下哪一个更好?

3 个答案:

答案 0 :(得分:2)

您可以按如下方式对JSON建模:

{
  "accomodations" : [
    {
      "accomodation" : {
        "name": "...",
        "category": "couch",
        "uri": "http://example.org/accomodations/accomodation_1"
      }
    },
    {
      "accomodation": {
        "name": "...",
        "category": "room",
        "uri": "http://example.org/accomodations/accomodation_2"
      }
    }
  ]
}

你可以在GET http://example.org/accomodations上退回 然后可以通过POST http://example.org/accomodations创建一个新的住宿,其中包含以下内容:

{
  "accomodation": {
    "name": "...",
    "category": "room"
  }
}

答案 1 :(得分:0)

如果您打算使用密钥(1,2,...)作为通信中的标识符返回服务器,字典会更好,否则我会选择数组。那么唯一的id可能是条目中的一个字段。

答案 2 :(得分:0)

坚持第2名。

不要在XML版本之后为JSON输出建模。

每个主要的API都使用Arrays表示。大多数解析库都会返回类似List的实例,这样可以很容易地操作它们包含的所有对象。

1号是有效的JSON,但并不是绝大多数开发人员所期望的。