json如今已經成爲比較通用靈活的數據交換格式,尤爲是在web方面,老是少不了它的身影,js原生就支持它。網頁中與服務器中和服務器交換信息也基本上式基於json的。前端
在如今的開發中,特別是在先後端分離的開發中,後端提供接口,前端經過接口拿取數據;git
那麼有一個問題來了,那就是該如何描述接口,可能有人說好辦,經過接口文檔,那麼,文檔如何維護呢,徹底手寫麼?在這個自動化的時代,這樣也太耗神費力了吧!固然不排除不少人是這麼幹的。github
另外,如何體現字段規則,如字段長度,字段是否必填等驗證規則,以及返回的字段有些什麼東西,我想在文檔裏面很差體現這些吧。即便在文檔中體現了,萬一有些改動呢,有些事就很差辦了。web
關於如何描述json數據,我想沒有什麼能比json schema更合適了的吧;已成一個規範專門維護,還有一系列的配套工具,前端的後端的都有,比較好的接口文檔工具Swagger就是基於它的。那麼囉嗦了那麼多,讓咱們來看看如何粗略的描述下json數據吧。正則表達式
JSON Schema
自己就是JSON
格式,本身描述本身,它們倆之間的關係能夠理解爲類與對象的關係,也能夠理解爲集合與元素的關係,或JSON Schema
描述JSON
數據的模式,怎麼樣好理解就怎麼理解
{ "type": "number" }
這樣就能夠把值描述成數字了
須要加個標題,咱們只要加上title
屬性就行了json
{ "type": "number", "title": "字段1" }
通常數字有最大值和最小值,咱們能夠加上maximum
和minimum
後端
{ "type": "number", "maximum": 10, "minimum": 1 }
須要一個默認值,加上default
便可數組
值得注意的是
title, description, default
是通用的
{ "type": null }
{ "type": "string" }
當字符串須要符合某種格式的時候,加上format
服務器
{ "type": "string", "format": "url" }
或者使用pattern
,裏面是正則表達式前後端分離
{ "type": "string", "pattern": "\\d+" }
長度經過maxLength
和minLength
來描述
{ "type": "boolean" }
對象描述算是比較複雜的,不過也比較明瞭,經過properties
來描述每一個字段,每一個字段的描述也是一個JSON Schema
,也就是能夠不斷的嵌套
下面描述一個對象,擁有屬性aa
和bb
,分別是數字和字符串
{ "type": "object", "properties": { "aa": { "type": "number" }, "bb": { "type": "string" } } }
當某些字段必填的時候,加上required
,是一個數組,裏面是必填的字段
{ "type": "object", "properties": { "aa": { "type": "number" }, "bb": { "type": "string" } }, "required": ["aa"] }
除上面給出的之外,還能定義屬性的個數;以及屬性是動態的時候,能夠定義屬性知足的規則;另外還能定義依賴,也就是當某個字段提供的時候,相應的字段也必須提供
{ "type": "array" }
maxItems,minItems
爲數字,定義數組有多長uniqueItems
爲布爾值,定義是否有重複值
定義數組每一項知足的格式,加上items
; 能夠爲對象,爲一個JSON Schema
或是一個對象數組,每一個位置都爲一個JSON Schema
,描述對應位置的數據格式
以上只是JSON Schema
的簡略描述,冰上一角,更多的東西能夠在官網找到,它的強大超乎你的想象,後續我還會介紹相應的工具,包括不只限於
JSON Schema
另外歡迎光臨我的小站,http://yuanxiaowa.github.io/,一些小工具望你們喜歡。