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