本文原創:yinyue前端
GraphQL 是一種面向數據的 API 查詢語言(規範),是一種協議而非存儲。GraphQL對你的API中的數據提供了一套易於理解的完整描述,使得客戶端可以準確地得到它須要的數據,並且沒有任何冗餘。java
GraphQL由Facebook發起,其手機客戶端自2012年起,就全面採用了GraphQL查詢語言, 2015年, Facebook全面開源了第一份GraphQL規範。到目前爲止,在Twitter,Github,Pinterest,Shopify等大型網站也獲得了普遍的實踐。語言也從最初的js,擴展到java ,python,Go。python
其實GraphQL所須要學習的語法不多,大部分語法與咱們平時的語法一致,能夠經過官網詳細瞭解 graphql.cn。 能夠本身實現增刪改查等操做。 須要特別注意的是,GraphQL是一門強類型語言,咱們須要定義每個屬性的類型。以下圖所示:api
下面是一個簡單的類型定義,先是定義了一個枚舉,而後咱們定義了一個類型,類型中有四個屬性:id、 name、 friends、 appearsIn,其中id和name是標量類型,而friends是一個Person類型。緩存
enum Episode {
NEWHOPE
EMPIRE
JEDI
}
type Person{
id: ID!
name: String!
friends: [Person]
appearsIn: [Episode]!
} 複製代碼
Schema能夠說是GraphQL最具核心的部分,其描述了整個接口向外暴露的形式。安全
像Restful API,咱們會定義一個查詢全部人的接口url定義爲: /api/v1/user/getUsers服務器
查詢人具體信息的接口url爲: /api/v1/user/getUserByIdmarkdown
新增一我的員的接口url定義爲: /api/v1/user/createUser網絡
這樣前端人員調用起來會很直觀。app
可是graphql是徹底不同的使用方式,其向前端暴露的url就一個像/api/graphql之類的,那這麼多接口怎麼區分呢? 咱們來看看:
奧妙就是上面這張圖,一個graphql接口都有一個Schema定義。
其定義三種操做方式:query(查詢),mutation(變動)和subscription(監聽)。
再往下延伸,一個查詢中包含多個field,也就是多種不一樣的查詢,好比query user查詢人,query message查詢消息,query weather查詢天氣。
經過這些就實現了Restful API使用多個url來達到不一樣操做的效果。