Las APIs REST son fundamentales en el desarrollo de aplicaciones modernas, permitiendo la comunicación entre clientes y servidores. NestJS, un framework basado en Node.js y TypeScript, es una excelente opción para crear APIs escalables y eficientes. En este artículo, aprenderás cómo desarrollar una API REST con NestJS y PostgreSQL paso a paso.
1. Instalación de NestJS y configuración del proyecto
Antes de comenzar, instala NestJS globalmente si aún no lo tienes:
npm install -g @nestjs/cli
Luego, crea un nuevo proyecto con el siguiente comando:
nest new my-api
Navega al directorio del proyecto y ejecuta:
cd my-api && npm run start:dev
2. Instalación y configuración de PostgreSQL
PostgreSQL es una base de datos relacional potente y ampliamente utilizada. Para instalarla en tu sistema:
En Linux/macOS:
sudo apt install postgresql
obrew install postgresql
En Windows: Descárgalo desde postgresql.org
Configura el acceso a la base de datos y crea una nueva base de datos:
CREATE DATABASE my_database;
CREATE USER my_user WITH ENCRYPTED PASSWORD 'mypassword';
GRANT ALL PRIVILEGES ON DATABASE my_database TO my_user;
3. Instalación del ORM TypeORM en NestJS
Para interactuar con PostgreSQL en NestJS, usa TypeORM. Instálalo con:
npm install @nestjs/typeorm typeorm pg
Configura TypeORM en app.module.ts
:
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
@Module({
imports: [
TypeOrmModule.forRoot({
type: 'postgres',
host: 'localhost',
port: 5432,
username: 'my_user',
password: 'mypassword',
database: 'my_database',
autoLoadEntities: true,
synchronize: true,
}),
],
})
export class AppModule {}
4. Creación de una entidad y servicio REST
Define una entidad en src/entities/user.entity.ts
:
import { Entity, Column, PrimaryGeneratedColumn } from 'typeorm';
@Entity()
export class User {
@PrimaryGeneratedColumn()
id: number;
@Column()
name: string;
@Column()
email: string;
}
Crea un servicio y un controlador para manejar usuarios:
nest generate service users
nest generate controller users
Configura users.service.ts
para interactuar con TypeORM:
import { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { Repository } from 'typeorm';
import { User } from '../entities/user.entity';
@Injectable()
export class UsersService {
constructor(
@InjectRepository(User)
private usersRepository: Repository<User>,
) {}
findAll(): Promise<User[]> {
return this.usersRepository.find();
}
}
5. Configuración de rutas y prueba de la API
Define las rutas en users.controller.ts
:
import { Controller, Get } from '@nestjs/common';
import { UsersService } from './users.service';
import { User } from '../entities/user.entity';
@Controller('users')
export class UsersController {
constructor(private readonly usersService: UsersService) {}
@Get()
findAll(): Promise<User[]> {
return this.usersService.findAll();
}
}
Ejecuta la aplicación y prueba la API en http://localhost:3000/users
.
6. Comparación con otras tecnologías
Tecnología | Beneficios | Dificultad |
---|---|---|
NestJS + TypeORM | Escalabilidad y modularidad | Media |
Express + Sequelize | Simplicidad y facilidad de uso | Baja |
Django + PostgreSQL | Potente ORM y alto rendimiento | Alta |