# QA: prueba diferentes códigos http en tus desarrollos (ok y errores)

Cuando se trata de desarrollo de software que interconecta programas, plataformas o diferentes interfaces a través de http (internet), es necesario comprender y conocer que hay estandarizados decenas de códigos de respuesta y error.

### Programando con APIs o desarrollo web es muy frecuente usarlos o necesitar probar los códigos http:

Tenemos por ejemplo algunos de los más conocidos: 200, ok; 404, no encontrado; la familia de los 50x, errores de servidor; 429, demasiadas solicitudes (frecuente en quienes trabajamos con APIs), etc.

Éstos generalmente están ampliamente documentados, aunque solemos centrarnos en una breve descripción de cada uno y de los más habituales de encontrar, hay documentación, protocolos y más disponible para adentrarse en las profundidades del saber.

### Gestión de estados y errores para optimizar tu código:

Pero, ¿cómo probar de forma fácil tus desarrollos? ¿cómo podés «provocar» una respuesta 429 de forma fácil, y sin tener que bombardear la API que estás usando con miles de request? ¿Cómo desarrollar la gestión de un error X sin tener que ponerte a provocarlo con mucho ingenio y hasta probabilidad de fallo, perdiendo demasiado tiempo?

Bueno, para todo eso hay algunas plataformas que nos lo dan servido, tan simple como pegar un link y apuntar a una url, y ya….

## ¿Cómo hacer request / solicitudes de prueba y recibir código *http* predeterminado? ¿Cómo probar un error 500, pero sin romper nada?

El caso que traigo hoy es muy sencillo, se trata de [httpstat.us](https://httpstat.us/) y nos permite hacer GET y POST a sus url marcando el código de respuesta que necesitamos y/o código de error que esperamos probar.

Además de respondernos el estado http numérico (que es lo importante) también nos deja lo que significa (ok, error, etc), por si queremos mostrarlo o guardarlo en logs o base de datos y quede sistematizado.

Lo que vamos a recibir es algo como esto:

### Probar una *request http* y obtener una respuesta o código http de error en un tiempo configurable:

Una curiosidad muy útil es poder agregarle un *delay* a la respuesta, entonces podemos hacer más realista el escenario de pruebas. Si estamos probando una API y necesitamos recibir un 429, probablemente a nivel desarrollo y mientras armamos el código no hagamos muchas request, y tampoco sería correcto ni coherente bombardear el servidor sólo para obtener el 429 y capturarlo…

Entonces, ok, podemos hacer un GET o POST a la url agregando en el parámetro sleep el tiempo en milisegundos que queremos tener de demora: httpstat.us/429\*\*?sleep=5000\*\*

Si lo testeamos con con *postman* o similar, el resultado es este:

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1724735544240/eb7f88b8-148a-4503-94dd-3d8f8112d1c8.png align="left")

El http 429 indica que se alcanzó el rate-limit, demasiadas solicitudes.

### Estados *http* y códigos de respuesta y/o error más frecuentes

Si recurrimos a la [documentación de los códigos y estados http](https://developer.mozilla.org/es/docs/Web/HTTP/Status), encontramos que se dividen en grupos o familias, lo que a su vez puede ayudarnos a desarrollar o programar funciones o gestión de estos código de respuesta y/o errores y evitar fallos.

La MDN (link de arriba) tiene un detalle y explicación de cada uno; otro recurso útil es el [listado de la Wikipedia](https://es.wikipedia.org/wiki/Anexo:C%C3%B3digos_de_estado_HTTP). En resumen, se dividen en:

1. Respuestas informativas (`100`–`199`),
    
2. Respuestas satisfactorias (`200`–`299`),
    
3. Redirecciones (`300`–`399`),
    
4. Errores de los clientes (`400`–`499`),
    
5. y errores de los servidores (`500`–`599`).
    

Más allá de los cientos que hay, es de interés conocer algunos de los más frecuentes códigos de respuesta y/o error http, que copio abajo. Además, también, es el listado de los que soporta esta web que mencionaba al inicio. Es decir, podemos obtener respuestas http para probar desarrollos web, programación de sistemas, testeo de APIs y más, con estos códigos abajo enumerados:

**Familia de los http 10x**  
100 Continue  
101 Switching Protocols  
102 Processing  
103 Early Hints

**Familia de los http 2xx**  
200 OK  
201 Created  
202 Accepted  
203 Non-Authoritative Information  
204 No Content  
205 Reset Content  
206 Partial Content  
207 Multi-Status  
208 Already Reported  
226 IM Used

**Familia de los http 30x**  
300 Multiple Choices  
301 Moved Permanently  
302 Found  
303 See Other  
304 Not Modified  
305 Use Proxy  
306 Switch Proxy  
307 Temporary Redirect  
308 Permanent Redirect

**Familia de los http 4xx**  
400 Bad Request  
401 Unauthorized  
402 Payment Required  
403 Forbidden  
404 Not Found  
405 Method Not Allowed  
406 Not Acceptable  
407 Proxy Authentication Required  
408 Request Timeout409 Conflict  
410 Gone  
411 Length Required  
412 Precondition Failed  
413 Request Entity Too Large  
414 Request-URI Too Long  
415 Unsupported Media Type  
416 Requested Range Not Satisfiable  
417 Expectation Failed  
418 I’m a teapot  
421 Misdirected Request  
422 Unprocessable Entity  
423 Locked425Too Early  
426 Upgrade Required  
428 Precondition Required  
429 Too Many Requests  
431 Request Header Fields Too Large  
451 Unavailable For Legal Reasons

**Familia de los http 5xx**  
500 Internal Server Error  
501 Not Implemented  
502 Bad Gateway  
503 Service Unavailable  
504 Gateway Timeout  
505 HTTP Version Not Supported  
506 Variant Also Negotiates  
507 Insufficient Storage  
508 Loop Detected  
510 Not Extended  
511 Network Authentication Required  
520 Web Server Returned an Unknown Error  
521 Web Server Is Down  
522 Connection Timed out  
523 Origin Is Unreachable  
524 A Timeout Occurred  
525 SSL Handshake Failed  
526 Invalid SSL Certificate  
527 Railgun Error
