Concepto de Rutas en HTTP y REST

Uno de los conceptos más utilizados en el mundo del desarrollo de aplicaciones para Internet es el concepto de ruta.

En esta publicación trataremos de explicar de manera resumida dicho concepto.
En general cuando usamos Internet mediante un navegador cualquiera, utilizamos lo que común mente se conoce como un URL o enlace, es ese texto raro que colocamos en la casilla superior del navegador.

El acrónimo “URL” responde al Inglés  “Uniform Resource Locator” que se traduce como “Localizador Uniforme de Recursos” y es una forma estandarizada de especificar algo (recurso) que queremos obtener de la Internet.

El concepto de ruta corresponde a una parte del URL que identifica el recurso que se desea obtener.

Expandir para ver detalles sobre los URL's

Un URL tiene un formato definido compuesto de los siguientes elementos:

esquema://[info_de_usuario@]servidor[:puerto]/ruta/de/recurso[?cadena_de_consulta][#fragmento]

  1. Esquema:  O también definido como protocolo, le indica al navegador el protocolo o tipo de comunicación que debe usar para conseguir el recurso. Ejemplo: http:  o  https:
  2. Servidor:puerto:  Indica la dirección IP o nombre de dominio del servidor y el número puerto en el que escucha solicitudes dicho servidor. Cuando se usa el protocolo http: el numero de puerto 80 es predefinido por lo que no es necesario especificarlo. (ejemplo: http://google.com vs. http://google.com:80 ). Lo mismo sucede con el protocolo https: para el puerto 443 ( ejemplo: https://google.com vs. https://google.com:443 )
  3. Ruta del Recurso: refiere a la ruta que reconoce el servidor para ubicar el recurso solicitado. Ejemplo: https://www.facebook.com/costaricamakers
  4. Cadena de consulta:  Permite especificar parámetros de consulta para el recurso en una forma nombre_de_parametro=valor, por ejemplo: https://www.youtube.com/watch?v=XRCIzZHpFtY especifica el parametro v que apunta a un video específico que se puede mirar en Youtube.
  5. Fragmento: Esta sección es particular por que por lo general no viaja a través de la red hacia el servidor, sino que el navegado la utiliza para ubicar un fragmento específico dentro de la respuesta que obtiene. Así por ejemplo para la URL https://en.wikipedia.org/wiki/URL#Notes lo que el navegador hará es obtener el ercurso /wiki/url del servidor en.wikipedia.org mediante el protocolo https: y una vez obtenido el recurso se ubicará en el fragmento denominado Notas dentro del documento que recibe.

 

Para el protocolo HTTP (y HTTPS que no es más que HTTP sobre un canal cifrado) y en general para el mundo de los servicios y API’s REST el concepto de ruta permite definir formas de ubicar recursos que sean semánticamente efectivas.

Por ejemplo un API para manejar cuentas bancarias podría tener las siguientes rutas:

  1. /clientes
  2. /clientes/{identificador}
  3. /cuentas
  4. /cuentas/{identificador}

Así, la ruta #1 permite acceder a los clientes del banco en forma general.

La ruta #2 permite acceder a un cliente único definido por el parámetro {identificador} ( ejemplo: /cliente/124 )

La ruta #3 y #4 son similares a las 1 y 2 pero para el objeto cuenta (bancaria)

Para finalizar quisiera referirlos al artículo publicado por Stefan Jauker titulado “10 Best Practices for Better RESTFul API” el cual resumiremos de la siguiente manera para lo que respecta a rutas:

  • #1 – Usar sustantivos y no verbos (los verbos aplican para el método HTTP a usar y no para la ruta)
  • #2 – Las llamadas con el método HTTP GET no deben alterar los datos o el estado del sistema.
  • #3 – Usar sustantivos en plural (carros en vez de carro)
  • #4 – Uso de sub-rutas o sub-recursos para las relaciones. Ejemplo:  /cuentas/125/depositos/888
  • #7 – Uso de cadenas de consulta para efectos de ordenamiento, rangos, paginación, etc.
  • #8 – Utilice rutas de versionamiento de sus API’s ( /api/v1/clientes  vs /api/v2/clientes )

 

250 total views, 4 views today

4Shares

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

This site uses Akismet to reduce spam. Learn how your comment data is processed.