viernes, 15 de abril de 2016

To REST or not to REST

Harto de encontrarme por todos lados en los últimos tiempos las palabras REST o RESTful cuando se habla de aplicaciones web, servicios web y temas relacionados, y no saber qué significan, me he decidido dedicar un rato (un par de horas) a aprender qué quiere decir esto.

Aquí va mi resumen personal para leer en cinco minutos, al que volveré dentro de un tiempo cuando se me haya olvidado, y espero que me sirva de refresco. Quien quiera más detalles, abajo encontrará algunos enlaces. Básicamente, lo que resumo aquí se basa en un 70-80% en el primer enlace, que es el que más útil me ha parecido de los que he encontrado hasta ahora.

Fig. 1. REST es un conjunto de ideas de las que destacan 4 tomates principios. 
Imagen de Softeis - Trabajo propio, CC BY-SA 3.0, https://commons.wikimedia.org/w/index.php?curid=143779
 

1. Qué es REST

Un conjunto de principios de arquitectura para el desarrollo de aplicaciones y servicios web.
Surge en oposición a SOAP y WSDL, que son más complicados.
Grandes proveedores 2.0 usan APIs RESTful (Google, Facebook...)

El énfasis se pone en los recursos (¿objetos?) y su transferencia por HTTP.

2. Principios básicos

2.1. Uso explícito de métodos HTTP
Se deben utilizar como se definieron en la especificación original de HTTP 1.1 (RFC 2616). Esto significa:

- GET para consultas
- POST para altas
- PUT para actualizaciones
- DELETE para ...¿lo adivinas?

Usar un GET para insertar o actualizar un registro en una BD es posible pero no es acorde con los principios RESTful.

2.2. Protocolo cliente/servidor sin estado
Cada petición HTTP debe contener toda la información necesaria.

Esto debe facilitar la escalabilidad, no se debe hacer que un servidor recupere el contexto si, por ejemplo, tiene que redirigir la petición a otro servidor para balanceo de carga.

Se transfiere el problema de mantener el estado al cliente.

Aunque a la hora de la práctica, aplicaciones que se definen como RESTful suelen usar cookies y otras formas de mantener el estado. ??

2.3. Exponer URIs como directorios y ficheros
Las URIs son así más intuitivas. Por ejemplo: http://www.dominio.com/informes/2016/04 nos podría devolver los informes de abril de 2016. Es una especie de sintaxis universal.

También se oculta la tecnología (no se ven extensiones de archivos, como ocurre en casos como  http://www.dominio.com/informes/recuperar_informes.php donde se ve que se utiliza PHP). Así se puede cambiar la tecnología subyacente sin cambiar la URI.

Parece que este es el principio más REST de los cuatro.

4. Los recursos se devuelven en XML, HTML o JSON
Por ejemplo, un registro de una BD. Estos recursos pueden contener enlaces (URIs) a otros recursos.

3. Ideas importantes
Al exponer los recursos mediante una API RESTful, se facilita la integración de aplicaciones de diferente naturaleza y tecnologías. Se puede proporcionar una base de servicios REST que pueden utilizar otras aplicaciones más complejas para construir sobre ellos.

No todas las implementaciones públicas que se definen como REST son RESTful. Parece que el principio predominante que sí se suele respetar es el de la URI uniforme (principio 3), como podemos ver, por ejemplo, aquí.

También he detectado un poco de bombo en torno al término REST, pero esto es inevitable en esta profesión, donde los nuevos términos se utilizan a menudo como el equivalente tecnológico de cojonudo.

4. Más info
  • RESTful Web services: The basics
http://www.ibm.com/developerworks/webservices/library/ws-restful/index.html?ca=dgr-jw22RESTfulBasics&S_Tact=105AGX59&S_CMP=GRsitejw22

  • Versión en español del artículo anterior
http://www.dosideas.com/noticias/java/314-introduccion-a-los-servicios-web-restful.html

  • Artículo en la Wikipedia en español (mejor leerlo después de leer el primer enlace)
https://es.wikipedia.org/wiki/Representational_State_Transfer

  • Servicios que son "accidentalmente" RESTful
http://www.markbaker.ca/blog/2005/04/14/#2005-04-amazon-next

He leído también detalles en otras páginas, pero son cosas más puntuales, y nada que no podáis superar con una simple búsqueda.

jueves, 14 de abril de 2016

Espacio en disco en formato legible para las personas (linux)

Aunque hay muchas herramientas gráficas para ver el espacio disponible en disco, uno siempre acaba volviendo de forma recurrente al útil comando df, que se puede usar tecleando sin más

$ df

y produce una salida tal que así

Fig 1. Salida del comando df


Por pequeño que sea un disco, siempre salen números muy grandes, ya que da el tamaño en bloques de 1K. Resulta un poco difícil de decir, a bote pronto, cuántos gigas libres te quedan.

Pero claro, normalmente nos gusta más leer el tamaño en megas y gigas. Para esto, viene muy bien la opción -h (legible por Humanos) del comando df.

$ df -h


Fig 2. Salida del comando df con la opción -h (humanos)



Y ahora sí que se puede leer bien.

 Como curiosidad, he marcado la tercerra línea para comparar cómo se ve esa misma información con el explorador Nautilus de Ubuntu, mostrando las propiedades del equipo.

Fig. 3. Ver el espacio en disco con Nautilus

Y se ve algo así

Fig. 4. Salida de Nautilus (tarda un buen rato)

Una curiosidad es que Nautilus y el comando df no muestran exactamente el mismo espacio usado (10,6 GB en un caso y 10G en el otro). Curioso.

Por cierto, me estoy quedando sin espacio en la partición /boot. Habrá que hacer algo.