無服務(wù)端編程服務(wù)推薦(前端必備)
No Server Code Application(無服務(wù)端編程服務(wù)推薦)
寫的文章太偏總是沒人看,對(duì)大家其實(shí)幫助也不大,所以寫點(diǎn)實(shí)用的吧,我相信此文介紹的服務(wù)是很多前端開發(fā)的痛點(diǎn),應(yīng)該也有不少人想象過這樣的服務(wù),但是可能因?yàn)榉椒ɑ蛘咂渌?,沒有找到適合的服務(wù),今天我就介紹兩個(gè)比較成熟的,甚至可以在生產(chǎn)環(huán)境使用的無服務(wù)端編程服務(wù)。
問題
一句話總結(jié),就是
有沒有一個(gè)方案,可以簡(jiǎn)單的部署,然后不需要做任何的服務(wù)端開發(fā),即可由前端開發(fā)從 JS 端直接向數(shù)據(jù)庫做較為復(fù)雜的增刪改查?
其實(shí)之前我在知乎上看到過這個(gè)問題,很多人其實(shí)會(huì)覺得這個(gè)是異想天開,這個(gè)問題背后有很多問題,例如:如何做復(fù)雜的查詢(聯(lián)合、分組等)?如何實(shí)現(xiàn)業(yè)務(wù)邏輯?如何分發(fā)事件給其他系統(tǒng)?如何保障安全(注入、權(quán)限等)?
不過,想過這個(gè)問題的前端不止你一個(gè),其實(shí)不止是前端,服務(wù)端同學(xué)也非常痛恨增刪改查,從很早,服務(wù)端框架中就內(nèi)置各種 crud 腳手架,不過腳手架還是腳手架,還沒有達(dá)到完全的”無代碼“,對(duì)前端同學(xué)來說總是有成本的。
今天,我們就推薦兩個(gè)服務(wù),請(qǐng)各取所需。
傳統(tǒng)的無服務(wù)代碼
首先介紹一個(gè)思路比較傳統(tǒng)的小服務(wù),可能不能很好的使用于生產(chǎn)環(huán)境,支持的功能也有限,但是對(duì)于想快速開發(fā)一個(gè)demo,且沒有元數(shù)據(jù)管理等訴求的同學(xué),也不失是一個(gè)簡(jiǎn)單粗暴的解決方案,你只要給他喂一個(gè)數(shù)據(jù)庫,他就可以暴露出各種 api 來。
不過這個(gè)小服務(wù)也有一些問題: 1. 安全方面,不是很能保障。 2. 查詢條件的構(gòu)建,有些麻煩,不如下一個(gè)方案方便。 3. 查詢有一些隱含的限制,例如查詢條數(shù)限制在1W以內(nèi),而且不可配置。 4. 分組匯總等能力有限,無法疊加其他字段計(jì)算。
講一下優(yōu)勢(shì):
- 這個(gè)庫大概有4300個(gè)star,相對(duì)來說還是比較熱門的。
- 使用 nodejs 開發(fā),安裝非常簡(jiǎn)單,沒有特別的依賴,這個(gè)算是一個(gè)優(yōu)勢(shì)。
- 支持單體、列表等查詢,支持分組、關(guān)聯(lián)表等。
- 支持直接輸出某些圖表需要的數(shù)據(jù)結(jié)構(gòu),并且可以自動(dòng)生成x軸的分組等。
具體的功能大家可以去github直接查看,安裝和配置也非常簡(jiǎn)單,基本不需要任何服務(wù)端和服務(wù)器運(yùn)維經(jīng)驗(yàn)。
Hasura,Instant GraphQL for all your data
這是第二個(gè)服務(wù)的標(biāo)語,這是我在調(diào)研 GraphQL 相關(guān)生態(tài)后,我認(rèn)為對(duì) data to graphql 封裝最徹底的服務(wù),完全實(shí)現(xiàn)了三無:
- 無代碼元數(shù)據(jù)管理
- 無代碼增刪改查
- 無代碼邏輯串聯(lián)
- 無代碼事件分發(fā)
同時(shí),他有些特別的優(yōu)勢(shì):
- 使用 graphql,社區(qū)流行的標(biāo)準(zhǔn)前端查詢語法
- 支持各種數(shù)據(jù)源、支持地理查詢等各種查詢姿勢(shì)
- 非常強(qiáng)大的可視化查詢構(gòu)建器,前端查詢代碼基本也不需要手寫
簡(jiǎn)單介紹一下
查詢構(gòu)建器
這是我最看重的功能,雖然 graphql 官方就是有查詢構(gòu)建器的,但是其實(shí)沒這么強(qiáng)大,hasura 是做了很多代碼層面的封裝,才實(shí)現(xiàn)了諸多類型的查詢組合,直接上圖:
這里是一張表,里面有地理信息,整個(gè)查詢,通過左側(cè)點(diǎn)一點(diǎn),就可以構(gòu)建出各種查詢(以及刪除、增加、更新等操作語法),我其實(shí)深深理解構(gòu)建通用查詢接口的參數(shù)有多么痛苦,所以這個(gè) Query Builder 對(duì)我來說是莫大的福音。
Hasura 是個(gè)比較龐大的服務(wù),他的部署是通過 docker 來部署的,所以需要你的服務(wù)器或者電腦,有 docker 和 docker-compose 的環(huán)境,然后部署就變的特別簡(jiǎn)單了,一個(gè)命令即可搞定。
安裝后,啟動(dòng)服務(wù),即可利用你配置的數(shù)據(jù)庫信息自動(dòng)生成所有表的 scheme 信息,及相應(yīng)的增刪改查方法,然后使用 query builder 構(gòu)建你的請(qǐng)求即可,無需做任何代碼的開發(fā)。
另外 hasura 支持一些圍繞元數(shù)據(jù)的其他功能,例如多表組合(通過數(shù)據(jù)庫的view實(shí)現(xiàn)),例如 Actions,用來編排和串聯(lián)多個(gè)服務(wù)、內(nèi)外服務(wù)、數(shù)據(jù)接口的,還有 Events,用來做數(shù)據(jù)的變更通知等。另外,hasura 也支持一些代碼層面的使用方式,擁有一些腳手架命令可以自動(dòng)生成 scheme 等,也可以自己寫代碼去使用 engine 和 scheme 等。
目前 hasura 的所有功能都支持 postgres 數(shù)據(jù)庫,另外也有支持 mysql 的 beta 版,mysql版沒有很多高級(jí)功能,但是基本的 query builder 和增刪改查是完整的。
官方文檔: Hasura GraphQL Engine Documentation | Hasura GraphQL Docs
Github 項(xiàng)目: https:// github.com/hasura/graph ql-engine/
mysql 版: MySQL preview | Hasura GraphQL Docs