2 usuarios conectados
Desarrollo web con Python. Conceptos web. Http.Rest
Desarrollo web con Python. Conceptos web. Http.Rest
Para comprender completamente
el desarrollo web con frameworks como Flask y Django (y especialmente para la
creación de APIs con FastAPI), es fundamental tener una sólida comprensión de
los conceptos web fundamentales, en particular HTTP
y REST. Vamos a explorarlos:
HTTP (Hypertext Transfer Protocol): La Base
de la Web
HTTP es el protocolo de aplicación que sirve como
la base para la comunicación de datos en la World Wide Web. Define cómo los
mensajes son formateados y transmitidos entre los navegadores web (clientes) y
los servidores web.
Componentes Clave de HTTP:
-
Clientes y Servidores:
- Cliente: Generalmente
un navegador web (como Chrome, Firefox, Safari) que inicia una petición
a un servidor.
- Servidor: Un programa de
computadora que escucha las peticiones de los clientes y envía
respuestas.
-
Peticiones HTTP (HTTP Requests):
Un mensaje enviado por el cliente al servidor. Contiene información sobre lo
que el cliente está solicitando. Los elementos clave de una petición HTTP
son:
- Método HTTP (o Verbo):
Indica la acción que el cliente quiere que el servidor realice. Algunos
de los métodos más comunes son:
- GET: Solicita datos
de un recurso especificado.
- POST: Envía datos
al servidor para crear un nuevo recurso.
- PUT: Envía datos al
servidor para actualizar un recurso existente.
- DELETE: Solicita
que se elimine un recurso especificado.
- HEAD: Es similar a
GET, pero solo solicita las cabeceras de la respuesta, sin el
cuerpo.
- OPTIONS: Solicita
información sobre las opciones de comunicación disponibles para un
recurso.
- URL (Uniform Resource Locator):
Especifica la ubicación del recurso en el servidor.
- Cabeceras (Headers):
Proporcionan información adicional sobre la petición (por ejemplo, el
tipo de navegador del cliente, los tipos de contenido que puede
aceptar).
- Cuerpo (Body) (opcional):
Contiene los datos que se envían al servidor (por ejemplo, en peticiones
POST o PUT).
-
Respuestas HTTP (HTTP Responses):
Un mensaje enviado por el servidor al cliente en respuesta a una petición.
Contiene el resultado de la petición. Los elementos clave de una respuesta
HTTP son:
- Código de Estado (Status Code):
Un código numérico de tres dígitos que indica el resultado de la
petición. Algunos códigos comunes son:
- 200 OK: La petición
tuvo éxito.
- 201 Created: La
petición tuvo éxito y se creó un nuevo recurso.
- 400 Bad Request: La
petición del cliente fue mal formada.
- 401 Unauthorized:
Se requiere autenticación.
- 403 Forbidden: El
servidor entiende la petición pero se niega a cumplirla.
- 404 Not Found: El
recurso solicitado no se encontró.
- 500 Internal Server Error:
El servidor encontró un error inesperado.
- Cabeceras (Headers):
Proporcionan información adicional sobre la respuesta (por ejemplo, el
tipo de contenido de la respuesta, la fecha).
- Cuerpo (Body) (opcional):
Contiene los datos solicitados (por ejemplo, el contenido de una página
web, datos JSON).
-
Protocolo Sin Estado (Stateless):
HTTP es un protocolo sin estado, lo que significa que cada petición del
cliente al servidor es independiente de las peticiones anteriores. El
servidor no guarda ninguna información sobre las sesiones o las peticiones
anteriores de un cliente. Si se necesita mantener el estado (por ejemplo,
para una sesión de usuario), se utilizan mecanismos como cookies o sesiones
en el lado del servidor.
REST (Representational State Transfer):
Un Estilo Arquitectónico para APIs
REST es un estilo arquitectónico para diseñar
aplicaciones de red, particularmente APIs web. Se basa en un conjunto de
principios y restricciones que buscan crear sistemas escalables, flexibles y
fáciles de entender.
Principios Clave de REST:
-
Cliente-Servidor: Existe
una separación de responsabilidades entre el cliente (que inicia las
peticiones) y el servidor (que gestiona los recursos y las respuestas).
-
Sin Estado (Stateless):
Como en HTTP, cada petición del cliente al servidor debe contener toda la
información necesaria para entender la petición. El servidor no almacena
ningún estado sobre la sesión del cliente entre peticiones. El estado de la
aplicación reside en el cliente.
-
Cacheable: Las respuestas
deben ser etiquetadas como cacheables o no cacheables para que los clientes
y los intermediarios (como proxies) puedan almacenar en caché las respuestas
y reducir la carga en el servidor y mejorar el rendimiento.
-
Sistema de Capas (Layered System):
La arquitectura puede estar compuesta por múltiples capas de servidores (por
ejemplo, servidores proxy, balanceadores de carga) que son transparentes
para el cliente. El cliente no necesita saber si está interactuando
directamente con el servidor final o con un intermediario.
-
Código Bajo Demanda (Code-On-Demand)
(opcional): Los servidores pueden extender la funcionalidad del
cliente enviando código ejecutable (por ejemplo, applets Java o JavaScript).
Sin embargo, este principio es opcional y no siempre se implementa.
-
Interfaz Uniforme: Este es
el principio más importante y se desglosa en cuatro subprincipios:
- Identificación de Recursos:
Cada recurso debe ser identificable de forma única mediante una URL.
- Manipulación de Recursos a
Través de Representaciones: Los clientes manipulan los recursos
enviando y recibiendo representaciones de esos recursos. Estas
representaciones pueden estar en diferentes formatos (por ejemplo, JSON,
XML).
- Mensajes Auto-Descriptivos:
Cada mensaje (petición y respuesta) debe contener suficiente información
para que el receptor pueda entenderlo (por ejemplo, a través de los
tipos de contenido en las cabeceras).
- Hipermedia como Motor del Estado
de la Aplicación (HATEOAS - Hypermedia As The Engine Of Application
State): Los clientes deben poder descubrir las acciones
disponibles y los estados de transición a través de los enlaces
incluidos en las representaciones de los recursos. Esto permite que la
API evolucione sin romper los clientes. (Este es el principio más
complejo y no siempre se implementa completamente en todas las APIs
RESTful).
Cómo HTTP y REST se Relacionan:
La mayoría de las APIs RESTful utilizan HTTP
como su protocolo de transporte subyacente. Los métodos HTTP (GET, POST, PUT,
DELETE) se mapean a las operaciones CRUD (Create, Read, Update, Delete) sobre
los recursos. Las URLs identifican los recursos, y las representaciones de los
recursos se transfieren en el cuerpo de las peticiones y respuestas, a menudo en
formato JSON. Los códigos de estado HTTP se utilizan para indicar el resultado
de las operaciones.
En Resumen:
- HTTP es el protocolo
fundamental para la comunicación en la web, definiendo el formato de las
peticiones y respuestas.
- REST es un estilo
arquitectónico que se basa en los principios de HTTP para diseñar APIs
escalables y bien estructuradas. Utiliza los métodos HTTP para operar sobre
recursos identificados por URLs y transfiere representaciones de estos
recursos.
Comprender estos conceptos es crucial para
diseñar y consumir APIs web de manera efectiva, ya sea utilizando frameworks
como Flask y FastAPI o cualquier otra tecnología de desarrollo web.