Slide 1

Slide 1 text

API first: the Ruby (and rails) way

Slide 2

Slide 2 text

Fernando Perales

Slide 3

Slide 3 text

Slide 4

Slide 4 text

Ingeniero de Software MagmaLabs

Slide 5

Slide 5 text

Ingeniero de Software MagmaLabs ¡Hey! Estamos contratando careers.magmalabs.io

Slide 6

Slide 6 text

 Promotor del FLOSS  Apasionado del desarrollo web Conferencista en formación Estudiante de Bajo Eléctrico Fan: Heavy metal, cerveza, Twitter, Gregory Sallust, Ruby

Slide 7

Slide 7 text

Slide 8

Slide 8 text

No content

Slide 9

Slide 9 text

3er jueves de cada mes

Slide 10

Slide 10 text

rubygdl.org

Slide 11

Slide 11 text

API

Slide 12

Slide 12 text

Una API expresa los componentes de un software en términos de sus operaciones, entradas, salidas y sus tipos, definiendo las funcionalidades de manera independiente a sus implementaciones, lo que permite que las definiciones y su implementación sin comprometer su interfaz. Una buena API hace fácil crear un programa al proveer todos los componentes, los cuales son unidos por el programador.

Slide 13

Slide 13 text

Web API

Slide 14

Slide 14 text

Una API web del lado del servidor es una interfaz programática que consiste en uno o mas endpoints públicamente expuestos en un sistema de request-response ya definido, típicamente expresado en JSON o XML, que es expuesto via web comúnmente vía HTTP.

Slide 15

Slide 15 text

By Lubaochuan - Own work, CC BY-SA 4.0, https://commons.wikimedia.org/w/index.php?curid=34946978

Slide 16

Slide 16 text

¿Por qué hacer una web API?

Slide 17

Slide 17 text

http://www.apiacademy.co/sites/default/files/Web-APIs-v5_0.png

Slide 18

Slide 18 text

Herramientas populares

Slide 19

Slide 19 text

Node con ExpressJS Go con Martini Clojure con Compojure ... PHP con Laravel

Slide 20

Slide 20 text

o

Slide 21

Slide 21 text

Ruby con: Sinatra Grape Padrino Rails

Slide 22

Slide 22 text

Ruby con: Sinatra Grape Padrino Rails

Slide 23

Slide 23 text

¿No es Rails demasiado para hacer una simple API?

Slide 24

Slide 24 text

R: Si y no

Slide 25

Slide 25 text

Para APIs muy sencillas, esto puede ser cierto, sin embargo, incluso en las aplicaciones muy cargadas del lado de HTML, la mayoría de la lógica de la aplicación reside fuera de las vistas.

Slide 26

Slide 26 text

Rails 5 nos proveerá la opción de crear aplicaciones de Rails especificas para la creación de APIs con Rails::API

Slide 27

Slide 27 text

gem install rails –pre … rails -v => Rails 5.0.0.beta3 gem install rails –pre … rails -v => Rails 5.0.0.beta3

Slide 28

Slide 28 text

rails new app --api

Slide 29

Slide 29 text

¿Por qué elegir Ruby (and rails) para hacer nuestra web API?

Slide 30

Slide 30 text

La razón por la que muchos desarrolladores usan Rails es que provee varias opciones por default que nos permiten comenzar a trabajar rápidamente sin tener que tomar algunas decisiones triviales.

Slide 31

Slide 31 text

Algunas de las funcionalidades que vienen en Rails por defecto siguen aplicando a Rails::API.

Slide 32

Slide 32 text

A nivel de middleware

Slide 33

Slide 33 text

Reloading: Las aplicaciones Rails soportan recarga de manera transparente. Esto funciona incluso si tu aplicación crece y reiniciar el server para cada request se vuelve no viable.

Slide 34

Slide 34 text

Multiples entornos: Rails viene con soporte para varios entornos como lo son development, test y production. Estos entornos vienen con configuraciones por defecto que aceleran el desarrollo del producto sin comprometer el desempeño en producción

Slide 35

Slide 35 text

Logging: Rails registra todas las peticiones con el apropiado nivel de verbosidad según el entorno actual. Los logs en development incluyen información sobre la petición, entorno, consultas a la base de datos e información básica de rendimiento.

Slide 36

Slide 36 text

Seguridad: Rails detecta y previene ataques de IP spoofing y maneja firmas criptográficas

Slide 37

Slide 37 text

Parseo de parametros: ¿Quieres especificar los parametros como JSON en ver del formato URL-encoded? Sin problema. Rails decodificara el objeto JSON y lo hara disponible en los parametros. ¿Quieres usar anidamiento en URL-encoded? Tambien funcionara.

Slide 38

Slide 38 text

GETs condicionales: Rails maneja GETs condicionales (ETag y Last-Modified), procesando los encabezados de una peticion y regresando la respuesta indicada junto con el codigo de estatus

Slide 39

Slide 39 text

Cacheo: Si usas dirty? Con control publica de cache, Rails automaticamente “cacheara” tus respuestas. Tambien puedes configurar facilmente el cache store.

Slide 40

Slide 40 text

Peticiones HEAD: Rails convertira de manera transparente los request de tipo HEAD a GET y regresara solo los encabezados. Esto hace que HEAD funcione de manera confiable en todas las APIs creadas con Rails.

Slide 41

Slide 41 text

A nivel de ActionPack

Slide 42

Slide 42 text

Rutas RESTful: Si estas construyendo una API RESTful con JSON, tal vez quieras usar el sistema de rutas de Rails. Ofrece un limpio y convencional mapeo de HTTP a los controladores sinnifica no tener que que pender el tiempo pensando como modelar tu API en terminos de HTTP.

Slide 43

Slide 43 text

Generacion de URLs: El lado complementario a ruteo es la generacion de URLs. Una buena API basada en HTTP incluye URLs.

Slide 44

Slide 44 text

Encabezados y respuestas de redireccionamiento: head :no_content y redirect_to user_url(current_user) son bastante utiles. Claro, podriamos agregar manualmente los encabezados pero, ¿por qué hacerlo?

Slide 45

Slide 45 text

Autenticacion basica, por digest y por token: Rails viene con soporte de fabrica para esos tres tipos de autenticacion HTTP.

Slide 46

Slide 46 text

Instrumentación: Desde Rails 3.0 se incluye una API de instrumentación para una variedad de eventos como procesamiento, envio de datos o archivos, redireccionamiento y consultas a la base de datos.

Slide 47

Slide 47 text

Generadores: Puede ser irrelevante para usuarios avanzados, pero es genial poder generar un recurso y obtener el modelo, controlador, stubs para pruebas y rutas creadas con un solo comando.

Slide 48

Slide 48 text

Demo

Slide 49

Slide 49 text

¿Preguntas?

Slide 50

Slide 50 text

¡Gracias! [email protected]