[心得] 為什麼要學 GraphQL?

看板Soft_Job (軟體人)作者 (小惡魔)時間5年前 (2020/06/20 14:37), 編輯推噓13(20747)
留言74則, 38人參與, 5年前最新討論串1/1
來聊個簡單的議題? 『為什麼要學 GraphQL?』 部落格好讀版: https://bit.ly/why-is-graphql 身為網站工程師,您不能不知道什麼是 GraphQL,這是一個前端跟後端溝通的 API Query 語法,大幅改善了前後端的合作模式,這篇會跟大家介紹為什麼麼要學 GraphQL, 以及整理出三大 GraphQL 優勢,讓大家了解跟傳統 Restful API 有什麼不同。當然不是 叫開發者捨棄 Restful API,而是根據專案的不同,來決定不同的技術 Stack。像是服務 跟服務之前您說要用 GraphQL,肯定被打槍,而是要用更輕量的 Restful API 或 GRPC。 好了,底下來說明三點 GraphQL 的優勢。 影片: https://www.youtube.com/watch?v=00NKSvAraLQ
01:36 一次連線拿回前端所需資料 04:07 根據不同畫面拿不同欄位資料 06:06 即時 API 文件 1. 一次連線拿回前端所需資料 GraphQL 可以直接將 Query 語法寫在一起送到後端,後端全部處理完成後再一次回給前 端,大幅降低 connection 次數。 2. 根據不同畫面拿不同欄位資料 在 Restful API 世界裡,後端會一次回傳所有資料,不會管前端需不需要這欄位,也就 是前端沒有權力決定該拿什麼欄位,這樣會造成很多不必要的網路傳輸。Restful API 也可以根據不同畫面回不同的欄位資訊,卻造成後端很大的負擔。這時候用 GraphQL 解 決了此問題,只要在 Query 語法內定義好要拿的資料即可。 3. 即時 API 文件 大家應該都知道文件沒有一天是即時更新的,寫 Restful API 要求後端也補上文件,簡 直是難上加難,專案在趕的時候,誰還在管文件有沒有到最新,這邊就要推薦 GraphQL 了,因為只要程式碼一動,開發者透過 Client 工具就可以即時知道現在的 API 文件。 -- Go 教學: https://www.udemy.com/course/golang-fight/?couponCode=202006 Drone 教學: https://www.udemy.com/course/devops-oneday/?couponCode=202006 Docker 教學: https://www.udemy.com/course/docker-practice/?couponCode=202006 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.25.183.202 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Soft_Job/M.1592635061.A.A78.html

06/20 14:59, 5年前 , 1F
廣告文又來了
06/20 14:59, 1F

06/20 15:01, 5年前 , 2F
除了第一點以外其他兩項REST也做得到
06/20 15:01, 2F

06/20 15:06, 5年前 , 3F
針對第一點詢問一下,這個成立的條件是在query的input相同
06/20 15:06, 3F

06/20 15:06, 5年前 , 4F
06/20 15:06, 4F

06/20 15:24, 5年前 , 5F
推推
06/20 15:24, 5F

06/20 15:41, 5年前 , 6F
同問第一題
06/20 15:41, 6F

06/20 15:59, 5年前 , 7F
怎麼沒說graphQL文件和規則像大便
06/20 15:59, 7F

06/20 16:26, 5年前 , 8F
當初因為玩Gatsby.JS,所以順道學了GrapghQL。
06/20 16:26, 8F

06/20 16:29, 5年前 , 9F
@lerdor 你可以把多個 query 語法寫在一起
06/20 16:29, 9F

06/20 16:29, 5年前 , 10F
blog 裡面有範例,可以參考看看,就大概知道了
06/20 16:29, 10F

06/20 16:30, 5年前 , 11F
@mystery7631 也不是沒遇過雷 XD
06/20 16:30, 11F

06/20 16:39, 5年前 , 12F
還是傳統md檔最好用
06/20 16:39, 12F

