Blog
API RESTful en Flask – Introducción
- Publicado por: Rafael Fernandez
- Categoría: API RESTful Blog

Introducción a lo que es API RESTful
Conceptos básicos de API RESTful
Introducción
Las comunicaciones entre aplicaciones que trabajan conectadas a Internet son cada día mas importantes, es por eso que han surgido formas de comunicarse entre programas de manera que se pueda compartir datos e información entre los mismos de forma sencilla y rápida, una de las tecnologías mas usadas para este tipo de comunicación son las APIs (Application Program Interface) o interfaz de programación de aplicaciones, cuyo objetivo es brindar las vías y los mecanismos necesarios para que otras aplicaciones puedan conectarse y establecer una comunicación.
Las API RESTful o también llamadas Servicios Web RESTful, están basadas en la tecnología REST (Representational state transfer) o Estado de transferencia representacional y consisten en un enfoque moderno para las comunicaciones a través de servicios web, esta tecnología es generalmente es mas utilizada para las comunicaciones que el protocolo robusto SOAP (SINGLE OBJECT ACCESS PROTOCOL) ya que consume menos ancho de banda, haciéndolo mucho mas adecuado para las comunicaciones en internet, ademas de que toma ventaja del protocolo HTTP con el cual tenemos los métodos GET (para obtener un recurso), PUT (para alterar o modificar un recurso), POST (para crear un recurso) y DELETE (para eliminar un recurso).

Pre-requisitos
Para poder realizar de manera correcta este curso usted necesitará tener instalado Python 3, y es opcional pero recomendado tener algún editor como por ejemplo “Sublime Text” en cualquier de sus versiones, o “PyCharm”, por supuesto también es muy importante contar con interés de aprender lo cual consideramos fundamental a la hora de hacer cualquiera de nuestros cursos.
Audiencia pretendida
Este curso servirá a todo aquel que tenga por objetivo crear una interfaz de programación (API) para su aplicación web de manera que otros programas puedan acceder de manera controlada a los datos, cualquier persona que esté interesada en la comunicación en aplicaciones web y quiera aprender a utilizar el enfoque RESTful en sus proyectos, no es necesario un conocimiento muy profundo de programación pero si es deseable al menos una noción básica de programación.
¿Cuando Usar REST?
Aunque no siempre representa una tarea sencilla de lograr el implementar el enfoque de API RESTful debería utilizarse en los casos en que es necesario tener desacoplados el cliente del servidor, este caso se presenta cuando el servidor debe poder ser accedido por varios clientes sobre los cuales no se tiene control. Así mismo si tenemos una aplicación con una base de datos que maneje diferentes niveles de recursos es muy util crear un API para que estos recursos sean accedidos y puedan proveerse de forma genérica a otros clientes.
¿Por que Usar REST?
Las razones principales para usar REST tienen que ver con sus beneficios, como lo es que al desarrollador del lado del cliente se le hará muy fácil entender como consumir el API RESTful ya que al hacer uso consistente del protocolo HTTP se siguen los mismos lineamientos con independencia del lenguaje del lado cliente, entonces a la hora de integrar la aplicación cliente con el servidor suele ser mas sencillo que con otros enfoques, ademas otro de sus grandes beneficios es que el formato de los datos enviados suele ser en JSON el cual hace que las transferencias sean mas livianas que otros enfoques que usan XML para comunicarse, esto es una gran ventaja ya que estamos hablando de transferencias a través de la red y la velocidad de las transferencias suele ser un factor clave.
Cliente – Servidor
Primero que nada, aclaremos que el cliente no es el usuario, sino la aplicación que utiliza el usuario para poder conectarse con el servidor, de manera que el cliente es un programa que suele enviar peticiones al servidor, este a su vez le responde con la información pertinente.
Usualmente el concepto de cliente-servidor indica que el cliente y el servidor deberían estar separados de manera que se permitan evolucionar de forma independiente. De esta manera los desarrolladores pueden hacer cambios en una aplicación en el teléfono sin necesidad de impactar la estructura de la data que se maneja o el diseño de la base de datos en el servidor. De igual manera debería poder realizar cambios en el servidor sin necesidad de hacer cambios en el cliente.

