聊聊JSON Schema

簡介

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"
}

通常數字有最大值和最小值,咱們能夠加上maximumminimum後端

{
  "type": "number",
  "maximum": 10,
  "minimum": 1
}

須要一個默認值,加上default便可數組

值得注意的是 title, description, default是通用的

null

{
  "type": null
}

字符串

{
  "type": "string"
}

當字符串須要符合某種格式的時候,加上format服務器

{
  "type": "string",
  "format": "url"
}

或者使用pattern,裏面是正則表達式前後端分離

{
  "type": "string",
  "pattern": "\\d+"
}

長度經過maxLengthminLength來描述

布爾值

{
  "type": "boolean"
}

對象

對象描述算是比較複雜的,不過也比較明瞭,經過properties來描述每一個字段,每一個字段的描述也是一個JSON Schema,也就是能夠不斷的嵌套

下面描述一個對象,擁有屬性aabb,分別是數字和字符串

{
  "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/,一些小工具望你們喜歡。

相關文章
相關標籤/搜索