06/20 16:57, 5年前 , 13F
不覺得graph那麼神,黑名單白名單訂一訂就訂死你
06/20 16:57, 13F

06/20 18:00, 5年前 , 14F
沒辦法做conn pool?
06/20 18:00, 14F

06/20 18:05, 5年前 , 15F
小弟不才,REST API有辦法做conn pool 嗎?
06/20 18:05, 15F

06/20 18:08, 5年前 , 16F
06/20 18:08, 16F

06/20 18:35, 5年前 , 17F
這是宗教問題
06/20 18:35, 17F

06/20 19:55, 5年前 , 18F
Swagger配Rest不行嗎?
06/20 19:55, 18F

06/20 20:22, 5年前 , 19F
query語法送到後端啊...聽起來就很雷的感覺
06/20 20:22, 19F

06/20 20:23, 5年前 , 20F

06/20 20:24, 5年前 , 21F
沒用好就injection吃到飽
06/20 20:24, 21F

06/20 20:24, 5年前 , 22F
swagger跟graphql就相當於手動更新和自動更新
06/20 20:24, 22F

06/20 20:34, 5年前 , 23F
Size Limiting, Query Whitelisting, Depth Limiting
06/20 20:34, 23F

06/20 20:34, 5年前 , 24F
這些都是需要自己再額外控制,增加 GraphQL 安全性 ..
06/20 20:34, 24F

06/20 21:18, 5年前 , 25F
為何不直接寫後端
06/20 21:18, 25F

06/20 21:19, 5年前 , 26F
swagger可以隨code更新 難道你還手動維護 json or yml?
06/20 21:19, 26F

06/20 21:55, 5年前 , 27F
同意前面說的 實在很難做auth
06/20 21:55, 27F

06/20 22:02, 5年前 , 28F
你還是要用codegen做 而graphql可以直接查schema
06/20 22:02, 28F

06/20 22:05, 5年前 , 29F
真妙 推文都在守著RESTful 沒人想討論graph帶來的可能
06/20 22:05, 29F

06/20 22:10, 5年前 , 30F
請問swagger怎麼隨code更新
06/20 22:10, 30F

06/20 22:10, 5年前 , 31F
本文123點都不是graphql特有的優點 想推廣也不是用這些
06/20 22:10, 31F

06/20 22:22, 5年前 , 32F
官網特色就說得夠清楚了 https://graphql.org/
06/20 22:22, 32F

06/20 22:23, 5年前 , 33F
原 po 也沒有說錯啊 不知道大家在砲轟什麼
06/20 22:23, 33F

06/20 22:24, 5年前 , 34F
文人相輕的日常
06/20 22:24, 34F

06/20 22:25, 5年前 , 35F
graphql 真的讓串 api 的複用變得相當的簡單
06/20 22:25, 35F

06/20 22:25, 5年前 , 36F
推一個 有內容可以討論 不太明白在噓什麼
06/20 22:25, 36F

06/20 22:26, 5年前 , 37F
甚至在 react apollo 的幫助下 整個 component 裝下去
06/20 22:26, 37F

06/20 22:26, 5年前 , 38F
資料也會順便拉好
06/20 22:26, 38F

06/20 22:28, 5年前 , 39F
後端工程師懶得幫你做資料轉換 過濾 都可以讓你在 gql
06/20 22:28, 39F

06/20 22:28, 5年前 , 40F
上做好
06/20 22:28, 40F

06/20 22:30, 5年前 , 41F
甚至可以用 directive 讓這些邏輯應用在各個欄位上
06/20 22:30, 41F

06/20 22:54, 5年前 , 42F
像樓上幾位提的幾點還比較有推廣到
06/20 22:54, 42F

06/21 00:27, 5年前 , 43F
GraphQL 針對 query 來說,考量拿到什麼欄位,這倒是小
06/21 00:27, 43F

06/21 00:27, 5年前 , 44F
事,比較要注意的是欄位往下延伸時,有沒有使用 dataload
06/21 00:27, 44F

06/21 00:27, 5年前 , 45F
er 協助處理,否則db 查詢會搞爆 server
06/21 00:27, 45F

