我正在为预订应用程序设计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是一个数组。
但在这种情况下哪一个更好?
答案 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,但并不是绝大多数开发人员所期望的。