No tienes acceso a esta clase

隆Contin煤a aprendiendo! 脷nete y comienza a potenciar tu carrera

C贸digos de estado o HTTP response status codes

13/23
Recursos

El protocolo HTTP tiene estandarizado una lista de c贸digos de estado que indican los tipos de respuesta que las API deben enviar dependiendo la situaci贸n. Como profesional en el desarrollo de software, debes conocerlos y diferenciarlos.

Cu谩les son los c贸digos HTTP

Hay cinco familias de c贸digos de estado HTTP que tienes que utilizar apropiadamente para que tus APIs informen correctamente la situaci贸n de la solicitud.

  • Estados informativos (100鈥199)
  • Estados de 茅xito (200鈥299)
  • Estados de redirecci贸n (300鈥399)
  • Estados de error del cliente (400鈥499)
  • Estados de error del servidor (500鈥599)

C贸mo manejar los c贸digos de estado HTTP con NestJS

En NestJS, puedes manejar los c贸digos de estado HTTP importando el decorador HttpCode y el enumerado HttpStatus desde @nestjs/common.

El primero te servir谩 para indicar cu谩l ser谩 el c贸digo de estado HTTP que un endpoint tiene que devolver; el segundo para ayudarte por si no recuerdas qu茅 c贸digo pertenece a cada tipo de respuesta.

import { Controller, HttpCode, HttpStatus } from '@nestjs/common';

@Get('product/:idProduct')
@HttpCode(HttpStatus.OK)
getProduct2(@Param('idProduct') idProduct: string): string {
    return `Producto id: ${idProduct}`;
}

@Post('product')
@HttpCode(HttpStatus.CREATED)
createProducto(@Body() body: any): any {
    return {
      name: body.name,
      price: body.price
    };
}

El enumerado HttpStatus.OK indica c贸digo de estado 200 que es el que suele devolver por defecto todos los endpoints cuando la operaci贸n sale exitosamente. Los endpoints POST suelen devolver HttpStatus.CREATED o c贸digo 201 para indicar la creaci贸n exitosa del registro.

src/controllers/products.controller.ts

import { ..., HttpStatus, HttpCode, Res } from '@nestjs/common';
import { Response } from 'express';

@Controller('products')
export class ProductsController {
  ...
  @Get(':productId')
  @HttpCode(HttpStatus.ACCEPTED) // 馃憟 Using decorator
  getOne(
    @Res() response: Response,
    @Param('productId') productId: string
  ) {
    response.status(200).send({...}); // 馃憟 Using express directly
  }
}

Contribuci贸n creada por: Kevin Fiorentino.

Aportes 19

Preguntas 5

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad?

o inicia sesi贸n.

Con el decorador聽 @HttpCode puedes personalizar el status code para tus endpoints 馃槷

Lista de status codes, pero con im谩genes de gato (like nest): https://http.cat/

CODIGOS DE ESTADO
Bueno esta parte si eres nuevo , para que entres en contexto te recomiendo la siguiente pagina => https://http.cat/

Nest nos permite utilizar nuestros propios estados , para esto debemos importar nuestro decorador HttpCode y opcionalmente HttpStatus

import {Controller,Post,HttpStatus,HttpCode} from '@nestjs/common';

Y definir el c贸digo de estado

 @Post("rute")
  @HttpCode(code)
  create(@Body() payload: any) {
    return {
      message: 'acci贸n de crear',
      payload,
    };
  }

Dije que HttpStatus es opcional ya que podemos definir el c贸digo de 2 maneras , numero o por las propiedades de HttpStatus

@HttpCode(HttpStatus.CREATED)

@HttpCode(201)

Aunque personalmente prefiero definirlo por n煤meros

Para mi no es recomendable usar la forma del decorador para devolver una respuesta. 驴qu茅 pasa si buscas productos y no hay productos? para mi lo l贸gico seria regresar un 404 y un mensaje de 鈥渘o se encontr贸 informaci贸n鈥. Esto a futuro ayuda muchisimo con las pruebas que se realicen a la API y en el desarrollo del front al interceptar todas las respuestas que se obtengan y manejarlas de forma m谩s f谩cil.

Informational responses (100鈥199)
Successful responses (200鈥299)
Redirects (300鈥399)
Client errors (400鈥499)
Server errors (500鈥599)

