Abrir una app envía una petición
Una petición HTTP, la del protocolo de transferencia de hipertexto, es el mensaje con el que una app pide algo a un servidor. Si sabes leerla, entiendes qué pide cada app y por qué a veces falla.
Piensa en la app de la biblioteca de tu universidad. Al abrirla, pide al servidor la lista de libros. El servidor contesta con otro mensaje: la respuesta.
Al terminar esta lección
Nota
Puedo leer una petición HTTP y su respuesta.
Palabras clave
| Palabra | Qué significa | Ejemplo |
|---|---|---|
| Petición | el mensaje que pide algo a un servidor | |
| Respuesta | el mensaje con el que el servidor contesta | |
| Método | la palabra que dice qué quieres hacer | GET |
| Cabecera | una línea con un dato extra sobre el mensaje | Host: api:3000 |
| Código de estado | el número que dice cómo fue la petición | 404 |
| Cuerpo | los datos que viajan al final del mensaje |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Una petición tiene cuatro partes
La primera línea lleva el método, la ruta y la versión del protocolo. La ruta es la parte de la dirección que dice qué recurso se pide.
Después vienen las cabeceras, una por línea. Cada una tiene un nombre, dos puntos y un valor.
Una línea vacía cierra las cabeceras. Lo que sigue es el cuerpo, y muchas peticiones no lo llevan.
Una petición escrita línea a línea
GET /books?id=eq.1 HTTP/1.1
Host: api:3000
Accept: application/jsonEjemplo resuelto: la primera línea, por partes
| Parte | En el ejemplo | Qué dice |
|---|---|---|
| Método | GET | Quiero leer |
| Ruta | /books?id=eq.1 | Pido el libro con id 1 |
| Versión | HTTP/1.1 | Hablo esta versión del protocolo |
| Cabecera Host | api:3000 | El servidor al que va el mensaje |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Un error frecuente
Advertencia
Mucha gente cree que una petición es solo la dirección que se escribe en el navegador. La dirección es solo una parte. También cuentan el método, las cabeceras y a veces el cuerpo. Dos peticiones a la misma dirección con distinto método hacen cosas distintas.
La respuesta trae estado y cuerpo
La primera línea de la respuesta lleva el código de estado. 200 quiere decir que todo fue bien. 404 quiere decir que no existe lo que pides.
Siguen las cabeceras, que hablan del cuerpo, por ejemplo de su tipo. El cuerpo es lo que pediste. Aquí es JSON, un texto que escribe los datos con llaves y corchetes y que lee cualquier lenguaje.
curl envía peticiones desde el terminal
curl es un programa que envía una petición y muestra lo que llega. En el laboratorio, la API de la biblioteca está en http://api:3000.
Los nombres de tablas y columnas van en inglés, como en casi todos los proyectos. Los datos están en español.
Primero prepara la tabla books con cuatro libros. Es seguro repetirlo: empieza de cero cada vez.
Dar a psql la contraseña
export PGPASSWORD=shopSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Crear la tabla de libros
psql -h db -U shop -q -c "drop table if exists books; create table books (id serial primary key, title text not null, copies int not null default 1, status text not null default 'disponible'); insert into books (title, copies, status) values ('Redes de computadores', 3, 'disponible'), ('Algoritmos y estructuras', 0, 'prestado'), ('Sistemas operativos', 2, 'disponible'), ('Ingenieria del software', 1, 'disponible'); notify pgrst, 'reload schema'"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Pedir el libro con id 1
curl -s -w "\n" "http://api:3000/books?id=eq.1"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Ver las líneas que envía curl
curl -s -v -o /dev/null "http://api:3000/books?id=eq.1" 2>&1 | grep -E "^> (GET|Host)"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Ver la línea de estado
curl -s -v -o /dev/null "http://api:3000/books?id=eq.1" 2>&1 | grep -E "^< HTTP"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Pedir una ruta que no existe
curl -s -o /dev/null -w "%{http_code}\n" "http://api:3000/magazines"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.