Skip to content

R Plumber - API Service

Plumber 是一個可以用於架設 API 服務的 R package,並能根據註解內容產生 Swagger Spec,不過目前還沒有支援 requestBody 的 Swagger Spec 生成。

範例如下,主要分為定義 API 的 api.R 與執行服務的 run.R

# api.R

#* Echo back the input
#* @param msg The message to echo
#* @get /echo
function(msg=""){
  list(msg = paste0("The message is: '", msg, "'"))
}

#* Return the sum of two numbers
#* @param a The first number to add
#* @param b The second number to add
#* @post /sum
function(a, b){
  as.numeric(a) + as.numeric(b)
}
# run.R
library(plumber)
r <- plumb("api.R")  # Where 'plumber.R' is the location of the file shown above
r$run(port=8000)

Plumber 提供了多種 Hosting 的範例,其中也包括了 Docker,並提供了可以使用的 Image trestletech/plumber

在 Plumber 的 Dockerfile 可以發現他們是使用 install2.r 這個 Script 安裝 package。與 python 不同 R 並沒有像是 pip 這種 package manager,因此要在建置 Image 時安裝 package 並沒有一個比較通用的方法。littlerinstall2.r 提供了比較偏向 CLI 的方式安裝 R 的 Package,並支援了多種功能,如平行安裝加快安裝速度等。

install2.r 使用範例:

install2.r -l /tmp/lib Rcpp BH                    # install into given library
install2.r -- --with-keep.source drat             # keep the source
install2.r -- --data-compress=bzip2 stringdist    # prefer bz2 compression
install2.r \".\"                                  # install package in current directory
install2.r -n 6 ggplot2                           # parallel install: (6 processes)

Reference:

  1. What is the current state of R package mangers in 2019?

Comments