Sin Estado (Stateless)
Cuando se habla de Stateless en el ámbito de las APIs RESTful, quiere decir que estas no conservan estado, las llamadas pueden hacerse de manera independiente una con respecto a las otras, y cada llamada deberá contener los datos suficientes para que la misma sea completada de manera exitosa, para esto se añaden en algunos casos datos como API key, access token, User ID, etc. un API RESTful requiere que cualquier estado sea guardado en el cliente y no en el servidor.
¿Que son los recursos?
En nuestro contexto, en la comunicación entre programas de computadora un Recurso suele ser la representación de una entidad u objeto que puede definirse mediante la descripción de sus propiedades y/o acciones que es capaz de hacer. Se suelen representar con clases en programación orientada a objetos, pero puede ser cualquier cosa que sea catalogable, puede ser información como los detalles que describen a un Hotel de manera que el recurso sería un hotel, o puede inclusive ser un archivo que contenga una imagen, audio o video.
Cuando se tienen definidos los recursos, es importante definir las acciones que pueden realizar estos recursos para poder crear la forma de acceder a esas acciones a través de nuestra API RESTful, esto se hace mediante URLs.
URI y URL
Las URI o Uniform Resource Identifier consiste en un texto que sirve para identificar un recurso, a esta URI se le añaden ciertos datos para localizar el recurso en la red de manera que tenemos un término adicional llamado URL (Unified Resource Location) que nos ayuda a acceder al recurso mediante su localización.
un ejemplo de una URL sería:
http://miweb.com/hoteles
En las API RESTful se utilizan las URI para definir una serie de claves o reglas a través de las cuales se podrán comunicar entre distintas aplicaciones, por ejemplo si una aplicación requiere ver la lista de hoteles, envía su petición a la dirección URL /hotels, este URI debe poderse configurar para que dependiendo del método HTTP que el cliente utilice, se puedan realizar una actividad especifica de manipulación al recurso o de consulta del mismo.
Los Métodos HTTP son los siguientes:
- GET: Para hacer consultas y obtener un recurso
- POST: Para Crear un recurso
- PUT: Para modificar un recurso
- DELETE: Para eliminar un recurso
Convención URLs Plural o Singular?
Una de las cuestiones que va a surgir a la hora de diseñar un API RESTful es como manejar los terminos de las URLs para acceder a los recursos, se suele aplicar una de las dos opciones que son escribir el nombre del recurso en plural, o escribirlo en singular, hay que comenzar diciendo que no existe un acuerdo o convención todavía que se aplique de forma general, sino que ambas formas son validas, pero es necesario acotar que una de las dos formas puede que tenga mas sentido que la otra dependiendo del punto de vista, de manera que tenemos lo siguiente:
Si escribimos una url para la consulta de todos los hoteles, tendría mas sentido que la URL fuera en plural, quedaría así:
/hotels
Pero si necesitamos hacer la creación de un hotel, quizás tengas mas sentido utilizar la URL en singular, utilizando el método POST por supuesto:
/hotel
Sin embargo esto también puede interpretarse de forma correcta utilizando el nombre del recurso en singular, se leería como “En Hoteles, voy a agregar 1” (POST a /hotels) lo cual corresponde con una interpretación quizás no tan clara pero si correcta. Podemos leer mas al respecto en una interesante respuesta en stackoverflow en el siguiente link: aqui
Un API siempre va a ser tan buena como su documentación, por lo tanto es bueno agregar una documentación correcta en el código en donde hacemos la definición de nuestros endopoints de nuestra API.
Frontend y Backend
En desarrollo web el Frontend suelen ser las tecnologías usadas en el cliente, o en el navegador web, estas se suelen generalizar en tres lenguajes, HTML, CSS, y JavaScript, desde este lado del desarrollo es donde se suelen hacer las peticiones al servidor para consultar, crear, editar o eliminar ciertos datos asociados al contexto de la aplicación, por ejemplo un usuario al intentar iniciar sesión ingresa sus datos en un formulario que es creado en el Frontend de la aplicación, sus datos son procesados y se envían al Backend.
El Backend por su lado es la capa de la aplicación en donde se ejecutan las tareas del servidor, es decir se tiene acceso a la base de datos, y se realizan las tareas inherentes al procesamiento de datos, los lenguajes comúnmente utilizados para estas tareas son PHP, Python, Java, .NET , entre otros. es en esta capa en donde suelen construirse las APIs para manejar las distintas peticiones que vienen desde el lado Frontend.
Algunas Ventajas que ofrece REST en desarrollo de software
Se separa el cliente del servidor
El enfoque REST separa totalmente la interfaz de usuario del servidor y el almacenamiento de datos. Eso tiene algunas ventajas cuando se hacen desarrollos. Por ejemplo, mejora la portabilidad de la interfaz para situaciones en las que se intente llevar a otro tipo de plataformas, aumenta la escalabilidad de los proyectos y permite que los distintos componentes de los desarrollos se puedan evolucionar de forma independiente.
Visibilidad, fiabilidad y escalabilidad
La separación entre cliente y servidor tiene una ventaja evidente y es que cualquier equipo de desarrollo puede escalar el producto sin excesivos problemas. Se puede migrar a otros servidores o realizar todo tipo de cambios en la base de datos, siempre y cuando los datos de cada una de las peticiones se envíen de forma correcta. Esta separación facilita tener en servidores distintos el frontend y el backend y eso convierte a las aplicaciones en productos más flexibles a la hora de trabajar.
La API REST es independiente del lenguaje de programación
la API REST se adapta al tipo de sintaxis o plataformas con las que se estén trabajando, lo que ofrece una gran libertad a la hora de cambiar o probar diferentes entornos dentro del desarrollo. Con una API REST es posible tener servidores en PHP, Java, Python o Node.js. Lo único indispensable es que las respuestas a las peticiones se hagan siempre en el lenguaje de intercambio de información usado, suelen ser usados los formatos XML o JSON.
Bonus
Adicionalmente les dejamos una foto del creador del enfoque REST para APIs y uno de los primeros autores de la especificación del protocolo HTTP el Señor Roy Fielding en persona, quien presentó en el año 2000 REST como una tesis:
➡ ¡Excelente! Ahora tenemos todo los conceptos necesarios. Continúa con tu aprendizaje en nuestro
curso creación de APIs RESTful con Flask – Python: