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更适合。