tutorial - web api rest c#
Construyendo una API REST usando R (3)
Estoy pensando en construir una API RESTful utilizando el lenguaje de programación R , principalmente para exponer mi modelo de aprendizaje automático al usuario en un formato API. Sé que hay algunas opciones como exportar a PMML, PFA y usar otros idiomas para ocuparse de la parte de API. Sin embargo, quiero seguir con el mismo lenguaje de programación y me preguntaba si hay algo como Flask / Django / Springbook framework en R?
servr un vistazo a servr / shiny pero realmente no creo que RESTful sea para lo que están diseñados. ¿Hay alguna solución mejor dentro de R que sea más fácil de usar?
Añadiendo opencpu a esta lista de respuestas:
Echa un vistazo a OpenCPU por Jeroen Ooms.
Beneficios:
Simple y directo : cualquier paquete R instalado en el servidor de opencpu se puede llamar a través de http.
Solo enfócate en crear el paquete R y opencpu se encargará del resto.
Puede devolver una tabla relacional de resultados , una gráfica , un solo valor o incluso un puntero (también conocido como una clave de sesión temporal) a un objeto R [imagine un objeto / conjunto de datos enorme que puede procesar / manipular desde otra plataforma más limitada;)]
CI / CD con su paquete alojado en Github.
Si está utilizando la versión del servidor, opencpu es concurrente y asíncrono por diseño a través del aprovechamiento de Nginx para el almacenamiento en caché y el equilibrio de carga .
Use AppArmor para hacer cumplir la seguridad en Ubuntu. O si usa Fedora, puede configurar la autenticación de certificado público-privado, gracias al servidor Apache en el servidor. Gracias a rApache!
Los anteriores son demasiado complicados : también puede iniciar una sesión de usuario único en su máquina local utilizando
opencpu::ocpu_start_app()
y cumplir sus funciones (la desventaja es la seguridad)¿Necesita una interfaz de usuario ? Simplemente cree una UI con javascript, guárdela en la carpeta www del paquete R y el usuario puede abrirla en su navegador web y usar sus funciones.
Este post no hace justicia al opencpu. Realmente recomendaría que lea sus enlaces en la parte superior de OpenCPU
Tenga una solución de juego con https://cloud.opencpu.org/ocpu/test o https://www.opencpu.org/apps.html
Esto es para aquellos que quieren tener una comparación de desarrollo de API con R - fontanero, Rserve y rApache.
Básicamente, las solicitudes simultáneas son puestas en cola por httpuv en el fontanero para que no sea ejecutante por sí misma. El autor recomienda múltiples contenedores docker, pero puede ser complicado y exigir respuestas.
Hay otras tecnologías, por ejemplo, Rserve y rApache. Rserve forks prosesses y es posible configurar rApache para pre-fork para manejar solicitudes concurrentes.
Vea las siguientes publicaciones para comparación
https://www.linkedin.com/pulse/api-development-r-part-i-jaehyeon-kim/ https://www.linkedin.com/pulse/api-development-r-part-ii-jaehyeon-kim/
Tengo dos opciones para ti:
plumber
plumber le permite crear una API REST decorando su código fuente R existente con comentarios especiales.
Un pequeño archivo de ejemplo:
# myfile.R
#* @get /mean
normalMean <- function(samples=10){
data <- rnorm(samples)
mean(data)
}
#* @post /sum
addTwo <- function(a, b){
as.numeric(a) + as.numeric(b)
}
Desde la línea de comando R:
> library(plumber)
> r <- plumb("myfile.R") # Where ''myfile.R'' is the location of the file shown above
> r$run(port=8000)
Con esto obtendrías resultados como este:
$ curl "http://localhost:8000/mean"
[-0.254]
$ curl "http://localhost:8000/mean?samples=10000"
[-0.0038]
Jug
Jug es un pequeño marco de desarrollo web para R que se basa en gran medida en el paquete httpuv. Su objetivo principal es hacer que la creación de API para su código sea lo más fácil posible. No se supone que sea un entorno web especialmente estable ni muy estable. Otras herramientas (e idiomas) podrían ser más adecuadas para eso. Su principal objetivo es permitirle fácilmente crear API para su código R. Sin embargo, la flexibilidad de Jug significa que, en teoría, podrías construir un marco web extenso con él.
Es muy fácil de aprender y tiene una bonita viñeta .
Un ejemplo de Hello-World:
library(jug)
jug() %>%
get("/", function(req, res, err){
"Hello World!"
}) %>%
simple_error_handler_json() %>%
serve_it()