專案學習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介紹
- GraphQL學習:Github GraphQL API v4初探GithubAPI
- Halo 開源專案學習(一):專案啟動
- 結合 Laravel 初步學習 GraphQLLaravel
- 2019 GraphQL學習指南
- webpack學習(一)專案中安裝webpackWeb
- 一個用於學習的react專案React
- GraphQL搭配MongoDB入門專案實戰MongoDB
- GraphQL 漸進學習 05-graphql-resolvers-union-聯合的使用
- Laravel 學習筆記一: 專案框架和配置檔案Laravel筆記框架
- vue專案學習05Vue
- 專案學習經驗
- 實戰GraphQL+express+mysql專案完整demoExpressMySql
- GraphQL 漸進學習 09-graphql-apollo-client-vue-客戶端開發clientVue客戶端
- Qt學習- (掃雷專案初學)QT
- 利用SkyWalking UI的api介面學習GraphQLUIAPI
- Python爬蟲入門學習實戰專案(一)Python爬蟲
- 學習 Go 以來的第一個小專案 toNovelGo
- 學習不一樣的vue實戰(2): 專案分析Vue
- Docker的學習(三)----使用Dockerfile部署一個Flask專案DockerFlask
- 學習開源 java 專案 gunsJava
- 開源專案學習方法ABC
- 【轉】UCM專案管理配置學習專案管理
- [譯] 關於使用 GRAPHQL 構建專案的回顧
- 收集的go基礎學習,專案實戰,go-awesome的一些專案Go
- 專案管理學習筆記五:專案整體管理薦專案管理筆記
- SpringBoot學習——用Gradle搭建第一個專案Spring BootGradle
- 如何高效地學習開源專案
- 【Java學習】聊天室專案(32)Java
- 如何高效的學習開源專案?
- python大型專案 個人學習中心Python
- c# tcbs專案學習體悟C#
- RN學習(四)——RN專案整合到現有iOS專案中iOS
- 專案管理指南學習筆記-專案執行環境(1)專案管理筆記
- 一個值很得學習的專案—可用於畢業答辯
- 推薦一些值得學習的開源專案和框架框架
- 新浪微博實習體會——應用專案vs心理學研究專案
- 學習 第3章:專項練習之一