MicroService是一種近年來愈來愈受歡迎的架構,藉著開發一個一個小的服務,彼此可以獨立存在獨立開發,再使用http來串連,而依然保留著功能與彈性,而可以達成迅速開發、迅速組態、迅速維護的特性。
而近來不管是Micro Service之間,或者是Microservice到手機,物聯網的終端裝置,較流行的傳輸方式是使用REST的Web Services設計方式,藉著將API定義在URI中,可以讓人便於使用,理解,目前不管像是Google, Google FireBase, Twitter, Facebook等等的大型服務,小到像是NAS的介面都提供了Rest的API。
R是一套Open Source的統計分析軟體,可以做出非常複雜統計/數學運算,雖然可以透過shiny等介面提供Web的Front end,但是如果能夠將R也變成一個微服務,將能夠整合到目前主流微服務的架構之中。
要能夠達成如上的結構,首先要在R的套件上安裝Plumber, 由於Plumber已經在CRAN上 ,所以可以安裝:
install.packages("plumber")
再來可以封裝一個函數如下,它的輸入是兩個變數a和b,在此處我們做一個簡單的計算,將兩個變數轉型成數字再加起來,注意在上面我們使用了@get/add,這代表要呼叫該函數可以呼叫/add的endpoint並且傳入兩個變數:
# script.R # 產生一個endpoint為add的Web服務 #* @get /add addTwo <- function(a, b) { as.numeric(a) + as.numeric(b) }
另外在主要的script中增加plumber的呼叫:
library(plumber) # 載入Web服務 r <- plumb("script.r") # 設定port r$run(port=8888)
如此呼叫便可以看到結果以JSON的方式呈現,以網頁來說如下:
// 20170409160124 // http://localhost:8888/add?a=5&b=4 [ 9 ]
當然就可以讓Android/iOS或者是物聯網的終端裝置來存取了。