En la parte 1 anterior, vio cómo crear rápidamente un servicio API simple usando Fedora Estación de trabajo, Express y JavaScript. Este artículo le muestra la simplicidad de cómo crear una nueva API. Esta parte le muestra cómo:
- Instalar un servidor de base de datos
- Construir una nueva ruta
- Conectar una nueva fuente de datos
- Utilizar Fedora terminal para enviar y recibir datos
Generando una aplicación
Consulte el artículo anterior para obtener más detalles. Pero para simplificar las cosas, cambie a su directorio de trabajo y genere un esqueleto de aplicación.
$ cd our-work-directory
$ npx express-generator –no-view –git /myApp
$ cd myApp
$ npm i
Instalación de un servidor de base de datos
En esta parte, instalaremos la base de datos MariaDB. MariaDB es la Fedora base de datos predeterminada.
$ dnf module list mariadb | sort -u ## lists the streams available $ sudo dnf module install mariadb:10.3 ##10.4 is the latest
Nota: el perfil predeterminado es mariadb/server.
Para aquellos que necesitan hacer girar un contenedor Docker, un contenedor listo para usar con Fedora 31 está disponible.
$ docker pull registry.fedoraproject.org/f31/mariadb
$ docker run -d --name mariadb_database -e MYSQL_USER=user -e MYSQL_PASSWORD=pass -e MYSQL_DATABASE=db -p 3306:3306 registry.fedoraproject.org/f31/mariadb
Ahora inicie el servicio MariaDB.
$ sudo systemctl start mariadb
Si desea que el servicio se inicie en el arranque, también puede habilitarlo en systemd:
$ sudo systemctl enable mariadb ## start at boot
A continuación, configure la base de datos según sea necesario:
$ mysql -u root -p ## root password is blank MariaDB> CREATE DATABASE users; MariaDB> create user dbuser identified by ‘123456‘; MariaDB> grant select, insert, update, create, drop on users.* to dbuser; MariaDB> show grants for dbuser; MariaDB> q
Se necesita un conector de base de datos para usar la base de datos con Node.js.
$ npm install mariadb ## installs MariaDB Node.js connector
Aprovecharemos Sequelize en esta API de muestra. Sequelize es un ORM (Object Relational Mapper) de Node.js basado en promesas para Postgres, MySQL, MariaDB, SQLite y Microsoft SQL Server.
$ npm install sequelize ## installs Sequelize
Conexión de una nueva fuente de datos
Ahora, cree una nueva carpeta db y cree un nuevo archivo sequelize.js allí:
const Sequelize = require('sequelize'), sequelize = new Sequelize(process.env.db_name || 'users', process.env.db_user || 'dbuser', process.env.db_pass || '123456', { host: 'localhost', dialect: 'mariadb', ssl: true }) module.exports = sequelize
Nota: En aras de la exhaustividad, incluyo un enlace al repositorio de Github relacionado: https://github.com/vaclav18/express-api-mariadb
Vamos a crear un nuevo archivo models/user.js. Una buena característica de un modelo Sequelize es que nos ayuda a crear las tablas y columnas necesarias automáticamente. El fragmento de código responsable de hacer esto se ve a continuación:
sequelize.sync({ force: false })
Nota: nunca cambie a verdadero con una base de datos de producción: ¡eliminaría sus tablas al inicio de la aplicación!
Nos referiremos al sequelize.js creado anteriormente de esta manera:
const sequelize = require('../db/sequelize')
Construyendo nuevas rutas
A continuación, creará un nuevo archivo route/user.js. Ya tienes rutas/users.js del artículo anterior. Puede copiar y pegar el código y proceder a editarlo.
También necesitará una referencia al modelo creado previamente.
const User = require('../models/user')
Cambie la ruta de la ruta a /usuarios y también cree una nueva correo ruta del método.
Tenga cuidado con la sincronización: espere las palabras clave allí. Una interacción con una base de datos llevará algún tiempo y esta funcionará. Sí, una función asíncrona devuelve una promesa y esta hace que las promesas sean fáciles de usar.
Nota: este código no está listo para la producción, ya que también debería incluir una función de autenticación.
Haremos que la nueva ruta funcione de esta manera:
const userRouter = require('./routes/user') app.use(userRouter)
También eliminemos el enrutador de usuarios existente. Las rutas/users.js también se pueden eliminar.
$ npm start
Con el comando anterior, puede iniciar su nueva aplicación.
Uso del terminal para enviar y recuperar datos
Vamos a crear un nuevo registro de base de datos a través del método de publicación:
$ curl -d 'name=Adam' https://localhost:3000/users
Para recuperar los datos creados a través de la API, realice una solicitud HTTP GET:
$ curl https://localhost:3000/users
La salida de la consola del curl El comando es una matriz JSON que contiene datos de todos los registros en la tabla Usuarios.
Nota: este no es realmente el resultado final habitual: una aplicación finalmente consume la API. La API generalmente también tendrá puntos finales para actualizar y eliminar datos.
Más automatización
Supongamos que querríamos crear una API que sirviera a muchas tablas. Es posible y muy útil generar automáticamente modelos para Sequelize desde nuestra base de datos. Sequelize-auto hará el trabajo pesado por nosotros. Los archivos resultantes (models.js) se colocarán e importarán dentro del directorio /models.
$ npm install sequelize-auto
Se necesita un conector node.js para usar este y ya lo tenemos instalado para MariaDB.
Conclusión
Es posible desarrollar y ejecutar una API usando Fedora, Fedora MariaDB predeterminado, JavaScript y desarrolle de manera eficiente una solución como con una base de datos noSQL. Para aquellos acostumbrados a trabajar con MongoDB o una base de datos noSQL similar, Fedora y MariaDB son importantes habilitadores de código abierto.
Foto por Mazhar Zandsalimi en Unsplash .