06/21 00:44, 5年前 , 46F
誰沒文件在開發,先討論好文件才開發吧
06/21 00:44, 46F

06/21 01:36, 5年前 , 47F
swagger表示 我被當塑膠
06/21 01:36, 47F

06/21 05:48, 5年前 , 48F
GraphQL就相當把後端結構完全洩漏給前端
06/21 05:48, 48F

06/21 06:48, 5年前 , 49F
https://reurl.cc/z8GOQk 還是要看實際應用和需求
06/21 06:48, 49F

06/21 07:24, 5年前 , 50F
graphql就是垃圾,就是個前端很爽,後端很幹的概念
06/21 07:24, 50F

06/21 10:02, 5年前 , 51F
後端為什麼很幹
06/21 10:02, 51F

06/21 11:48, 5年前 , 52F
我用Go+GraphQL+Apollo(TS),用了就回不去了
06/21 11:48, 52F

06/21 11:48, 5年前 , 53F
@knives 什麼是後端很幹的概念?
06/21 11:48, 53F

06/21 15:00, 5年前 , 54F
GraphQL和直接開SQL給前端有什麼本質上的差別?
06/21 15:00, 54F

06/21 15:00, 5年前 , 55F
完全失去封裝的意義.
06/21 15:00, 55F

06/21 15:29, 5年前 , 56F
我想詢問的是第一點下,若要組裝A跟B的query但是他們的inp
06/21 15:29, 56F

06/21 15:29, 5年前 , 57F
ut也分別是C跟D還可以成立嗎?
06/21 15:29, 57F

06/21 15:31, 5年前 , 58F
就後端多一層就好了
06/21 15:31, 58F

06/21 15:36, 5年前 , 59F
@lerdor 可以吧,所有的 Query 都由 Client 自行組裝
06/21 15:36, 59F

06/21 16:40, 5年前 , 60F
例如說電商的商品資料在 mobile view 可能只需要 a b c
06/21 16:40, 60F

06/21 16:40, 5年前 , 61F
欄位 在 desktop web 下可能會需要 b c d e f 欄位
06/21 16:40, 61F

06/21 16:41, 5年前 , 62F
graphql 就提供 quary language 讓開發者可以 specify
06/21 16:41, 62F

06/21 16:42, 5年前 , 63F
所需要的資料欄位 而不會有 over fetch 的問題
06/21 16:42, 63F

06/21 16:42, 5年前 , 64F
也不需要讓後端為各個不同的需求寫不同的 end point
06/21 16:42, 64F

06/21 16:45, 5年前 , 65F
的確 restful 可以利用帶參數來完成這種需求 但這就需
06/21 16:45, 65F

06/21 16:46, 5年前 , 66F
要工程師自己弄 也沒有 graqhql 的 query 來的容易
06/21 16:46, 66F

06/21 16:47, 5年前 , 67F
不懂為啥說GraphQL跟直接開SQL給前端一樣
06/21 16:47, 67F

06/21 18:35, 5年前 , 68F
不懂GQL 的優勢 還出來帶風向 推文水準差矣
06/21 18:35, 68F

06/21 20:48, 5年前 , 69F
最近有用 GraphQL 真心好用
06/21 20:48, 69F

06/21 21:48, 5年前 , 70F
GraphQL最大的特點就是單一的Endpoint跟Type system
06/21 21:48, 70F

06/22 00:00, 5年前 , 71F
同樣不懂哪裡跟直接開SQL給前端相同
06/22 00:00, 71F

06/23 00:43, 5年前 , 72F
推用心整理
06/23 00:43, 72F

06/23 15:36, 5年前 , 73F
大概是怕學新技術的老人看了很氣
06/23 15:36, 73F

06/24 22:20, 5年前 , 74F
推,等等消化一下xD
06/24 22:20, 74F
文章代碼(AID): #1UxQwrfu (Soft_Job)
文章代碼(AID): #1UxQwrfu (Soft_Job)