{"id":1727,"date":"2024-10-14T07:49:00","date_gmt":"2024-10-14T10:49:00","guid":{"rendered":"https:\/\/www.erudio.com.br\/blog\/?p=1727"},"modified":"2024-10-18T17:26:47","modified_gmt":"2024-10-18T20:26:47","slug":"guia-pratico-dos-codigos-de-status-http-em-apis-rest","status":"publish","type":"post","link":"https:\/\/www.erudio.com.br\/blog\/guia-pratico-dos-codigos-de-status-http-em-apis-rest\/","title":{"rendered":"Guia Pr\u00e1tico dos Status Codes HTTP em APIs REST"},"content":{"rendered":"\n<h4><strong>Introdu\u00e7\u00e3o<\/strong><\/h4>\n\n\n\n<p>Quando desenvolvemos uma <strong>API REST<\/strong>, um dos aspectos mais cruciais \u00e9 garantir que as respostas enviadas ao cliente sejam claras, consistentes e \u00fateis. Uma maneira de alcan\u00e7ar isso \u00e9 utilizando corretamente os <strong>HTTP status codes<\/strong>. Esses c\u00f3digos s\u00e3o respons\u00e1veis por comunicar o resultado de uma opera\u00e7\u00e3o, e sua correta implementa\u00e7\u00e3o pode facilitar a integra\u00e7\u00e3o de outros sistemas, melhorar a experi\u00eancia dos desenvolvedores e tornar os servi\u00e7os mais robustos e f\u00e1ceis de manter. Utilizar apenas os c\u00f3digos mais comuns, como <em>200 OK<\/em> e <em>500 Internal Server Error<\/em>, n\u00e3o \u00e9 suficiente para garantir a qualidade da API. Um entendimento mais amplo da gama de status dispon\u00edveis, como veremos a seguir, permite uma comunica\u00e7\u00e3o mais precisa e detalhada entre a API e o cliente.<\/p>\n\n\n\n<a href=\"https:\/\/pub.erudio.com.br\/kr\/blog_rest_spring_java\" target=\"_blank\" rel=\"noopener\">\n  <img decoding=\"async\" style=\"max-width: 100%;\" title=\"REST API's RESTFul do 0 \u00e0  AWS com Spring Boot 3, Java e Docker\" src=\"https:\/\/raw.githubusercontent.com\/leandrocgsi\/blog-images\/main\/07-rest-spring-java.png\">\n<\/a>\n\n\n\n<h4><strong>Principais HTTP Status Codes e Suas Aplica\u00e7\u00f5es<\/strong><\/h4>\n\n\n\n<p>Ao trabalhar com <strong>APIs REST<\/strong>, \u00e9 essencial utilizar os <em>HTTP status codes<\/em> adequados para cada cen\u00e1rio, seja em opera\u00e7\u00f5es bem-sucedidas ou em casos de erro. Isso ajuda a padronizar a resposta e facilita a identifica\u00e7\u00e3o e tratamento de erros. Abaixo, veremos os principais <strong><em>status codes<\/em><\/strong> e como eles devem ser usados no desenvolvimento de uma API.<\/p>\n\n\n\n<h3>Classifica\u00e7\u00e3o <strong>dos <em>status codes<\/em><\/strong> HTTP<\/h3>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" width=\"1024\" height=\"497\" src=\"https:\/\/www.erudio.com.br\/blog\/wp-content\/uploads\/2024\/10\/HTTP_StatusCodes_By_Group-1024x497-1.png\" alt=\"HTTP Status Codes\" class=\"wp-image-1741\" title=\"HTTP Status Codes\" srcset=\"https:\/\/www.erudio.com.br\/blog\/wp-content\/uploads\/2024\/10\/HTTP_StatusCodes_By_Group-1024x497-1.png 1024w, https:\/\/www.erudio.com.br\/blog\/wp-content\/uploads\/2024\/10\/HTTP_StatusCodes_By_Group-1024x497-1-300x146.png 300w, https:\/\/www.erudio.com.br\/blog\/wp-content\/uploads\/2024\/10\/HTTP_StatusCodes_By_Group-1024x497-1-768x373.png 768w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">HTTP Status Codes<\/figcaption><\/figure>\n\n\n\n<p>Os <strong><strong><em>status codes<\/em><\/strong> HTTP<\/strong> s\u00e3o divididos em cinco classes, cada uma representando um tipo espec\u00edfico de resposta:<\/p>\n\n\n\n<ol>\n<li><strong>1xx &#8211; Informacional:<\/strong> Indica que a requisi\u00e7\u00e3o foi recebida e o processo est\u00e1 em andamento.<\/li>\n\n\n\n<li><strong>2xx &#8211; Sucesso:<\/strong> A a\u00e7\u00e3o requisitada pelo cliente foi recebida, compreendida e aceita com sucesso.<\/li>\n\n\n\n<li><strong>3xx &#8211; Redirecionamento:<\/strong> A a\u00e7\u00e3o requisitada requer etapas adicionais para ser conclu\u00edda.<\/li>\n\n\n\n<li><strong>4xx &#8211; Erro do Cliente:<\/strong> Indica que o erro ocorreu devido \u00e0 requisi\u00e7\u00e3o enviada pelo cliente.<\/li>\n\n\n\n<li><strong>5xx &#8211; Erro do Servidor:<\/strong> Ocorreu um erro do lado do servidor ao tentar processar a requisi\u00e7\u00e3o.<\/li>\n<\/ol>\n\n\n\n<h3>Status Codes por Grupo<\/h3>\n\n\n\n<h4>1xx &#8211; C\u00f3digos Informacionais<\/h4>\n\n\n\n<p>Os c\u00f3digos da s\u00e9rie <em>1xx<\/em> s\u00e3o utilizados para indicar que a requisi\u00e7\u00e3o foi recebida e est\u00e1 sendo processada. Eles s\u00e3o raramente usados em opera\u00e7\u00f5es convencionais, mas s\u00e3o importantes em cen\u00e1rios onde uma resposta inicial \u00e9 necess\u00e1ria para continuar o processamento.<\/p>\n\n\n\n<ul>\n<li><strong>100 Continue:<\/strong> O servidor recebeu parte da requisi\u00e7\u00e3o e o cliente pode continuar enviando o restante. Usado principalmente em requisi\u00e7\u00f5es grandes onde a valida\u00e7\u00e3o preliminar \u00e9 necess\u00e1ria.<\/li>\n\n\n\n<li><strong>101 Switching Protocols:<\/strong> O servidor concordou em mudar o protocolo de comunica\u00e7\u00e3o conforme requisitado pelo cliente.<\/li>\n<\/ul>\n\n\n\n<h4>2xx &#8211; C\u00f3digos de Sucesso<\/h4>\n\n\n\n<p>Esses s\u00e3o os c\u00f3digos que indicam que a requisi\u00e7\u00e3o foi processada com sucesso. Eles s\u00e3o fundamentais para garantir ao cliente que a a\u00e7\u00e3o foi conclu\u00edda.<\/p>\n\n\n\n<ul>\n<li><strong>200 OK:<\/strong> A requisi\u00e7\u00e3o foi bem-sucedida, seja para retornar dados ou confirmar uma a\u00e7\u00e3o, como uma cria\u00e7\u00e3o ou dele\u00e7\u00e3o de recurso.<\/li>\n\n\n\n<li><strong>201 Created:<\/strong> Utilizado quando um novo recurso \u00e9 criado com sucesso. Muito comum em opera\u00e7\u00f5es de <em>POST<\/em>.<\/li>\n\n\n\n<li><strong>204 No Content:<\/strong> A a\u00e7\u00e3o foi bem-sucedida, mas n\u00e3o h\u00e1 conte\u00fado para retornar. Utilizado em opera\u00e7\u00f5es de dele\u00e7\u00e3o, por exemplo.<\/li>\n<\/ul>\n\n\n\n<a href=\"https:\/\/pub.erudio.com.br\/kr\/blog_rest_spring_kotlin\" target=\"_blank\" rel=\"noopener\">\n  <img decoding=\"async\" style=\"max-width: 100%;\" title=\"REST API's RESTFul do 0 \u00e0 AWS com Spring Boot 3, Kotlin e Docker\" src=\"https:\/\/raw.githubusercontent.com\/leandrocgsi\/blog-images\/main\/18-rest-spring-kotlin.png\">\n<\/a>\n\n\n\n<h4>3xx &#8211; C\u00f3digos de Redirecionamento<\/h4>\n\n\n\n<p>Os c\u00f3digos da s\u00e9rie <em>3xx<\/em> indicam que o cliente deve tomar alguma a\u00e7\u00e3o adicional para completar a requisi\u00e3o, geralmente seguindo um novo local ou URL.<\/p>\n\n\n\n<ul>\n<li><strong>301 Moved Permanently:<\/strong> O recurso requisitado foi movido para uma nova URL permanentemente. O cliente deve usar a nova URL para futuras requisi\u00e7\u00f5es.<\/li>\n\n\n\n<li><strong>302 Found:<\/strong> O recurso foi temporariamente movido para outra URL. Diferente do <em>301<\/em>, esse redirecionamento \u00e9 tempor\u00e1rio.<\/li>\n\n\n\n<li><strong>304 Not Modified:<\/strong> Usado em opera\u00e7\u00f5es de cache. Indica que o conte\u00fado requisitado n\u00e3o foi modificado desde a \u00faltima requisi\u00e7\u00e3o, permitindo ao cliente usar a vers\u00e3o em cache.<\/li>\n<\/ul>\n\n\n\n<h4>4xx &#8211; C\u00f3digos de Erro do Cliente<\/h4>\n\n\n\n<p>A s\u00e9rie <em>4xx<\/em> \u00e9 usada quando a requisi\u00e7\u00e3o enviada pelo cliente \u00e9 inv\u00e1lida ou cont\u00e9m erros. Esses c\u00f3digos ajudam a API a informar ao cliente como ele pode corrigir a requisi\u00e7\u00e3o.<\/p>\n\n\n\n<ul>\n<li><strong>400 Bad Request:<\/strong> Ocorre quando a requisi\u00e7\u00e3o \u00e9 malformada ou cont\u00e9m par\u00e2metros inv\u00e1lidos.<\/li>\n\n\n\n<li><strong>403 Forbidden:<\/strong> O cliente n\u00e3o tem permiss\u00e3o para acessar o recurso requisitado. Mesmo que a autentica\u00e7\u00e3o esteja correta, a a\u00e7\u00e3o n\u00e3o \u00e9 permitida.<\/li>\n\n\n\n<li><strong>404 Not Found:<\/strong> O recurso requisitado n\u00e3o foi encontrado. Isso pode acontecer quando o cliente fornece um <em>path<\/em> inv\u00e1lido ou tenta acessar um recurso inexistente.<\/li>\n\n\n\n<li><strong>405 Method Not Allowed:<\/strong> O m\u00e9todo HTTP usado n\u00e3o \u00e9 permitido para o recurso requisitado. Por exemplo, tentar usar um <em>POST<\/em> em um endpoint que aceita apenas <em>GET<\/em>.<\/li>\n<\/ul>\n\n\n\n<h4>5xx &#8211; C\u00f3digos de Erro do Servidor<\/h4>\n\n\n\n<p>Os c\u00f3digos da s\u00e9rie <em>5xx<\/em> indicam problemas no lado do servidor ao processar a requisi\u00e7\u00e3o. Esses erros n\u00e3o s\u00e3o culpa do cliente, e normalmente indicam falhas tempor\u00e1rias ou problemas de configura\u00e7\u00e3o.<\/p>\n\n\n\n<ul>\n<li><strong>500 Internal Server Error:<\/strong> Um erro gen\u00e9rico que indica que o servidor encontrou uma condi\u00e7\u00e3o inesperada que o impediu de concluir a requisi\u00e7\u00e3o.<\/li>\n\n\n\n<li><strong>502 Bad Gateway:<\/strong> O servidor, atuando como um gateway ou proxy, recebeu uma resposta inv\u00e1lida do servidor upstream.<\/li>\n\n\n\n<li><strong>503 Service Unavailable:<\/strong> O servidor est\u00e1 temporariamente indispon\u00edvel, geralmente devido a manuten\u00e7\u00e3o ou sobrecarga.<\/li>\n\n\n\n<li><strong>504 Gateway Timeout:<\/strong> O servidor, atuando como um gateway ou proxy, n\u00e3o recebeu uma resposta do servidor upstream a tempo.<\/li>\n<\/ul>\n\n\n\n<a href=\"https:\/\/pub.erudio.com.br\/kr\/blog_rest_asp_net\" target=\"_blank\" rel=\"noopener\">\n  <img decoding=\"async\" style=\"max-width: 100%;\" title=\"REST API's RESTFul do 0 \u00e0 Azure com ASP.NET Core 5 e Docker\" src=\"https:\/\/raw.githubusercontent.com\/leandrocgsi\/blog-images\/main\/01-rest-asp.png\">\n<\/a>\n\n\n\n<h4><strong>Por Que Usar os <em>HTTP Status Codes<\/em> Corretos?<\/strong><\/h4>\n\n\n\n<p>Utilizar corretamente os <strong>HTTP status codes<\/strong> vai al\u00e9m de seguir padr\u00f5es de desenvolvimento; trata-se de melhorar a comunica\u00e7\u00e3o entre a API e o cliente, tornando-a mais clara e eficiente. Ao indicar o status exato de cada opera\u00e7\u00e3o, os desenvolvedores clientes conseguem entender rapidamente o que aconteceu e tomar as medidas apropriadas, como corrigir erros ou interpretar corretamente os resultados das requests. Al\u00e9m disso, boas pr\u00e1ticas em resposta HTTP facilitam o debug e integra\u00e7\u00e3o com outros sistemas, tornando o desenvolvimento mais \u00e1gil e previs\u00edvel.<\/p>\n\n\n\n<h4><strong>Conclus\u00e3o<\/strong><\/h4>\n\n\n\n<p>A correta utiliza\u00e7\u00e3o dos <strong>HTTP status codes<\/strong> em <strong>APIs REST<\/strong> \u00e9 essencial para garantir que os servi\u00e7os sejam f\u00e1ceis de usar, robustos e eficientes. Ao adotar uma ampla gama de <strong><em>status codes<\/em><\/strong>, voc\u00ea pode fornecer feedback preciso sobre o que est\u00e1 acontecendo dentro de sua API, seja durante o sucesso de uma opera\u00e7\u00e3o ou ao lidar com erros. Isso n\u00e3o s\u00f3 ajuda a melhorar a experi\u00eancia do cliente, mas tamb\u00e9m reduz o tempo gasto na solu\u00e7\u00e3o de problemas e aumenta a qualidade geral da API. Em posts futuros, exploraremos como criar um <strong>endpoint REST<\/strong> utilizando <strong>Spring Boot<\/strong>, al\u00e9m de documentar <strong>APIs RESTful<\/strong> com <strong>Swagger<\/strong>, proporcionando exemplos pr\u00e1ticos dessas implementa\u00e7\u00f5es.<\/p>\n\n\n\n<h2>Treinamentos relacionados com essa postagem<\/h2>\n\n<a href=\"https:\/\/pub.erudio.com.br\/kr\/blog_rest_spring_java\" target=\"_blank\" rel=\"noopener\">\n  <img decoding=\"async\" style=\"max-width: 100%;\" title=\"REST API's RESTFul do 0 \u00e0  AWS com Spring Boot 3, Java e Docker\" src=\"https:\/\/raw.githubusercontent.com\/leandrocgsi\/blog-images\/main\/07-rest-spring-java.png\">\n<\/a>\n<a href=\"https:\/\/pub.erudio.com.br\/kr\/blog_tests_java\" target=\"_blank\" rel=\"noopener\">\n  <img decoding=\"async\" style=\"max-width: 100%;\" title=\"Java Unit Testing com Spring Boot 3, TDD, Junit 5 e Mockito\" src=\"https:\/\/raw.githubusercontent.com\/leandrocgsi\/blog-images\/main\/24-tests_java.png\">\n<\/a>\n<a href=\"https:\/\/pub.erudio.com.br\/kr\/blog_ci_cd_java_aws\" target=\"_blank\" rel=\"noopener\">\n  <img decoding=\"async\" style=\"max-width: 100%;\" title=\"Java Continuous Integration e Continuous Delivery com AWS e Github Actions\" src=\"https:\/\/raw.githubusercontent.com\/leandrocgsi\/blog-images\/main\/27_CICD_JavaAWS.png\">\n<\/a>\n<a href=\"https:\/\/pub.erudio.com.br\/kr\/blog_ci_cd_java_azure\" target=\"_blank\" rel=\"noopener\">\n  <img decoding=\"async\" style=\"max-width: 100%;\" title=\"Java Continuous Integration e Continuous Delivery com Microsoft Azure e Github Actions\" src=\"https:\/\/raw.githubusercontent.com\/leandrocgsi\/blog-images\/main\/28_CICD_JavaAzure.png\">\n<\/a>\n<a href=\"https:\/\/pub.erudio.com.br\/kr\/blog_rest_asp_net\" target=\"_blank\" rel=\"noopener\">\n  <img decoding=\"async\" style=\"max-width: 100%;\" title=\"REST API's RESTFul do 0 \u00e0 Azure com ASP.NET Core 5 e Docker\" src=\"https:\/\/raw.githubusercontent.com\/leandrocgsi\/blog-images\/main\/01-rest-asp.png\">\n<\/a>\n<a href=\"https:\/\/pub.erudio.com.br\/kr\/blog_rest_spring_kotlin\" target=\"_blank\" rel=\"noopener\">\n  <img decoding=\"async\" style=\"max-width: 100%;\" title=\"REST API's RESTFul do 0 \u00e0 AWS com Spring Boot 3, Kotlin e Docker\" src=\"https:\/\/raw.githubusercontent.com\/leandrocgsi\/blog-images\/main\/18-rest-spring-kotlin.png\">\n<\/a>\n<a href=\"https:\/\/pub.erudio.com.br\/kr\/blog_microservices_java\" target=\"_blank\" rel=\"noopener\">\n  <img decoding=\"async\" style=\"max-width: 100%;\" title=\"Microservices do 0 com Spring Cloud, Spring Boot e Docker\" src=\"https:\/\/raw.githubusercontent.com\/leandrocgsi\/blog-images\/main\/14-microservices-java.png\">\n<\/a>\n<a href=\"https:\/\/pub.erudio.com.br\/kr\/blog_microservices-dotnet\" target=\"_blank\" rel=\"noopener\" class=\"broken_link\">\n  <img decoding=\"async\" style=\"max-width: 100%;\" title=\"Arquitetura de Microsservi\u00e7os do 0 com ASP.NET, .NET 6 e C#\" src=\"https:\/\/raw.githubusercontent.com\/leandrocgsi\/blog-images\/main\/15-microservices-dotnet.png\">\n<\/a>\n<a href=\"https:\/\/pub.erudio.com.br\/kr\/blog_ms_kotlin\" target=\"_blank\" rel=\"noopener\">\n  <img decoding=\"async\" style=\"max-width: 100%;\" title=\"Microsservi\u00e7os do 0 com Spring Cloud, Kotlin e Docker\" src=\"https:\/\/raw.githubusercontent.com\/leandrocgsi\/blog-images\/main\/22-ms-kotlin.png\">\n<\/a>\n","protected":false},"excerpt":{"rendered":"<p>Introdu\u00e7\u00e3o Quando desenvolvemos uma API REST, um dos aspectos mais cruciais \u00e9 garantir que as respostas enviadas ao cliente sejam claras, consistentes e \u00fateis. Uma maneira de alcan\u00e7ar isso \u00e9 utilizando corretamente os HTTP status codes. Esses c\u00f3digos s\u00e3o respons\u00e1veis por comunicar o resultado de uma opera\u00e7\u00e3o, e sua correta implementa\u00e7\u00e3o pode facilitar a integra\u00e7\u00e3o [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":1732,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[11,305,311,40,315,96,314],"tags":[132,309,317,221,316,313],"_links":{"self":[{"href":"https:\/\/www.erudio.com.br\/blog\/wp-json\/wp\/v2\/posts\/1727"}],"collection":[{"href":"https:\/\/www.erudio.com.br\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.erudio.com.br\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.erudio.com.br\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.erudio.com.br\/blog\/wp-json\/wp\/v2\/comments?post=1727"}],"version-history":[{"count":11,"href":"https:\/\/www.erudio.com.br\/blog\/wp-json\/wp\/v2\/posts\/1727\/revisions"}],"predecessor-version":[{"id":1746,"href":"https:\/\/www.erudio.com.br\/blog\/wp-json\/wp\/v2\/posts\/1727\/revisions\/1746"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.erudio.com.br\/blog\/wp-json\/wp\/v2\/media\/1732"}],"wp:attachment":[{"href":"https:\/\/www.erudio.com.br\/blog\/wp-json\/wp\/v2\/media?parent=1727"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.erudio.com.br\/blog\/wp-json\/wp\/v2\/categories?post=1727"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.erudio.com.br\/blog\/wp-json\/wp\/v2\/tags?post=1727"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}