Ahi revisando el header del response, veo que por defecto usa express como motor para levantar la aplicacion.

X-Powered-By: Express
Content-Type: application/json; charset=utf-8
Content-Length: 11
ETag: W/"b-BfDWjle+nLCXbOxW3/J6xVZmCOI"
Date: Sun, 16 May 2021 17:25:48 GMT
Connection: keep-alive

Nest ofrece una versi贸n que usa fastify por si algui茅n usa fastify en vez de express.

Lo veo como un estado esperado, por que en caso de error se tendria que personalizar el tipo de respuesta y codigo diferente al que deberiai.

Utilizando el Res de Express, solo conocimiento

C贸digos de respuesta

Como se mencion贸, son numerales descriptivos de nuestro aplicativo y dependen de nuestro desarrollo.
.
En NestJS toda operaci贸n efectuada tendr谩 el c贸digo de respuesta 200 - OK a menos que sea un m茅todo post, el cual tendr谩 un m茅todo de respuesta 201 - Created.
.
馃摎 NestJS Exception filters
.
En mi experiencia, me ha funcionado desarrollar un controlador que despu茅s sea implementado por Express como middleware de error. As铆 mismo, he podido adecuarlo a los diferentes frameworks para operar.
.

獯 Gist de Repositorio GitHub: Zentrity

.

Nota. En aras de continuar con nuestro curso, omitir茅 la implementaci贸n de este controlador en NestJS hasta que sea prudente.

.

// controllers/ErrorServer.controller.ts
/**
 * @class ErrorServer
 * @description ErrorServer collection in server. */
export default class ErrorServer extends Error {
    /**
     * @description Representational error code. */
    public code: number

    /**
     * @description Error message as default. */
    public error: string

    /**
     * @private
     * @description Dictionary of error controller. */
    private readonly errors: { [key: string]: any } = {
        SERVER: {
            code: 500,
            message: 'Internal Server Error',
        },
        DRIVER: {
            code: 503,
            message: 'Service Unavailable',
        },
        BAD_REQUEST: {
            code: 400,
            message: 'Bad Request',
        },
        UNAUTHORIZED: {
            code: 401,
            message: 'Unauthorized',
        },
        NOT_FOUND: {
            code: 404,
            message: 'Not Found',
        },
        EXIST: {
            code: 409,
            message: 'Conflict',
        },
    }

    /**
     * @constructor
     * @param {string} type Error type
     * @param {string} message Error message */
    constructor(type: string, message?: string) {
        super(message || 'without trace')
        this.code = this.errors[type].code
        this.error = this.errors[type].message
    }
}

Informaci贸n del Curso de Postman de platzi:

1xx: Indican que la peticion fue recibida y el servidor sigue trabajando en el proceso, es decir, no fue exitosa ni fue err贸nea, sino que esta siendo procesada aun.
2xx: Indican que la peticion fue recibida y procesada correctamente.
3xx: Indican que hay que tomar acciones adicionales para completar la solicitud. Por lo general estos codigos indican redireccion. Generalmente en los APIs no se usan redirecciones porque no contienen estados, es decir, toda la informacion esta contenida en una solicitud, no se guarda un estado en el servidor con una sesion por ejemplo.
4xx: Indican errores del lado del cliente, por ejemplo: se hizo mal la solicitud, faltan datos, headers o cualquier otro error que pueda ocurrir.
5xx: Indican errores del servidor. Suelen aparecer cuando existe un fallo en la ejecuci贸n en el servidor.

Hasta ahora se ve buen铆simo este framework 馃槃

muy buenas las clases, creo que es el framework que menos me ha costado comprender鈥 peeeroooo dejemos de aplazar los temas, de aqu铆 para atr谩s no s茅 cu谩ntas veces te escuche decir 鈥減ero lo veremos m谩s adelante鈥, y la verdad no me agrada dejar materia a medias鈥

Me gusto mucho esta seccion. Ya tengo varios anios de experiencia con Express y con los conceptos de una REST API pero el profe explica muy bien y va dando pequenios tips que hacen que valga la pena verlo 馃槂

Nest utiliza internamente express, y se pueden manipular c贸digo directamente de express en nest, pero deber铆a ser utilizado solo en casos bastantes puntuales

HttpStatus y HttpCode

馃憦

Fastify no tiene tantos tutoriales, pero su documentaci贸n es buena y los benchmark son 馃敟