...

Cómo crear una API REST con NestJS y PostgreSQL paso a paso

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 o brew 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íaBeneficiosDificultad
NestJS + TypeORMEscalabilidad y modularidadMedia
Express + SequelizeSimplicidad y facilidad de usoBaja
Django + PostgreSQLPotente ORM y alto rendimientoAlta

Conclusión

Seraphinite AcceleratorOptimized by Seraphinite Accelerator
Turns on site high speed to be attractive for people and search engines.