代码之家  ›  专栏  ›  技术社区  ›  janpio WillBroadbent

restful api:如何建模json表示?

  •  3
  • janpio WillBroadbent  · 技术社区  · 15 年前

    我正在为预订应用程序设计一个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 回复  |  直到 13 年前
        1
  •  2
  •   dafmetal    15 年前

    您可以对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"
      }
    }
    
        2
  •  0
  •   extraneon    15 年前

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

        3
  •  0
  •   Localist    13 年前

    坚持2号。

    不要在xml版本之后建模json输出。

    每个主要的api都使用数组表示。大多数解析库都会返回类似列表的实例,这些实例使操作它们包含的所有对象变得非常容易。

    数字1是有效的json,但这不是绝大多数开发人员所期望的。