Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Taller: Crear API's con código R usando plumber

Taller: Crear API's con código R usando plumber

Este fué un taller que dí durante la conferencia ConectaR 2019 en San José Costa Rica.

Para poder integrar nuestros resultados de análisis en la organización, tenemos que poder interoperar con sistemas y procesos existentes. Además ocurre regularmente que el equipo de TI dentro de la empresa no trabaja con R pero con otros lenguajes. En otros casos nuestro producto de datos tiene que interactuar con sistemas existentes que no se dejan cambiar tan fácilmente.

Una excelente solución para estas circunstancias es presentar el producto de datos como un REST API. Esto significa que cualquier otro sistema puede consumir los resultados del producto como, por ejemplo, datos en JSON en una dirección HTTP.

Estas direcciones HTTP se llaman endpoints, y pueden no solamente ofrecer resultados, pero también recibir datos, que después podemos procesar para devolver un resultado. Es muy común llevar a producción modelos de predicción de esta forma, que están escritas en R, pero accesible desde cualquier lenguaje o sistema a través de un API. El paquete plumber permite convertir código R a un REST API.

En este taller de 2 horas vamos a ver de forma muy práctica cómo traducir un modelo, desarrollado en R, a un API. Además hablaremos de como hacer documentar el API con Swagger, como hacer pruebas, y como verificar que el API tiene suficiente desempeño para los requisitos de la organización. Al final de este curso serás capaz de levantar tu propio servicio de datos como un API, y cómo usar mejores prácticas de documentación y testeo para entregarlo a tu organización.

Frans van Dunné

January 26, 2019
Tweet

More Decks by Frans van Dunné

Other Decks in Technology

Transcript

  1. Crear API's con código R usando plumber ConectaR 2019 26

    de Enero, 2019 Frans van Dunné @fransvandunne
  2. Tu

  3. Tu cliente Tu TI Proveedor R Servicio Web (API) mantiene

    R consume servicio consume servicio consume servicio
  4. Banco Procesos Atención Cliente Humano atendiendo cliente Ejemplos: - Una

    ventanilla (H-H) - Dashboard (M-H) - Informe dinamico (M-H) UI : Interfaces con usuarios
  5. SUGEF Banco Procesos Regulatorios SICVECA Sistema / Programa que prepara

    XML para SICVECA Por Ejemplo: - Web Service (SOAP, XML-RPC, REST) - Websockets - Librerias / Classes - Funciones OS API : Interfaces con Aplicaciones:
  6. Filosofia UNIX Haz una cosa, y hazla bien • Servicios

    pequeños con una sola función • Se crean en una cultura de automatización, testeo y despliegue continuo (CI) • Originan desde unidades independientes, abiertos a cooperación • La cultura y el diseño acepta fallos y errores
  7. RESTful API Una API REST es una interfaz de programación

    de aplicaciones que usa el protocolo de HTTP para recibir solicitudes y enviar respuestas.
  8. GET https://gee.bccr.fi.cr/indicadoreseconomico s/WebServices/wsIndicadoresEconomicos.asmx/ ObtenerIndicadoresEconomicos?tcIndicador=31 7&tcFechaInicio=27/09/2018&tcFechaFinal=27/ 09/2018&tcNombre=string&tnSubNiveles=N Documentación: WEBSERVICES DE INDICADORES

    ECONOMICOS Tipo de cambio de compra: código es 317, fecha de inicio 01/01/2005 y fecha final 01/01/2005, usuario es "IMPORTADOR AZUL [email protected]", Tipo de cambio compra no tiene subniveles y se define N. Para el tipo de cambio venta su código es 318
  9. Decoradores (o anotaciones) #* @get #* @post GET: Dame la

    respuesta que tienes pre-programada, en caso dado tomando en cuenta los parámetros después de ? POST: Toma los datos que envío en el cuerpo (body) de mi solicitud y procésalos para darme la respuesta resultante
  10. Ejemplo :: Hola Mundo #* @get / function() { respuesta

    <- "Hola Mundo" return(respuesta) } # Es importante que la última línea no contenga código .
  11. > guess_encoding("datos/PADRON_COMPLETO.txt") # A tibble: 1 x 2 encoding confidence

    <chr> <dbl> 1 ISO-8859-1 0.38 Leer caracteres correctamente guess_encoding("datos/PADRON_COMPLETO.txt")
  12. Optimizar carga # Usando read.csv() system.time( padron <- read.csv("datos/PADRON_COMPLETO.txt") )

    # Usando readr::read_csv() system.time( padron <- read_csv("datos/PADRON_COMPLETO.txt") ) # Usando feather::read_feather() system.time( padron <- read_feather("datos/padron.feather") ) user system elapsed 2.905 0.044 2.948 user system elapsed 0.514 0.013 0.529 user system elapsed 14.025 0.000 14.024
  13. ¿Qué vimos hoy? - La definición y uso de las

    API - Abrir código R a través de una API - Documentar nuestras API usando swagger