ASP.NET Core与RESTful API 开发实战
上QQ阅读APP看书,第一时间看更新

1.4 其他问题

1.4.1 JSON和XML

在RESTful API中,JSON和XML是最常用到的两种资源表述格式,它们都可以用来传递数据,且都具有简洁、自描述等特点。

JavaScript对象表示法(JavaScript Object Notation,JSON)是一种轻量级的数据交换格式。它采用完全独立于编程语言的文本格式来存储、表示数据,简洁和清晰的层次结构使它成为理想的数据交换格式,不仅易于人阅读和编写,也易于机器解析和生成。JSON的MIME类型为aplication/json。

JSON的语法非常简单,它的数据使用名称/值对来表示,名称/值对包括字段名称和它的值,中间用冒号隔开。其中字段名称应使用双引号表示,字段的值如果是字符串,也应使用双引号表示,如"firstName" : "John"。

JSON数据项的值的类型可以是下列类型。

数字(整数或浮点数)

字符串(在双引号中)

逻辑值(true或false)

数组(在方括号中)

对象(在花括号中)

null

JSON对象在大括号{}中书写,对象可以包含多个名称/值对。

{
  "id": "1234",
  "name": "Tom"
}

多个相同的数据项构成了JSON数组,该数组使用方括号[]表示。

{
  "users": [
    {
      "id": "1234",
      "name": "Tom"
    },
    {
      "id": "1235",
      "name": "Smith"
    }
  ]
}

XML是可扩展标记语言(eXtensible Markup Language),它与HTML语言很相似,包含标签、属性等元素,主要用于传输和存储数据。与HTML不同的是,XML具有非常严格的层次结构,且一个标签必须同时具有起始标签与结束标签,XML中允许创建自定义标签。

XML文档必须包含根元素,该元素是文档中其他元素的父元素。文档中的所有元素形成了一棵文档树,这棵树从根部开始,并扩展到树的最底端。

<?xml version="1.0" encoding="UTF-8"?>
<note>
  <to>Tove</to>
  <from>Jani</from>
  <heading>Reminder</heading>
  <body>Don't forget me this weekend!</body>
</note>

在XML中,每个标签除了必须有起始标签与结束标签外,标签与标签间还必须要正确嵌套,比如以下示例。

<root>
  <child>
    <subchild>.....</subchild>
  </child>
</root>

另外,标签名区分大小写,大小写不同的标签会被认为是不同的标签。标签允许包含一个或多个属性,每个属性的值必须使用引号。

<user id="1234">
    <name>Tom</name>
</user>

JSON与XML均有各自的特点。相比XML,JSON要更简洁,且更容易解析。JSON是面向数据的一种格式,因此可以很容易地转换为高级编程语言中的对象,JSON现在已经被广泛地使用在各种数据处理与交互场合下。然而JSON并不支持注释,且扩展性也不如XML。XML是面向文档的一种格式,它支持注释,允许创建自定义标签和属性。这些标签不仅清楚良好地描述了数据,而且还增加了文档的可扩展性,但同时这也增加了XML文档的大小。另外,在表示复杂的层次结构类型的数据时,XML要比JSON更适合。