Cualquier aplicación web se basa en una arquitectura cliente-servidor, donde un servidor queda a la espera de conexiones de clientes, y los clientes se conectan a los servidores para solicitar ciertos recursos.
Estas comunicaciones se realizan mediante un protocolo llamado HTTP (o HTTPS, en el caso de comunicaciones seguras). En ambos casos, cliente y servidor se envían cierta información estándar, en cada mensaje:
Para solicitar los recursos, los clientes se conectan o solicitan una determinada URL (siglas en inglés de localización uniforme de recursos, Uniform Resource Location). Esta URL consiste en una línea de texto con tres secciones diferenciadas:
Por ejemplo, la siguiente podría ser una URL válida:
http://miservidor.com/books?id=123
El protocolo empleado es http, y el nombre de dominio es miservidor.com. Finalmente, la ruta o URI es books?id=123, y el texto tras el interrogante '?' es la información adicional llamada datos del formulario. Esta información permite aportar algo más de información sobre el recurso solicitado. En este caso, podría hacer referencia al código del libro que estamos buscando.
Dependiendo de cómo se haya implementado el servidor, también podríamos reescribir esta URL de este otro modo, con el mismo significado:
REST son las siglas de REpresentational State Transfer, y designa un estilo de arquitectura de aplicaciones distribuidas, como las aplicaciones web. En un sistema REST, identificamos cada recurso a solicitar con una URI (identificador uniforme de recurso), y definimos un conjunto delimitado de comandos o métodos a realizar, que típicamente son:
Existen otros tipos de comandos o métodos, como por ejemplo PATCH (similar a PUT, pero para cambios parciales), HEAD (para consultar sólo el encabezado de la respuesta obtenida), etc. Nos centraremos, no obstante, en los cuatro métodos principales anteriores.
Por lo tanto, identificando el recurso a solicitar y el comando a aplicarle, el servidor que ofrece esta API REST proporciona una respuesta a esa petición. Esta respuesta típicamente viene dada por un mensaje en formato JSON o XML (aunque éste último cada vez está más en desuso).
Durante la realización de la mayoría de las prácticas del curso, usaremos una aplicación llamada Postman, que permite construir peticiones de diferentes tipos, empleando distintos tipos de comandos, cabeceras y contenidos, enviarlas al servidor que indiquemos y examinar la respuesta proporcionada por éste.
JSON son las siglas de JavaScript Object Notation, una sintaxis propia de Javascript para poder representar objetos como cadenas de texto, y poder así serializar y enviar información de objetos a través de flujos de datos (archivos de texto, comunicaciones cliente-servidor, etc).
Un objeto Javascript se define mediante una serie de propiedades y valores. Por ejemplo, los datos de una persona (como nombre y edad) podríamos almacenarlos así:
let persona = { nombre: "Nacho", edad: 39 };
Este mismo objeto, convertido a JSON, formaría una cadena de texto con este contenido:
{ "nombre": "Nacho", "edad": 39 }
Del mismo modo, si tenemos una colección (vector) de objetos como ésta:
let personas = [ { nombre: "Nacho", edad: 39 }, { nombre: "Mario", edad: 4 }, { nombre: "Laura", edad: 2 }, { nombre: "Nora", edad: 10 } ];
Transformada a JSON sigue la misma sintaxis, pero entre corchetes:
[ { "nombre": "Nacho", "edad": 39 }, { "nombre": "Mario", "edad": 4 }, { "nombre": "Laura", "edad": 2 }, { "nombre": "Nora", "edad": 10 } ]
Los códigos de estado de la respuesta, depende del resultado de la operación que se haya realizado. Se catalogan en cinco grupos:
En este enlace puedes ver los diferentes código de estado y su explicación.
Haremos uso de estos códigos de estado en nuestros servicios REST para informar al cliente del tipo de error que se haya producido, o del estado en que se ha podido atender su petición.
un endpoint se refiere a una URL específica a la que se puede realizar una solicitud HTTP (GET, POST, PUT, DELETE…) para interactuar con un recurso o conjunto de recursos. Cada endpoint está asociado con una operación y puede devolver o manipular datos en formato JSON, XML u otro formato, según lo definido por la API.
Hay una serie de buenas prácticas a la hora de crear tus endpoints. Algunas de ellas son:
Vamos a ver varios ejemplos para clarificar lo anterior:
Más adelante ya veremos como enviar los datos que tenemos que insertar o borrar.
Además, los endpoints pueden llevar parámetros opcionales. Por ejemplo, el siguiente endpoint devolvería la página 3 del listado de libros:
GET /books?page=3