專案學習Graphql(一)
GraphQL初識
本章節部分資料來源於:https://graphql.com
GraphQL最早是由FaceBook公司所推出的新一代資料介面標準。在2012年開始開發,最初的版本釋出在2015年,2018年7月從FaceBook脫離出來,成為一個獨立的、開源的專案。
為什麼要是用GraphQL
其實任何軟體的核心都是對資料的儲存、查詢、處理和展示。如果把基於web的軟體專案分為前、後臺的話,後臺主要的任務是儲存、處理,前臺的主要任務則為查詢和展示資料。但是往往後臺所儲存的資料結構和前臺所需要的資料結構有一定的差距,例如後臺大部分資料庫仍然採用關係型結構(當然也有NoSQL的諸如MongoDB,圖形資料庫Neo4J等,但主流仍然是採用關係型資料庫如MySQL,Oracle等,畢竟這些產品在穩定性和效率上有多年積累下來的口碑),而web端則需要圖形、樹形的資料結構。這樣則需要在前、後臺之間開發資料介面API。
在GraphQL之前,主要是採用RESTful這種介面規範。其核心思路是通過強化URI內容,向後臺傳遞所要查詢的關鍵引數諸如表格、欄位、欄位值等等。而後臺接收到這些引數之後則根據URI的不同內容,設計出不同的Router和相對應的業務處理邏輯,獲得相應的處理結果後,再以統一、規範的資料格式(諸如JSON格式)返回給前端使用。(關於RESTful介面規範,可參閱:http://www.ruanyifeng.com/blog/2014/05/restful_api.html,https://restfulapi.net/)
但是隨著前端所需要展現的資料越來越複雜,而RESTful中的URI能傳遞的引數資訊比較有限,這就會出現前端所要求資料和後臺提供的資料不匹配的情況。如前臺通過Restful規範的URI傳遞一個id引數,那後臺很有可能把與這個id相關的所有資料都傳遞給前端,而由前端自行篩選哪些資料是需要的資料,這樣就會帶來大量的資料冗餘問題。對於大型網站的話,很有可能會帶來資料庫伺服器負載增加、速度變慢等問題,為此GraphQL應運而生。
GraphQL特點
GraphQL本質上來說是一個資料查詢的API。它並不需要繫結任何的特定資料庫或者儲存引擎。你只要定義好一個GraphQL的API,則不需要關注後臺具體採用何種資料庫或這儲存引擎。
我們來看一個例子:
{
hero {
name
# Queries can have comments!
friends {
name
}
}
}
這是一個GraphQL的query語句的例子,當它傳送GraphQL伺服器上執行的時候,會返回下面的一個結果:
{
"data": {
"hero": {
"name": "R2-D2",
"friends": [
{
"name": "Luke Skywalker"
},
{
"name": "Han Solo"
},
{
"name": "Leia Organa"
}
]
}
}
}
由此可見,GraphQL查詢結果結構即為查詢語句的定義的結構,即所謂的“ask exactly what you want.”
相關文章
- Graphql學習(一)-GraphQL介紹
- 2019 GraphQL學習指南
- Halo 開源專案學習(一):專案啟動
- GraphQL學習:Github GraphQL API v4初探GithubAPI
- 結合 Laravel 初步學習 GraphQLLaravel
- webpack學習(一)專案中安裝webpackWeb
- GraphQL搭配MongoDB入門專案實戰MongoDB
- Laravel 學習筆記一: 專案框架和配置檔案Laravel筆記框架
- GraphQL 漸進學習 05-graphql-resolvers-union-聯合的使用
- 實戰GraphQL+express+mysql專案完整demoExpressMySql
- 利用SkyWalking UI的api介面學習GraphQLUIAPI
- 【專案學習】Pendle 專案的簡單調研
- 開源一個機器學習文字分析專案機器學習
- Python爬蟲入門學習實戰專案(一)Python爬蟲
- 機器學習專案---預測心臟病(一)機器學習
- GraphQL 漸進學習 09-graphql-apollo-client-vue-客戶端開發clientVue客戶端
- 實戰 | 如何上線一個機器學習專案?機器學習
- 學習 Go 以來的第一個小專案 toNovelGo
- [譯] 關於使用 GRAPHQL 構建專案的回顧
- libigl專案102學習筆記筆記
- 前端學習(2373):專案介紹前端
- 收集的go基礎學習,專案實戰,go-awesome的一些專案Go
- 機器學習入門系列(2)--如何構建一個完整的機器學習專案(一)機器學習
- 一個優秀的Android開源框架學習專案ForgetSkyWanAndroidAndroid框架NaN
- 如何高效的學習開源專案?
- Gradle學習系列----多專案構建Gradle
- 做機器學習專案的checklist機器學習
- 學習筆記專案實踐(python)筆記Python
- 如何高效地學習開源專案
- Gradle學習系列—-多專案構建Gradle
- [譯] 機器學習專案清單機器學習
- 【Java學習】聊天室專案(32)Java
- 專案管理指南學習筆記-專案執行環境(1)專案管理筆記
- RN學習(四)——RN專案整合到現有iOS專案中iOS
- 一個完整的機器學習專案在Python中的演練(一)機器學習Python
- 一個值很得學習的專案—可用於畢業答辯
- 一個完整的機器學習專案在Python中演練(四)機器學習Python
- 一個完整的機器學習專案在Python中演練(三)機器學習Python