Qué vas a hacer
Una base de datos guarda información en tablas. Una API web permite que un programa pida esa información a través de internet. Primero creas una tabla en una base de datos de verdad. Después la lees y la cambias con peticiones web enviadas con curl, igual que una aplicación del móvil habla con un servidor.
Antes de empezar
Nota
Pulsa Iniciar el laboratorio en la barra de la parte superior de esta lección y espera hasta que diga que está en marcha. La primera vez tarda unos segundos, porque primero arranca la base de datos. Cada botón Ejecutar de abajo escribe su comando en el terminal de tu laboratorio, uno detrás de otro y en la misma sesión. Para verlos, o para escribir los tuyos, pulsa Abrir el terminal (pestaña nueva) en la barra.
1. Crea una tabla
La base de datos se llama shop. Este paso crea una tabla llamada notes (notas) con dos columnas: un id que se numera solo y el texto, body, de cada nota. PGPASSWORD es la contraseña, para que no te la pida.
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.
psql -h db -U shop -c "create table notes (id serial primary key, body text not null)"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
2. Mete una nota
insert añade una fila. El segundo comando le dice a la API que vuelva a leer la base de datos. La API la leyó una vez al arrancar, antes de que existiera notes.
psql -h db -U shop -c "insert into notes (body) values ('hello')"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
psql -h db -U shop -c "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.
3. Léela por la web
La API da a la tabla una dirección web. curl la pide y la respuesta llega en JSON, un formato de texto que los programas leen con facilidad: [{"id":1,"body":"hello"}]. -w "\n" termina la respuesta con un salto de línea, para que quede en su propia línea debajo del comando.
curl -s -w "\n" http://api:3000/notesSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
4. Añade una nota por la web
Una petición POST añade una fila. La parte -d es la nota nueva, en JSON. Después vuelve a leer la tabla: ahora hay dos notas.
curl -s -X POST -H "Content-Type: application/json" -d '{"body":"from curl"}' http://api:3000/notesSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
curl -s -w "\n" http://api:3000/notesSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
5. Pide menos
Si añades palabras a la dirección, pides solo una parte de la tabla. Esta petición pide solo la nota cuyo body es igual a hello.
curl -s -w "\n" "http://api:3000/notes?body=eq.hello"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
6. Mira qué se conserva
Pulsa Detener el laboratorio en la barra y después Iniciar el laboratorio otra vez, y vuelve a ejecutar el paso 3: tus notas siguen ahí. La base de datos guarda sus archivos en un volumen con nombre, y la plataforma guarda el volumen. Todo lo que escribas fuera de un volumen se pierde cuando el laboratorio se detiene. Los contenedores en producción (en los servidores reales) funcionan igual.
Para el profesorado
Consejo
Esta lección es un ejemplo pequeño de una lección practicada en un laboratorio: los pasos y los botones Ejecutar son la lección, y el laboratorio es la copia de cada alumno. El laboratorio tiene dos servicios, una base de datos y una API, que se encuentran por su nombre, como en una aplicación real. Cópiela en su propio módulo y cámbiela, o cree una desde cero con el menú Laboratorio del editor de lecciones.