omdb - plumber r tutorial
¿Sugerencias necesarias para crear las API REST del servidor R a las que puedo llamar desde una aplicación externa? (2)
He visto muchos artículos sobre el consumo de datos en R de otros servicios de API RESTful, pero realmente me ha costado encontrar algún artículo sobre el reverso. Estoy interesado en que R sea el servidor, y no el cliente. Me gustaría que una aplicación Node.js llame a una API RESTful de un servidor R para poder aprovechar funciones analíticas específicas, como la previsión de estaciones múltiples. ¿Alguien tiene alguna idea?
Puede usar httpuv
para iniciar un servidor básico y luego manejar las solicitudes GET
/ POST
. Lo siguiente no es "REST" per se, pero debería proporcionar el marco básico:
library(httpuv)
library(RCurl)
library(httr)
app <- list(call=function(req) {
query <- req$QUERY_STRING
qs <- httr:::parse_query(gsub("^//?", "", query))
status <- 200L
headers <- list(''Content-Type'' = ''text/html'')
if (!is.character(query) || identical(query, "")) {
body <- "/r/n<html><body></body></html>"
} else {
body <- sprintf("/r/n<html><body>a=%s</body></html>", qs$a)
}
ret <- list(status=status,
headers=headers,
body=body)
return(ret)
})
message("Starting server...")
server <- startServer("127.0.0.1", 8000, app=app)
on.exit(stopServer(server))
while(TRUE) {
service()
Sys.sleep(0.001)
}
stopServer(server)
Tengo los paquetes httr
y RCurl
allí, ya que probablemente terminarás necesitando usar algunos bits de ambos para analizar / formatear / etc las solicitudes y respuestas.
node-rio proporciona una forma de comunicarse con rserve (un servidor TCP / IP que permite el uso de las funciones R) desde node.js.
Aquí hay un ejemplo de uso (de la documentación):
var rio = require(''rio'');
rio.evaluate("as.character(''Hello World'')");