{"id":1406,"date":"2026-05-27T19:09:09","date_gmt":"2026-05-27T22:09:09","guid":{"rendered":"https:\/\/micheladrianomedeiros.com.br\/blog\/?p=1406"},"modified":"2026-05-27T19:09:09","modified_gmt":"2026-05-27T22:09:09","slug":"rest-apis-e-web-services-entenda-rest-vs-restful-e-como-uma-api-restful-funciona-na-pratica","status":"publish","type":"post","link":"https:\/\/micheladrianomedeiros.com.br\/blog\/rest-apis-e-web-services-entenda-rest-vs-restful-e-como-uma-api-restful-funciona-na-pratica\/","title":{"rendered":"REST, APIs e Web Services: Entenda REST vs RESTful e Como uma API RESTful Funciona na Pr\u00e1tica"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">A internet moderna funciona gra\u00e7as \u00e0 comunica\u00e7\u00e3o entre sistemas. Quando voc\u00ea abre um aplicativo de banco, faz login em uma rede social, consulta a previs\u00e3o do tempo ou compra algo online, existe uma troca constante de informa\u00e7\u00f5es acontecendo nos bastidores. Essa comunica\u00e7\u00e3o \u00e9 poss\u00edvel gra\u00e7as a conceitos como APIs, Web Services e arquiteturas RESTful.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Embora esses termos apare\u00e7am frequentemente no universo do desenvolvimento de software, muitas pessoas ainda t\u00eam d\u00favidas sobre o que realmente significam. Afinal:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>O que \u00e9 REST?<\/li>\n\n\n\n<li>Qual a diferen\u00e7a entre API e Web Service?<\/li>\n\n\n\n<li>REST e RESTful s\u00e3o a mesma coisa?<\/li>\n\n\n\n<li>Como uma API RESTful funciona na pr\u00e1tica?<\/li>\n\n\n\n<li>Por que REST se tornou o padr\u00e3o dominante na web moderna?<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Neste artigo completo, vamos explorar esses conceitos em profundidade, desde os fundamentos at\u00e9 exemplos pr\u00e1ticos utilizados no mercado atualmente.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_84 counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Table of Contents<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/rest-apis-e-web-services-entenda-rest-vs-restful-e-como-uma-api-restful-funciona-na-pratica\/#O_que_e_REST\" >O que \u00e9 REST?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/rest-apis-e-web-services-entenda-rest-vs-restful-e-como-uma-api-restful-funciona-na-pratica\/#O_Conceito_de_Recursos\" >O Conceito de Recursos<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/rest-apis-e-web-services-entenda-rest-vs-restful-e-como-uma-api-restful-funciona-na-pratica\/#REST_Usa_o_Protocolo_HTTP\" >REST Usa o Protocolo HTTP<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/rest-apis-e-web-services-entenda-rest-vs-restful-e-como-uma-api-restful-funciona-na-pratica\/#Exemplo_Simples_de_API_REST\" >Exemplo Simples de API REST<\/a><ul class='ez-toc-list-level-2' ><li class='ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/rest-apis-e-web-services-entenda-rest-vs-restful-e-como-uma-api-restful-funciona-na-pratica\/#Buscar_todos_os_usuarios\" >Buscar todos os usu\u00e1rios<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/rest-apis-e-web-services-entenda-rest-vs-restful-e-como-uma-api-restful-funciona-na-pratica\/#Buscar_um_usuario_especifico\" >Buscar um usu\u00e1rio espec\u00edfico<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/rest-apis-e-web-services-entenda-rest-vs-restful-e-como-uma-api-restful-funciona-na-pratica\/#Criar_um_novo_usuario\" >Criar um novo usu\u00e1rio<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/rest-apis-e-web-services-entenda-rest-vs-restful-e-como-uma-api-restful-funciona-na-pratica\/#Atualizar_usuario\" >Atualizar usu\u00e1rio<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/rest-apis-e-web-services-entenda-rest-vs-restful-e-como-uma-api-restful-funciona-na-pratica\/#Remover_usuario\" >Remover usu\u00e1rio<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/rest-apis-e-web-services-entenda-rest-vs-restful-e-como-uma-api-restful-funciona-na-pratica\/#Os_Principios_do_REST\" >Os Princ\u00edpios do REST<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/rest-apis-e-web-services-entenda-rest-vs-restful-e-como-uma-api-restful-funciona-na-pratica\/#1_Client-Server\" >1. Client-Server<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-12\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/rest-apis-e-web-services-entenda-rest-vs-restful-e-como-uma-api-restful-funciona-na-pratica\/#2_Stateless\" >2. Stateless<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-13\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/rest-apis-e-web-services-entenda-rest-vs-restful-e-como-uma-api-restful-funciona-na-pratica\/#3_Cacheable\" >3. Cacheable<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-14\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/rest-apis-e-web-services-entenda-rest-vs-restful-e-como-uma-api-restful-funciona-na-pratica\/#4_Uniform_Interface\" >4. Uniform Interface<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-15\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/rest-apis-e-web-services-entenda-rest-vs-restful-e-como-uma-api-restful-funciona-na-pratica\/#5_Layered_System\" >5. Layered System<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-16\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/rest-apis-e-web-services-entenda-rest-vs-restful-e-como-uma-api-restful-funciona-na-pratica\/#API_vs_Web_Service\" >API vs Web Service<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-17\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/rest-apis-e-web-services-entenda-rest-vs-restful-e-como-uma-api-restful-funciona-na-pratica\/#O_Que_e_uma_API\" >O Que \u00e9 uma API?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-18\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/rest-apis-e-web-services-entenda-rest-vs-restful-e-como-uma-api-restful-funciona-na-pratica\/#Exemplos_de_APIs\" >Exemplos de APIs<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-19\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/rest-apis-e-web-services-entenda-rest-vs-restful-e-como-uma-api-restful-funciona-na-pratica\/#O_Que_e_um_Web_Service\" >O Que \u00e9 um Web Service?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-20\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/rest-apis-e-web-services-entenda-rest-vs-restful-e-como-uma-api-restful-funciona-na-pratica\/#Toda_API_e_um_Web_Service\" >Toda API \u00e9 um Web Service?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-21\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/rest-apis-e-web-services-entenda-rest-vs-restful-e-como-uma-api-restful-funciona-na-pratica\/#Todo_Web_Service_e_uma_API\" >Todo Web Service \u00e9 uma API?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-22\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/rest-apis-e-web-services-entenda-rest-vs-restful-e-como-uma-api-restful-funciona-na-pratica\/#Diferenca_Visual\" >Diferen\u00e7a Visual<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-23\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/rest-apis-e-web-services-entenda-rest-vs-restful-e-como-uma-api-restful-funciona-na-pratica\/#SOAP_vs_REST\" >SOAP vs REST<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-24\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/rest-apis-e-web-services-entenda-rest-vs-restful-e-como-uma-api-restful-funciona-na-pratica\/#Caracteristicas_do_SOAP\" >Caracter\u00edsticas do SOAP<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-25\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/rest-apis-e-web-services-entenda-rest-vs-restful-e-como-uma-api-restful-funciona-na-pratica\/#Exemplo_SOAP\" >Exemplo SOAP<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-26\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/rest-apis-e-web-services-entenda-rest-vs-restful-e-como-uma-api-restful-funciona-na-pratica\/#Problemas_do_SOAP\" >Problemas do SOAP<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-27\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/rest-apis-e-web-services-entenda-rest-vs-restful-e-como-uma-api-restful-funciona-na-pratica\/#REST_Revolucionou_as_APIs\" >REST Revolucionou as APIs<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-28\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/rest-apis-e-web-services-entenda-rest-vs-restful-e-como-uma-api-restful-funciona-na-pratica\/#REST_vs_RESTful\" >REST vs RESTful<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-29\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/rest-apis-e-web-services-entenda-rest-vs-restful-e-como-uma-api-restful-funciona-na-pratica\/#REST\" >REST<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-30\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/rest-apis-e-web-services-entenda-rest-vs-restful-e-como-uma-api-restful-funciona-na-pratica\/#RESTful\" >RESTful<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-31\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/rest-apis-e-web-services-entenda-rest-vs-restful-e-como-uma-api-restful-funciona-na-pratica\/#Exemplo\" >Exemplo<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-32\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/rest-apis-e-web-services-entenda-rest-vs-restful-e-como-uma-api-restful-funciona-na-pratica\/#Nem_Toda_API_e_RESTful\" >Nem Toda API \u00e9 RESTful<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-33\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/rest-apis-e-web-services-entenda-rest-vs-restful-e-como-uma-api-restful-funciona-na-pratica\/#Exemplo_Correto\" >Exemplo Correto<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-34\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/rest-apis-e-web-services-entenda-rest-vs-restful-e-como-uma-api-restful-funciona-na-pratica\/#Como_Funciona_uma_API_RESTful\" >Como Funciona uma API RESTful<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-35\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/rest-apis-e-web-services-entenda-rest-vs-restful-e-como-uma-api-restful-funciona-na-pratica\/#Passo_1_%E2%80%94_Cliente_Faz_Requisicao\" >Passo 1 \u2014 Cliente Faz Requisi\u00e7\u00e3o<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-36\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/rest-apis-e-web-services-entenda-rest-vs-restful-e-como-uma-api-restful-funciona-na-pratica\/#Passo_2_%E2%80%94_Servidor_Recebe\" >Passo 2 \u2014 Servidor Recebe<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-37\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/rest-apis-e-web-services-entenda-rest-vs-restful-e-como-uma-api-restful-funciona-na-pratica\/#Passo_3_%E2%80%94_Banco_de_Dados\" >Passo 3 \u2014 Banco de Dados<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-38\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/rest-apis-e-web-services-entenda-rest-vs-restful-e-como-uma-api-restful-funciona-na-pratica\/#Passo_4_%E2%80%94_Resposta_JSON\" >Passo 4 \u2014 Resposta JSON<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-39\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/rest-apis-e-web-services-entenda-rest-vs-restful-e-como-uma-api-restful-funciona-na-pratica\/#JSON_O_Formato_Mais_Usado\" >JSON: O Formato Mais Usado<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-40\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/rest-apis-e-web-services-entenda-rest-vs-restful-e-como-uma-api-restful-funciona-na-pratica\/#Exemplo_JSON\" >Exemplo JSON<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-41\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/rest-apis-e-web-services-entenda-rest-vs-restful-e-como-uma-api-restful-funciona-na-pratica\/#Codigos_HTTP_Importantes\" >C\u00f3digos HTTP Importantes<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-42\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/rest-apis-e-web-services-entenda-rest-vs-restful-e-como-uma-api-restful-funciona-na-pratica\/#200_OK\" >200 OK<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-43\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/rest-apis-e-web-services-entenda-rest-vs-restful-e-como-uma-api-restful-funciona-na-pratica\/#201_Created\" >201 Created<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-44\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/rest-apis-e-web-services-entenda-rest-vs-restful-e-como-uma-api-restful-funciona-na-pratica\/#400_Bad_Request\" >400 Bad Request<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-45\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/rest-apis-e-web-services-entenda-rest-vs-restful-e-como-uma-api-restful-funciona-na-pratica\/#401_Unauthorized\" >401 Unauthorized<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-46\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/rest-apis-e-web-services-entenda-rest-vs-restful-e-como-uma-api-restful-funciona-na-pratica\/#403_Forbidden\" >403 Forbidden<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-47\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/rest-apis-e-web-services-entenda-rest-vs-restful-e-como-uma-api-restful-funciona-na-pratica\/#404_Not_Found\" >404 Not Found<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-48\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/rest-apis-e-web-services-entenda-rest-vs-restful-e-como-uma-api-restful-funciona-na-pratica\/#500_Internal_Server_Error\" >500 Internal Server Error<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-49\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/rest-apis-e-web-services-entenda-rest-vs-restful-e-como-uma-api-restful-funciona-na-pratica\/#Versionamento_de_APIs\" >Versionamento de APIs<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-50\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/rest-apis-e-web-services-entenda-rest-vs-restful-e-como-uma-api-restful-funciona-na-pratica\/#Autenticacao_em_APIs_RESTful\" >Autentica\u00e7\u00e3o em APIs RESTful<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-51\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/rest-apis-e-web-services-entenda-rest-vs-restful-e-como-uma-api-restful-funciona-na-pratica\/#Exemplo_Bearer_Token\" >Exemplo Bearer Token<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-52\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/rest-apis-e-web-services-entenda-rest-vs-restful-e-como-uma-api-restful-funciona-na-pratica\/#O_Papel_do_JWT\" >O Papel do JWT<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-53\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/rest-apis-e-web-services-entenda-rest-vs-restful-e-como-uma-api-restful-funciona-na-pratica\/#REST_e_Microservicos\" >REST e Microservi\u00e7os<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-54\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/rest-apis-e-web-services-entenda-rest-vs-restful-e-como-uma-api-restful-funciona-na-pratica\/#REST_e_Frontend_Moderno\" >REST e Frontend Moderno<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-55\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/rest-apis-e-web-services-entenda-rest-vs-restful-e-como-uma-api-restful-funciona-na-pratica\/#REST_no_Mundo_Mobile\" >REST no Mundo Mobile<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-56\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/rest-apis-e-web-services-entenda-rest-vs-restful-e-como-uma-api-restful-funciona-na-pratica\/#Boas_Praticas_RESTful\" >Boas Pr\u00e1ticas RESTful<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-57\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/rest-apis-e-web-services-entenda-rest-vs-restful-e-como-uma-api-restful-funciona-na-pratica\/#1_Use_Substantivos_nas_URLs\" >1. Use Substantivos nas URLs<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-58\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/rest-apis-e-web-services-entenda-rest-vs-restful-e-como-uma-api-restful-funciona-na-pratica\/#2_Use_Metodos_HTTP_Corretamente\" >2. Use M\u00e9todos HTTP Corretamente<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-59\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/rest-apis-e-web-services-entenda-rest-vs-restful-e-como-uma-api-restful-funciona-na-pratica\/#3_Use_JSON_Padronizado\" >3. Use JSON Padronizado<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-60\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/rest-apis-e-web-services-entenda-rest-vs-restful-e-como-uma-api-restful-funciona-na-pratica\/#4_Utilize_Status_HTTP_Adequados\" >4. Utilize Status HTTP Adequados<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-61\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/rest-apis-e-web-services-entenda-rest-vs-restful-e-como-uma-api-restful-funciona-na-pratica\/#5_Evite_URLs_Confusas\" >5. Evite URLs Confusas<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-62\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/rest-apis-e-web-services-entenda-rest-vs-restful-e-como-uma-api-restful-funciona-na-pratica\/#REST_na_Pratica_com_Java_Spring_Boot\" >REST na Pr\u00e1tica com Java Spring Boot<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-63\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/rest-apis-e-web-services-entenda-rest-vs-restful-e-como-uma-api-restful-funciona-na-pratica\/#REST_com_Nodejs\" >REST com Node.js<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-64\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/rest-apis-e-web-services-entenda-rest-vs-restful-e-como-uma-api-restful-funciona-na-pratica\/#REST_com_PHP\" >REST com PHP<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-65\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/rest-apis-e-web-services-entenda-rest-vs-restful-e-como-uma-api-restful-funciona-na-pratica\/#REST_com_Python_Flask\" >REST com Python Flask<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-66\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/rest-apis-e-web-services-entenda-rest-vs-restful-e-como-uma-api-restful-funciona-na-pratica\/#REST_e_Escalabilidade\" >REST e Escalabilidade<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-67\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/rest-apis-e-web-services-entenda-rest-vs-restful-e-como-uma-api-restful-funciona-na-pratica\/#REST_e_Cloud_Computing\" >REST e Cloud Computing<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-68\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/rest-apis-e-web-services-entenda-rest-vs-restful-e-como-uma-api-restful-funciona-na-pratica\/#REST_e_DevOps\" >REST e DevOps<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-69\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/rest-apis-e-web-services-entenda-rest-vs-restful-e-como-uma-api-restful-funciona-na-pratica\/#Limitacoes_do_REST\" >Limita\u00e7\u00f5es do REST<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-70\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/rest-apis-e-web-services-entenda-rest-vs-restful-e-como-uma-api-restful-funciona-na-pratica\/#O_Surgimento_do_GraphQL\" >O Surgimento do GraphQL<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-71\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/rest-apis-e-web-services-entenda-rest-vs-restful-e-como-uma-api-restful-funciona-na-pratica\/#REST_Continua_Muito_Forte\" >REST Continua Muito Forte<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-72\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/rest-apis-e-web-services-entenda-rest-vs-restful-e-como-uma-api-restful-funciona-na-pratica\/#Quando_Usar_REST\" >Quando Usar REST<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-73\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/rest-apis-e-web-services-entenda-rest-vs-restful-e-como-uma-api-restful-funciona-na-pratica\/#Quando_SOAP_Ainda_Faz_Sentido\" >Quando SOAP Ainda Faz Sentido<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-74\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/rest-apis-e-web-services-entenda-rest-vs-restful-e-como-uma-api-restful-funciona-na-pratica\/#O_Futuro_das_APIs\" >O Futuro das APIs<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-75\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/rest-apis-e-web-services-entenda-rest-vs-restful-e-como-uma-api-restful-funciona-na-pratica\/#Conclusao\" >Conclus\u00e3o<\/a><\/li><\/ul><\/nav><\/div>\n<h1 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"O_que_e_REST\"><\/span>O que \u00e9 REST?<span class=\"ez-toc-section-end\"><\/span><\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">REST \u00e9 a sigla para <strong>Representational State Transfer<\/strong>. O termo foi criado por Roy Fielding em sua tese de doutorado no ano 2000. REST n\u00e3o \u00e9 uma linguagem, protocolo ou framework. Na verdade, REST \u00e9 um <strong>estilo arquitetural<\/strong> para sistemas distribu\u00eddos.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Isso significa que REST define um conjunto de princ\u00edpios e restri\u00e7\u00f5es que ajudam a construir sistemas web escal\u00e1veis, simples e eficientes.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A ideia principal do REST \u00e9 tratar tudo como um recurso acess\u00edvel atrav\u00e9s de URLs.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Por exemplo:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>https:&#47;&#47;api.site.com\/usuarios\nhttps:\/\/api.site.com\/produtos\nhttps:\/\/api.site.com\/pedidos\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Cada URL representa um recurso diferente do sistema.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"O_Conceito_de_Recursos\"><\/span>O Conceito de Recursos<span class=\"ez-toc-section-end\"><\/span><\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">No REST, praticamente tudo pode ser considerado um recurso:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Usu\u00e1rios<\/li>\n\n\n\n<li>Produtos<\/li>\n\n\n\n<li>Pedidos<\/li>\n\n\n\n<li>Coment\u00e1rios<\/li>\n\n\n\n<li>Arquivos<\/li>\n\n\n\n<li>Fotos<\/li>\n\n\n\n<li>V\u00eddeos<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Cada recurso possui uma identifica\u00e7\u00e3o \u00fanica, normalmente uma URL.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Exemplo:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>GET \/usuarios\/10\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Essa requisi\u00e7\u00e3o busca o usu\u00e1rio de ID 10.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Outro exemplo:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>GET \/produtos\/50\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Aqui o sistema retorna o produto de ID 50.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"REST_Usa_o_Protocolo_HTTP\"><\/span>REST Usa o Protocolo HTTP<span class=\"ez-toc-section-end\"><\/span><\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">REST funciona sobre o protocolo HTTP, o mesmo utilizado pelos navegadores na internet.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">As opera\u00e7\u00f5es s\u00e3o realizadas utilizando m\u00e9todos HTTP padronizados.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Os principais s\u00e3o:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>M\u00e9todo<\/th><th>Fun\u00e7\u00e3o<\/th><\/tr><\/thead><tbody><tr><td>GET<\/td><td>Buscar dados<\/td><\/tr><tr><td>POST<\/td><td>Criar dados<\/td><\/tr><tr><td>PUT<\/td><td>Atualizar dados<\/td><\/tr><tr><td>PATCH<\/td><td>Atualiza\u00e7\u00e3o parcial<\/td><\/tr><tr><td>DELETE<\/td><td>Remover dados<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Exemplo_Simples_de_API_REST\"><\/span>Exemplo Simples de API REST<span class=\"ez-toc-section-end\"><\/span><\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Imagine uma API de usu\u00e1rios.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Buscar_todos_os_usuarios\"><\/span>Buscar todos os usu\u00e1rios<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>GET \/usuarios\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Resposta:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;\n  {\n    \"id\": 1,\n    \"nome\": \"Carlos\"\n  },\n  {\n    \"id\": 2,\n    \"nome\": \"Ana\"\n  }\n]\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Buscar_um_usuario_especifico\"><\/span>Buscar um usu\u00e1rio espec\u00edfico<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>GET \/usuarios\/1\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Resposta:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>{\n  \"id\": 1,\n  \"nome\": \"Carlos\"\n}\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Criar_um_novo_usuario\"><\/span>Criar um novo usu\u00e1rio<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>POST \/usuarios\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Body:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>{\n  \"nome\": \"Marcos\"\n}\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Atualizar_usuario\"><\/span>Atualizar usu\u00e1rio<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>PUT \/usuarios\/1\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Body:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>{\n  \"nome\": \"Carlos Silva\"\n}\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Remover_usuario\"><\/span>Remover usu\u00e1rio<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>DELETE \/usuarios\/1\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Os_Principios_do_REST\"><\/span>Os Princ\u00edpios do REST<span class=\"ez-toc-section-end\"><\/span><\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">REST possui algumas restri\u00e7\u00f5es importantes.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Essas restri\u00e7\u00f5es ajudam a manter o sistema organizado e escal\u00e1vel.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"1_Client-Server\"><\/span>1. Client-Server<span class=\"ez-toc-section-end\"><\/span><\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">O cliente e o servidor devem ser independentes.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Exemplo:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Frontend React<\/li>\n\n\n\n<li>Backend Java<\/li>\n\n\n\n<li>Mobile Android<\/li>\n\n\n\n<li>Banco de dados PostgreSQL<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Cada parte evolui separadamente.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Isso melhora manuten\u00e7\u00e3o e escalabilidade.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"2_Stateless\"><\/span>2. Stateless<span class=\"ez-toc-section-end\"><\/span><\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Cada requisi\u00e7\u00e3o deve conter todas as informa\u00e7\u00f5es necess\u00e1rias.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">O servidor n\u00e3o deve armazenar estado da sess\u00e3o entre requisi\u00e7\u00f5es.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Exemplo:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Authorization: Bearer TOKEN\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">O token vai em toda requisi\u00e7\u00e3o.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">O servidor n\u00e3o precisa lembrar do cliente.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"3_Cacheable\"><\/span>3. Cacheable<span class=\"ez-toc-section-end\"><\/span><\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">As respostas podem ser cacheadas.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Isso reduz processamento e melhora desempenho.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Exemplo:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Cache-Control: max-age=3600\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"4_Uniform_Interface\"><\/span>4. Uniform Interface<span class=\"ez-toc-section-end\"><\/span><\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">A interface deve ser padronizada.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Isso significa:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>URLs consistentes<\/li>\n\n\n\n<li>M\u00e9todos HTTP corretos<\/li>\n\n\n\n<li>Estrutura previs\u00edvel<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Exemplo ruim:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/getAllUsers\n\/createUser\n\/deleteUser\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Exemplo REST:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>GET \/usuarios\nPOST \/usuarios\nDELETE \/usuarios\/1\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"5_Layered_System\"><\/span>5. Layered System<span class=\"ez-toc-section-end\"><\/span><\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">O cliente n\u00e3o precisa saber quantas camadas existem entre ele e o servidor.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Podem existir:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Load balancers<\/li>\n\n\n\n<li>Gateways<\/li>\n\n\n\n<li>Firewalls<\/li>\n\n\n\n<li>Microservi\u00e7os<\/li>\n\n\n\n<li>Cache reverso<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Tudo permanece transparente para o cliente.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"API_vs_Web_Service\"><\/span>API vs Web Service<span class=\"ez-toc-section-end\"><\/span><\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Uma das maiores confus\u00f5es no mundo do desenvolvimento \u00e9 a diferen\u00e7a entre API e Web Service.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Vamos esclarecer isso.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"O_Que_e_uma_API\"><\/span>O Que \u00e9 uma API?<span class=\"ez-toc-section-end\"><\/span><\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">API significa:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Application Programming Interface<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Uma API \u00e9 uma interface que permite comunica\u00e7\u00e3o entre sistemas.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ela define:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Como solicitar dados<\/li>\n\n\n\n<li>Como enviar dados<\/li>\n\n\n\n<li>Quais opera\u00e7\u00f5es s\u00e3o permitidas<\/li>\n\n\n\n<li>Como o sistema responde<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">APIs existem h\u00e1 d\u00e9cadas.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Nem toda API usa internet.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Exemplos_de_APIs\"><\/span>Exemplos de APIs<span class=\"ez-toc-section-end\"><\/span><\/h1>\n\n\n\n<ul class=\"wp-block-list\">\n<li>API do sistema operacional<\/li>\n\n\n\n<li>API do Java<\/li>\n\n\n\n<li>API do Windows<\/li>\n\n\n\n<li>API do navegador<\/li>\n\n\n\n<li>API REST<\/li>\n\n\n\n<li>API GraphQL<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"O_Que_e_um_Web_Service\"><\/span>O Que \u00e9 um Web Service?<span class=\"ez-toc-section-end\"><\/span><\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Web Service \u00e9 um tipo espec\u00edfico de API.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ele funciona pela web usando protocolos como:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>HTTP<\/li>\n\n\n\n<li>HTTPS<\/li>\n\n\n\n<li>SOAP<\/li>\n\n\n\n<li>REST<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Web Services normalmente permitem comunica\u00e7\u00e3o entre sistemas remotos.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Toda_API_e_um_Web_Service\"><\/span>Toda API \u00e9 um Web Service?<span class=\"ez-toc-section-end\"><\/span><\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">N\u00e3o.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Exemplo:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Uma biblioteca Java possui APIs locais.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Isso n\u00e3o \u00e9 um Web Service.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Todo_Web_Service_e_uma_API\"><\/span>Todo Web Service \u00e9 uma API?<span class=\"ez-toc-section-end\"><\/span><\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Sim.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Porque ele exp\u00f5e funcionalidades para integra\u00e7\u00e3o.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Diferenca_Visual\"><\/span>Diferen\u00e7a Visual<span class=\"ez-toc-section-end\"><\/span><\/h1>\n\n\n\n<pre class=\"wp-block-code\"><code>API\n\u251c\u2500\u2500 API local\n\u251c\u2500\u2500 API de biblioteca\n\u251c\u2500\u2500 API do sistema\n\u2514\u2500\u2500 Web Services\n    \u251c\u2500\u2500 SOAP\n    \u2514\u2500\u2500 REST\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"SOAP_vs_REST\"><\/span>SOAP vs REST<span class=\"ez-toc-section-end\"><\/span><\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Antes do REST dominar a internet, SOAP era muito popular.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">SOAP significa:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Simple Object Access Protocol<\/strong><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Caracteristicas_do_SOAP\"><\/span>Caracter\u00edsticas do SOAP<span class=\"ez-toc-section-end\"><\/span><\/h1>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Baseado em XML<\/li>\n\n\n\n<li>Mais r\u00edgido<\/li>\n\n\n\n<li>Possui contratos formais<\/li>\n\n\n\n<li>Alto n\u00edvel de padroniza\u00e7\u00e3o<\/li>\n\n\n\n<li>Seguran\u00e7a corporativa forte<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Exemplo_SOAP\"><\/span>Exemplo SOAP<span class=\"ez-toc-section-end\"><\/span><\/h1>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;soap:Envelope&gt;\n   &lt;soap:Body&gt;\n      &lt;GetUser&gt;\n         &lt;Id&gt;10&lt;\/Id&gt;\n      &lt;\/GetUser&gt;\n   &lt;\/soap:Body&gt;\n&lt;\/soap:Envelope&gt;\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Problemas_do_SOAP\"><\/span>Problemas do SOAP<span class=\"ez-toc-section-end\"><\/span><\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">SOAP ficou conhecido por ser:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Verboso<\/li>\n\n\n\n<li>Complexo<\/li>\n\n\n\n<li>Pesado<\/li>\n\n\n\n<li>Dif\u00edcil de manter<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"REST_Revolucionou_as_APIs\"><\/span>REST Revolucionou as APIs<span class=\"ez-toc-section-end\"><\/span><\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">REST trouxe:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Simplicidade<\/li>\n\n\n\n<li>Leveza<\/li>\n\n\n\n<li>URLs intuitivas<\/li>\n\n\n\n<li>JSON<\/li>\n\n\n\n<li>Facilidade de integra\u00e7\u00e3o<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Isso acelerou o crescimento:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Mobile<\/li>\n\n\n\n<li>SPA<\/li>\n\n\n\n<li>Cloud<\/li>\n\n\n\n<li>Microservi\u00e7os<\/li>\n\n\n\n<li>Aplica\u00e7\u00f5es web modernas<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"REST_vs_RESTful\"><\/span>REST vs RESTful<span class=\"ez-toc-section-end\"><\/span><\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Muita gente usa os termos como sin\u00f4nimos.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Mas existe diferen\u00e7a.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"REST\"><\/span>REST<span class=\"ez-toc-section-end\"><\/span><\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">REST \u00e9 o modelo arquitetural.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u00c9 o conjunto de regras e princ\u00edpios.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"RESTful\"><\/span>RESTful<span class=\"ez-toc-section-end\"><\/span><\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">RESTful \u00e9 a implementa\u00e7\u00e3o pr\u00e1tica.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Uma API RESTful \u00e9 uma API que segue os princ\u00edpios REST.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Exemplo\"><\/span>Exemplo<span class=\"ez-toc-section-end\"><\/span><\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">REST:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Conceito te\u00f3rico<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">RESTful:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>API real constru\u00edda usando REST<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Nem_Toda_API_e_RESTful\"><\/span>Nem Toda API \u00e9 RESTful<span class=\"ez-toc-section-end\"><\/span><\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Muitas APIs dizem ser REST, mas quebram princ\u00edpios importantes.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Exemplo ruim:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>POST \/getUser\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Isso n\u00e3o segue boas pr\u00e1ticas REST.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Exemplo_Correto\"><\/span>Exemplo Correto<span class=\"ez-toc-section-end\"><\/span><\/h1>\n\n\n\n<pre class=\"wp-block-code\"><code>GET \/usuarios\/1\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Aqui usamos:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Recurso<\/li>\n\n\n\n<li>M\u00e9todo HTTP correto<\/li>\n\n\n\n<li>URL consistente<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Como_Funciona_uma_API_RESTful\"><\/span>Como Funciona uma API RESTful<span class=\"ez-toc-section-end\"><\/span><\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Vamos entender o fluxo completo.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Passo_1_%E2%80%94_Cliente_Faz_Requisicao\"><\/span>Passo 1 \u2014 Cliente Faz Requisi\u00e7\u00e3o<span class=\"ez-toc-section-end\"><\/span><\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">O cliente envia uma requisi\u00e7\u00e3o HTTP.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Exemplo:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>GET \/produtos\/5\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Passo_2_%E2%80%94_Servidor_Recebe\"><\/span>Passo 2 \u2014 Servidor Recebe<span class=\"ez-toc-section-end\"><\/span><\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">O backend processa a requisi\u00e7\u00e3o.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Pode usar:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Java<\/li>\n\n\n\n<li>PHP<\/li>\n\n\n\n<li>Node.js<\/li>\n\n\n\n<li>Python<\/li>\n\n\n\n<li>Go<\/li>\n\n\n\n<li>C#<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Passo_3_%E2%80%94_Banco_de_Dados\"><\/span>Passo 3 \u2014 Banco de Dados<span class=\"ez-toc-section-end\"><\/span><\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">O servidor consulta dados.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Exemplo SQL:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>SELECT * FROM produtos WHERE id = 5;\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Passo_4_%E2%80%94_Resposta_JSON\"><\/span>Passo 4 \u2014 Resposta JSON<span class=\"ez-toc-section-end\"><\/span><\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">O servidor retorna JSON.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>{\n  \"id\": 5,\n  \"nome\": \"Notebook Gamer\",\n  \"preco\": 5999\n}\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"JSON_O_Formato_Mais_Usado\"><\/span>JSON: O Formato Mais Usado<span class=\"ez-toc-section-end\"><\/span><\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">JSON virou padr\u00e3o porque \u00e9:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Leve<\/li>\n\n\n\n<li>Simples<\/li>\n\n\n\n<li>F\u00e1cil de ler<\/li>\n\n\n\n<li>Compat\u00edvel com JavaScript<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Exemplo_JSON\"><\/span>Exemplo JSON<span class=\"ez-toc-section-end\"><\/span><\/h1>\n\n\n\n<pre class=\"wp-block-code\"><code>{\n  \"nome\": \"Carlos\",\n  \"idade\": 30\n}\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Codigos_HTTP_Importantes\"><\/span>C\u00f3digos HTTP Importantes<span class=\"ez-toc-section-end\"><\/span><\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">As APIs RESTful usam c\u00f3digos HTTP para indicar resultados.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"200_OK\"><\/span>200 OK<span class=\"ez-toc-section-end\"><\/span><\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Tudo deu certo.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"201_Created\"><\/span>201 Created<span class=\"ez-toc-section-end\"><\/span><\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Recurso criado com sucesso.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"400_Bad_Request\"><\/span>400 Bad Request<span class=\"ez-toc-section-end\"><\/span><\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Erro na requisi\u00e7\u00e3o.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"401_Unauthorized\"><\/span>401 Unauthorized<span class=\"ez-toc-section-end\"><\/span><\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Usu\u00e1rio n\u00e3o autenticado.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"403_Forbidden\"><\/span>403 Forbidden<span class=\"ez-toc-section-end\"><\/span><\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Sem permiss\u00e3o.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"404_Not_Found\"><\/span>404 Not Found<span class=\"ez-toc-section-end\"><\/span><\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Recurso n\u00e3o encontrado.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"500_Internal_Server_Error\"><\/span>500 Internal Server Error<span class=\"ez-toc-section-end\"><\/span><\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Erro interno do servidor.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Versionamento_de_APIs\"><\/span>Versionamento de APIs<span class=\"ez-toc-section-end\"><\/span><\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">APIs mudam com o tempo.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Por isso existe versionamento.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Exemplo:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/api\/v1\/usuarios\n\/api\/v2\/usuarios\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Autenticacao_em_APIs_RESTful\"><\/span>Autentica\u00e7\u00e3o em APIs RESTful<span class=\"ez-toc-section-end\"><\/span><\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Muitas APIs precisam proteger dados.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Os m\u00e9todos mais comuns s\u00e3o:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>JWT<\/li>\n\n\n\n<li>OAuth2<\/li>\n\n\n\n<li>API Key<\/li>\n\n\n\n<li>Bearer Token<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Exemplo_Bearer_Token\"><\/span>Exemplo Bearer Token<span class=\"ez-toc-section-end\"><\/span><\/h1>\n\n\n\n<pre class=\"wp-block-code\"><code>Authorization: Bearer eyJhbGci...\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"O_Papel_do_JWT\"><\/span>O Papel do JWT<span class=\"ez-toc-section-end\"><\/span><\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">JWT significa:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>JSON Web Token<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ele armazena informa\u00e7\u00f5es do usu\u00e1rio de forma segura.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Muito usado em:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>APIs REST<\/li>\n\n\n\n<li>Mobile<\/li>\n\n\n\n<li>SPAs<\/li>\n\n\n\n<li>Microservi\u00e7os<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"REST_e_Microservicos\"><\/span>REST e Microservi\u00e7os<span class=\"ez-toc-section-end\"><\/span><\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">REST \u00e9 extremamente usado em microservi\u00e7os.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Cada servi\u00e7o exp\u00f5e APIs RESTful.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Exemplo:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Servi\u00e7o de Usu\u00e1rios\nServi\u00e7o de Produtos\nServi\u00e7o de Pagamentos\nServi\u00e7o de Estoque\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Todos se comunicam via HTTP.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"REST_e_Frontend_Moderno\"><\/span>REST e Frontend Moderno<span class=\"ez-toc-section-end\"><\/span><\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Frameworks modernos dependem fortemente de APIs RESTful:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>React<\/li>\n\n\n\n<li>Angular<\/li>\n\n\n\n<li>Vue<\/li>\n\n\n\n<li>Flutter<\/li>\n\n\n\n<li>React Native<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">O frontend consome dados da API.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"REST_no_Mundo_Mobile\"><\/span>REST no Mundo Mobile<span class=\"ez-toc-section-end\"><\/span><\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Aplicativos Android e iOS usam REST constantemente.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Quando voc\u00ea abre um app:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Login<\/li>\n\n\n\n<li>Feed<\/li>\n\n\n\n<li>Mensagens<\/li>\n\n\n\n<li>Notifica\u00e7\u00f5es<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Tudo normalmente passa por APIs RESTful.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Boas_Praticas_RESTful\"><\/span>Boas Pr\u00e1ticas RESTful<span class=\"ez-toc-section-end\"><\/span><\/h1>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"1_Use_Substantivos_nas_URLs\"><\/span>1. Use Substantivos nas URLs<span class=\"ez-toc-section-end\"><\/span><\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Correto:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/usuarios\n\/produtos\n\/pedidos\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Errado:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/getUsuarios\n\/createPedido\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"2_Use_Metodos_HTTP_Corretamente\"><\/span>2. Use M\u00e9todos HTTP Corretamente<span class=\"ez-toc-section-end\"><\/span><\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">GET para leitura.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">POST para cria\u00e7\u00e3o.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">DELETE para remo\u00e7\u00e3o.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"3_Use_JSON_Padronizado\"><\/span>3. Use JSON Padronizado<span class=\"ez-toc-section-end\"><\/span><\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Mantenha respostas consistentes.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"4_Utilize_Status_HTTP_Adequados\"><\/span>4. Utilize Status HTTP Adequados<span class=\"ez-toc-section-end\"><\/span><\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Isso melhora integra\u00e7\u00e3o e debugging.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"5_Evite_URLs_Confusas\"><\/span>5. Evite URLs Confusas<span class=\"ez-toc-section-end\"><\/span><\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Ruim:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/api\/get\/user\/data\/id\/10\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Bom:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/api\/usuarios\/10\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"REST_na_Pratica_com_Java_Spring_Boot\"><\/span>REST na Pr\u00e1tica com Java Spring Boot<span class=\"ez-toc-section-end\"><\/span><\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Exemplo simples:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>@RestController\n@RequestMapping(\"\/usuarios\")\npublic class UsuarioController {\n\n    @GetMapping(\"\/{id}\")\n    public Usuario buscar(@PathVariable Long id) {\n        return usuarioService.buscar(id);\n    }\n}\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"REST_com_Nodejs\"><\/span>REST com Node.js<span class=\"ez-toc-section-end\"><\/span><\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Exemplo Express:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>app.get('\/usuarios\/:id', (req, res) =&gt; {\n    res.json({\n        id: req.params.id,\n        nome: 'Carlos'\n    });\n});\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"REST_com_PHP\"><\/span>REST com PHP<span class=\"ez-toc-section-end\"><\/span><\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Exemplo simples:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;?php\n\nheader('Content-Type: application\/json');\n\necho json_encode(&#91;\n    'nome' =&gt; 'Carlos'\n]);\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"REST_com_Python_Flask\"><\/span>REST com Python Flask<span class=\"ez-toc-section-end\"><\/span><\/h1>\n\n\n\n<pre class=\"wp-block-code\"><code>from flask import Flask, jsonify\n\napp = Flask(__name__)\n\n@app.route('\/usuarios\/&lt;id&gt;')\ndef usuario(id):\n    return jsonify({\n        'id': id,\n        'nome': 'Carlos'\n    })\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"REST_e_Escalabilidade\"><\/span>REST e Escalabilidade<span class=\"ez-toc-section-end\"><\/span><\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">REST ficou popular porque escala muito bem.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Como \u00e9 stateless:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Servidores podem ser replicados<\/li>\n\n\n\n<li>Load balancing funciona melhor<\/li>\n\n\n\n<li>Cloud scaling \u00e9 facilitado<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"REST_e_Cloud_Computing\"><\/span>REST e Cloud Computing<span class=\"ez-toc-section-end\"><\/span><\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Provedores cloud usam REST massivamente:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>AWS<\/li>\n\n\n\n<li>Azure<\/li>\n\n\n\n<li>Google Cloud<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Exemplo:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Criar VM<\/li>\n\n\n\n<li>Criar bucket<\/li>\n\n\n\n<li>Gerenciar banco<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Tudo via APIs RESTful.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"REST_e_DevOps\"><\/span>REST e DevOps<span class=\"ez-toc-section-end\"><\/span><\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Ferramentas DevOps tamb\u00e9m usam REST:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Kubernetes<\/li>\n\n\n\n<li>Docker APIs<\/li>\n\n\n\n<li>GitHub API<\/li>\n\n\n\n<li>GitLab API<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Limitacoes_do_REST\"><\/span>Limita\u00e7\u00f5es do REST<span class=\"ez-toc-section-end\"><\/span><\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">REST n\u00e3o \u00e9 perfeito.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Algumas limita\u00e7\u00f5es:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Overfetching<\/li>\n\n\n\n<li>Underfetching<\/li>\n\n\n\n<li>Muitas requisi\u00e7\u00f5es<\/li>\n\n\n\n<li>Versionamento complexo<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"O_Surgimento_do_GraphQL\"><\/span>O Surgimento do GraphQL<span class=\"ez-toc-section-end\"><\/span><\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">GraphQL surgiu para resolver alguns problemas do REST.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Permite buscar exatamente os dados necess\u00e1rios.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Mas REST continua dominante.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"REST_Continua_Muito_Forte\"><\/span>REST Continua Muito Forte<span class=\"ez-toc-section-end\"><\/span><\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Mesmo com novas tecnologias, REST ainda domina porque:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Simples<\/li>\n\n\n\n<li>Maduro<\/li>\n\n\n\n<li>Compat\u00edvel<\/li>\n\n\n\n<li>F\u00e1cil de aprender<\/li>\n\n\n\n<li>Excelente ecossistema<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Quando_Usar_REST\"><\/span>Quando Usar REST<span class=\"ez-toc-section-end\"><\/span><\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">REST \u00e9 ideal para:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>APIs p\u00fablicas<\/li>\n\n\n\n<li>Sistemas web<\/li>\n\n\n\n<li>Mobile<\/li>\n\n\n\n<li>Microservi\u00e7os<\/li>\n\n\n\n<li>SaaS<\/li>\n\n\n\n<li>Integra\u00e7\u00f5es empresariais<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Quando_SOAP_Ainda_Faz_Sentido\"><\/span>Quando SOAP Ainda Faz Sentido<span class=\"ez-toc-section-end\"><\/span><\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">SOAP ainda aparece em:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Bancos<\/li>\n\n\n\n<li>Governo<\/li>\n\n\n\n<li>Sistemas legados<\/li>\n\n\n\n<li>Integra\u00e7\u00f5es corporativas cr\u00edticas<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"O_Futuro_das_APIs\"><\/span>O Futuro das APIs<span class=\"ez-toc-section-end\"><\/span><\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">As APIs continuar\u00e3o evoluindo.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Tend\u00eancias:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>APIs orientadas a eventos<\/li>\n\n\n\n<li>GraphQL<\/li>\n\n\n\n<li>gRPC<\/li>\n\n\n\n<li>APIs AI-first<\/li>\n\n\n\n<li>Integra\u00e7\u00f5es com agentes de IA<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Mas REST continuar\u00e1 extremamente relevante por muitos anos.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Conclusao\"><\/span>Conclus\u00e3o<span class=\"ez-toc-section-end\"><\/span><\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">REST mudou profundamente a forma como sistemas se comunicam na internet.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Seu modelo simples, baseado em HTTP, tornou poss\u00edvel criar APIs escal\u00e1veis, organizadas e f\u00e1ceis de consumir. Hoje praticamente toda aplica\u00e7\u00e3o moderna depende de APIs RESTful em algum n\u00edvel.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Entender a diferen\u00e7a entre:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>API<\/li>\n\n\n\n<li>Web Service<\/li>\n\n\n\n<li>REST<\/li>\n\n\n\n<li>RESTful<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">\u00e9 fundamental para qualquer desenvolvedor moderno.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">REST n\u00e3o \u00e9 apenas uma tecnologia. \u00c9 uma forma de pensar integra\u00e7\u00e3o de sistemas.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ao dominar REST, voc\u00ea passa a entender melhor:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>aplica\u00e7\u00f5es web,<\/li>\n\n\n\n<li>microsservi\u00e7os,<\/li>\n\n\n\n<li>mobile,<\/li>\n\n\n\n<li>cloud computing,<\/li>\n\n\n\n<li>integra\u00e7\u00e3o de plataformas,<\/li>\n\n\n\n<li>desenvolvimento backend,<\/li>\n\n\n\n<li>arquitetura moderna de software.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">E esse conhecimento \u00e9 uma das bases mais importantes do desenvolvimento atual.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/go.hotmart.com\/V15436884O\" target=\"_blank\" rel=\"noreferrer noopener\">API RESTful &#8211; Guia definitivo com Spring Boot e Java 8<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>A internet moderna funciona gra\u00e7as \u00e0 comunica\u00e7\u00e3o entre sistemas. Quando voc\u00ea abre um aplicativo de banco, faz login em uma rede social, consulta a previs\u00e3o do tempo ou compra algo online, existe uma troca constante de informa\u00e7\u00f5es acontecendo nos bastidores. Essa comunica\u00e7\u00e3o \u00e9 poss\u00edvel gra\u00e7as a conceitos como APIs, Web Services e arquiteturas RESTful. Embora [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":1407,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[585],"tags":[],"class_list":["post-1406","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-rest"],"_links":{"self":[{"href":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-json\/wp\/v2\/posts\/1406","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-json\/wp\/v2\/comments?post=1406"}],"version-history":[{"count":1,"href":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-json\/wp\/v2\/posts\/1406\/revisions"}],"predecessor-version":[{"id":1408,"href":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-json\/wp\/v2\/posts\/1406\/revisions\/1408"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-json\/wp\/v2\/media\/1407"}],"wp:attachment":[{"href":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-json\/wp\/v2\/media?parent=1406"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-json\/wp\/v2\/categories?post=1406"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-json\/wp\/v2\/tags?post=1406"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}