利用R做Micro Service供iOS/Android移動式程式存取

何孟翰 Mark

  • 精誠資訊 恆逸教育訓練中心 資深講師
  • 技術分類:程式設計

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或者是物聯網的終端裝置來存取了。

相關學習資源