{"id":5873,"date":"2026-04-08T13:17:34","date_gmt":"2026-04-08T16:17:34","guid":{"rendered":"https:\/\/thiagorossi.com.br\/blog\/?p=5873"},"modified":"2026-04-08T13:22:13","modified_gmt":"2026-04-08T16:22:13","slug":"rotas-no-cakephp","status":"publish","type":"post","link":"https:\/\/thiagorossi.com.br\/blog\/rotas-no-cakephp\/","title":{"rendered":"Rotas no CakePHP"},"content":{"rendered":"<span class=\"span-reading-time rt-reading-time\" style=\"display: block;\"><span class=\"rt-label rt-prefix\">Tempo de leitura: <\/span> <span class=\"rt-time\"> 5<\/span> <span class=\"rt-label rt-postfix\">minutos<\/span><\/span>\n<p class=\"has-medium-font-size wp-block-paragraph\">Rotas no CakePHP: A primeira impress\u00e3o de um site para um usu\u00e1rio \u2014 e para os motores de busca \u2014 n\u00e3o \u00e9 o design, mas a <strong>URL<\/strong>. Uma URL como <code>meusite.com.br\/artigos\/visualizar\/1<\/code> \u00e9 funcional, mas <code>meusite.com.br\/blog\/como-aprender-cakephp<\/code> \u00e9 profissional, leg\u00edvel e otimizada para SEO.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Como especialista em <strong>CakePHP<\/strong>, preparei este d\u00e9cimo segundo artigo da nossa s\u00e9rie para ensinar voc\u00ea a dominar o <strong>Roteamento Avan\u00e7ado<\/strong>. Vamos transformar as rotas padr\u00e3o do framework em uma estrutura de URLs poderosa e personalizada, garantindo que seu projeto tenha a autoridade que ele merece.<\/p>\n\n\n\n<div style=\"height:35px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading has-large-font-size\">Roteamento Avan\u00e7ado: Criando URLs amig\u00e1veis e personalizadas no CakePHP<\/h2>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Rotas no CakePHP: No CakePHP, o sistema de roteamento \u00e9 o respons\u00e1vel por mapear uma requisi\u00e7\u00e3o HTTP (a URL que o usu\u00e1rio digita) para uma a\u00e7\u00e3o espec\u00edfica dentro de um Controller. Embora o framework j\u00e1 venha com rotas autom\u00e1ticas baseadas na conven\u00e7\u00e3o, o verdadeiro poder surge quando assumimos o controle do arquivo <code>config\/routes.php<\/code>.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Dominar o <strong>Roteamento Avan\u00e7ado<\/strong> permite que voc\u00ea crie slugs amig\u00e1veis, gerencie vers\u00f5es de APIs e proteja a estrutura interna das suas tabelas, escondendo IDs num\u00e9ricos e expondo apenas termos sem\u00e2nticos.<\/p>\n\n\n\n<div style=\"height:35px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading has-large-font-size\">1. A Anatomia de uma Rota no CakePHP<\/h2>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Antes de avan\u00e7armos, precisamos entender como uma rota \u00e9 declarada. O roteamento no CakePHP utiliza uma sintaxe fluida que conecta um &#8220;padr\u00e3o de URL&#8221; a um &#8220;destino&#8221;.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">O local onde toda essa configura\u00e7\u00e3o acontece \u00e9 o arquivo <code>config\/routes.php<\/code>. Dentro do escopo de um <code>RouteBuilder<\/code>, definimos nossas regras:<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">PHP<\/p>\n\n\n\n<pre class=\"wp-block-code has-medium-font-size\"><code>use Cake\\Routing\\RouteBuilder;\nuse Cake\\Routing\\Route\\DashedRoute;\n\n$routes-&gt;scope('\/', function (RouteBuilder $builder) {\n    \/\/ Rota padr\u00e3o para a Home\n    $builder-&gt;connect('\/', &#91;'controller' =&gt; 'Paginas', 'action' =&gt; 'home']);\n    \n    \/\/ Rota personalizada\n    $builder-&gt;connect('\/contato', &#91;'controller' =&gt; 'Contatos', 'action' =&gt; 'index']);\n    \n    $builder-&gt;fallbacks(DashedRoute::class);\n});\n<\/code><\/pre>\n\n\n\n<div style=\"height:35px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading has-large-font-size\">2. Criando URLs Amig\u00e1veis (Slugs)<\/h2>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Para um blog como o seu, usar o ID na URL (<code>\/artigos\/view\/42<\/code>) \u00e9 p\u00e9ssimo para o SEO. O Google prioriza palavras-chave na URL. O objetivo \u00e9 chegar em <code>\/blog\/titulo-do-artigo<\/code>.<\/p>\n\n\n\n<div style=\"height:35px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">Passo 1: Definindo a Rota com Par\u00e2metros<\/h3>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">No seu arquivo de rotas, voc\u00ea pode definir que qualquer coisa ap\u00f3s <code>\/blog\/<\/code> seja tratada como um par\u00e2metro chamado <code>slug<\/code>:<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">PHP<\/p>\n\n\n\n<pre class=\"wp-block-code has-medium-font-size\"><code>$builder-&gt;connect('\/blog\/{slug}', \n    &#91;'controller' =&gt; 'Artigos', 'action' =&gt; 'visualizar'],\n    &#91;'_name' =&gt; 'artigo_view'] \/\/ Nomeando a rota para facilitar o uso no HtmlHelper\n)\n-&gt;setPatterns(&#91;'slug' =&gt; '&#91;a-z0-9\\-]+']) \/\/ Regex para aceitar apenas letras, n\u00fameros e hifens\n-&gt;setPass(&#91;'slug']); \/\/ Passa o par\u00e2metro 'slug' diretamente para a fun\u00e7\u00e3o do Controller\n<\/code><\/pre>\n\n\n\n<div style=\"height:35px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">Passo 2: Ajustando o Controller<\/h3>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Agora, seu Controller n\u00e3o busca mais pelo <code>id<\/code>, mas pelo <code>slug<\/code>:<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">PHP<\/p>\n\n\n\n<pre class=\"wp-block-code has-medium-font-size\"><code>public function visualizar($slug = null)\n{\n    $artigo = $this-&gt;Artigos-&gt;findBySlug($slug)-&gt;firstOrFail();\n    $this-&gt;set(compact('artigo'));\n}\n<\/code><\/pre>\n\n\n\n<div style=\"height:35px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading has-large-font-size\">3. Roteamento por Escopos (Scopes) e Prefixos<\/h2>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Se voc\u00ea est\u00e1 construindo um sistema SaaS ou um painel administrativo, voc\u00ea n\u00e3o quer que as URLs do administrador sejam misturadas com as do site p\u00fablico. O CakePHP resolve isso com <strong>Prefixos<\/strong>.<\/p>\n\n\n\n<div style=\"height:35px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">Configurando o Prefixo Admin<\/h3>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Imagine que voc\u00ea quer que todas as URLs que comecem com <code>\/admin<\/code> apontem para controllers dentro de uma subpasta <code>src\/Controller\/Admin\/<\/code>.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">PHP<\/p>\n\n\n\n<pre class=\"wp-block-code has-medium-font-size\"><code>$builder-&gt;prefix('Admin', function (RouteBuilder $builder) {\n    \/\/ Agora as rotas aqui dentro apontam para o namespace App\\Controller\\Admin\n    $builder-&gt;connect('\/', &#91;'controller' =&gt; 'Dashboards', 'action' =&gt; 'index']);\n    $builder-&gt;connect('\/usuarios', &#91;'controller' =&gt; 'Usuarios', 'action' =&gt; 'listar']);\n    \n    $builder-&gt;fallbacks(DashedRoute::class);\n});\n<\/code><\/pre>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Isso organiza seu projeto de forma profissional:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li class=\"has-medium-font-size\"><strong>Site P\u00fablico:<\/strong> <code>src\/Controller\/ArtigosController.php<\/code> -> <code>\/blog\/meu-post<\/code><\/li>\n\n\n\n<li class=\"has-medium-font-size\"><strong>Painel Admin:<\/strong> <code>src\/Controller\/Admin\/ArtigosController.php<\/code> -> <code>\/admin\/artigos<\/code><\/li>\n<\/ul>\n\n\n\n<div style=\"height:35px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading has-large-font-size\">4. Passando Par\u00e2metros Adicionais e Restri\u00e7\u00f5es (Regex)<\/h2>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">O <strong>Roteamento Avan\u00e7ado<\/strong> brilha quando precisamos de precis\u00e3o. Suponha que voc\u00ea queira criar uma URL para o arquivo do seu blog organizada por ano e m\u00eas: <code>\/arquivo\/2026\/04<\/code>.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">PHP<\/p>\n\n\n\n<pre class=\"wp-block-code has-medium-font-size\"><code>$builder-&gt;connect('\/arquivo\/{ano}\/{mes}', \n    &#91;'controller' =&gt; 'Artigos', 'action' =&gt; 'arquivo'],\n    &#91;'pass' =&gt; &#91;'ano', 'mes']]\n)\n-&gt;setPatterns(&#91;\n    'ano' =&gt; '&#91;0-9]{4}', \/\/ Apenas 4 n\u00fameros\n    'mes' =&gt; '0&#91;1-9]|1&#91;0-2]' \/\/ N\u00fameros de 01 a 12\n]);\n<\/code><\/pre>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Se o usu\u00e1rio digitar <code>\/arquivo\/abc\/99<\/code>, o CakePHP nem chamar\u00e1 o Controller; ele retornar\u00e1 um erro 404 automaticamente porque a URL n\u00e3o condiz com o padr\u00e3o definido. Isso economiza processamento e aumenta a seguran\u00e7a.<\/p>\n\n\n\n<div style=\"height:35px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading has-large-font-size\">5. Extens\u00f5es de Arquivo (JSON, XML, CSV)<\/h2>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Voc\u00ea sabia que o CakePHP pode transformar seu site em uma API apenas mudando a extens\u00e3o da URL? Se voc\u00ea quiser que <code>meusite.com\/artigos.json<\/code> retorne os dados em formato JSON, o roteamento cuida disso.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">PHP<\/p>\n\n\n\n<pre class=\"wp-block-code has-medium-font-size\"><code>$builder-&gt;setExtensions(&#91;'json', 'xml', 'csv']);\n<\/code><\/pre>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Ao ativar isso, o framework detecta a extens\u00e3o e, se voc\u00ea configurou o <code>RequestHandler<\/code>, ele alterna automaticamente a View para renderizar o formato solicitado. Isso \u00e9 essencial para integra\u00e7\u00f5es com apps mobile ou exporta\u00e7\u00e3o de dados.<\/p>\n\n\n\n<div style=\"height:35px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading has-large-font-size\">6. Nomeando Rotas e o HtmlHelper<\/h2>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Um erro comum \u00e9 &#8220;hardcodar&#8221; links nas suas Views, como <code>&lt;a href=\"\/blog\/meu-post\"&gt;<\/code>. Se amanh\u00e3 voc\u00ea decidir mudar <code>\/blog\/<\/code> para <code>\/noticias\/<\/code>, ter\u00e1 que editar todos os arquivos.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">A forma profissional \u00e9 usar <strong>Rotas Nomeadas<\/strong>:<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">PHP<\/p>\n\n\n\n<pre class=\"wp-block-code has-medium-font-size\"><code>\/\/ No routes.php\n$builder-&gt;connect('\/noticias\/{slug}', &#91;...], &#91;'_name' =&gt; 'view_post']);\n\n\/\/ No seu template (View)\necho $this-&gt;Html-&gt;link('Leia mais', &#91;\n    '_name' =&gt; 'view_post', \n    'slug' =&gt; $artigo-&gt;slug\n]);\n<\/code><\/pre>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Agora, se voc\u00ea mudar a URL no arquivo de rotas, o link em todo o seu site mudar\u00e1 automaticamente. Isso \u00e9 <strong>manutenibilidade<\/strong>.<\/p>\n\n\n\n<div style=\"height:35px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading has-large-font-size\">7. Boas Pr\u00e1ticas de Roteamento para SEO<\/h2>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Para que o seu blog e seus projetos ganhem tra\u00e7\u00e3o nos buscadores, siga estas diretrizes de roteamento:<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li class=\"has-medium-font-size\"><strong>Use Hifens, n\u00e3o Underlines:<\/strong> <code>meu-post<\/code> \u00e9 melhor que <code>meu_post<\/code>. O Google interpreta hifens como separadores de palavras.<\/li>\n\n\n\n<li class=\"has-medium-font-size\"><strong>Mantenha a URL Curta:<\/strong> Evite profundidade excessiva como <code>\/categoria\/tecnologia\/php\/cakephp\/versao5\/meu-post<\/code>. Prefira <code>\/blog\/meu-post<\/code>.<\/li>\n\n\n\n<li class=\"has-medium-font-size\"><strong>URLs Min\u00fasculas:<\/strong> O roteamento do CakePHP diferencia mai\u00fasculas de min\u00fasculas por padr\u00e3o no Linux. Mantenha tudo em min\u00fasculo para evitar links quebrados.<\/li>\n\n\n\n<li class=\"has-medium-font-size\"><strong>Redirecionamentos 301:<\/strong> Se voc\u00ea mudou uma URL antiga, use o <code>RedirectRoute<\/code> do CakePHP para avisar os buscadores e n\u00e3o perder o ranqueamento.<\/li>\n<\/ol>\n\n\n\n<div style=\"height:35px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading has-large-font-size\">Conclus\u00e3o Rotas no CakePHP: O Mapa do seu Sucesso<\/h2>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Rotas no CakePHP: O <strong>Roteamento Avan\u00e7ado no CakePHP<\/strong> \u00e9 o que transforma um emaranhado de scripts em uma aplica\u00e7\u00e3o web elegante e organizada. Quando voc\u00ea assume o controle das URLs, voc\u00ea melhora a experi\u00eancia do usu\u00e1rio (UX), aumenta o desempenho do SEO e cria uma barreira de seguran\u00e7a ao ocultar a l\u00f3gica interna do banco de dados.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">URLs amig\u00e1veis s\u00e3o o cart\u00e3o de visitas do seu c\u00f3digo. Um projeto com rotas bem planejadas demonstra cuidado t\u00e9cnico e aten\u00e7\u00e3o aos detalhes, caracter\u00edsticas fundamentais de um desenvolvedor especialista.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Mas antes de dominar o CakePHP, se for o seu caso, toda jornada tem um in\u00edcio. Vamos entender quais s\u00e3o os conhecimentos b\u00e1sicos necess\u00e1rios para aproveitar ao m\u00e1ximo este poderoso framework. Para iniciar seus estudos no CakePHP, voc\u00ea precisar\u00e1 dominar as seguintes tecnologias:<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full\"><a href=\"\/blog\/categoria\/html\" target=\"_blank\" rel=\" noreferrer noopener\"><img loading=\"lazy\" decoding=\"async\" width=\"758\" height=\"426\" src=\"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/04\/html.webp\" alt=\"HTML\" class=\"wp-image-600\" srcset=\"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/04\/html.webp 758w, https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/04\/html-300x169.webp 300w\" sizes=\"auto, (max-width: 758px) 100vw, 758px\" \/><\/a><figcaption class=\"wp-element-caption\">HTML<\/figcaption><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full\"><a href=\"\/blog\/categoria\/css\" target=\"_blank\" rel=\" noreferrer noopener\"><img loading=\"lazy\" decoding=\"async\" width=\"758\" height=\"426\" src=\"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/04\/Capa-Artigos-Linux.webp\" alt=\"CSS\" class=\"wp-image-702\" srcset=\"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/04\/Capa-Artigos-Linux.webp 758w, https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/04\/Capa-Artigos-Linux-300x169.webp 300w\" sizes=\"auto, (max-width: 758px) 100vw, 758px\" \/><\/a><figcaption class=\"wp-element-caption\">CSS<\/figcaption><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full\"><a href=\"\/blog\/categoria\/javascript\" target=\"_blank\" rel=\" noreferrer noopener\"><img loading=\"lazy\" decoding=\"async\" width=\"758\" height=\"426\" src=\"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/04\/javascript.webp\" alt=\"Javascript\" class=\"wp-image-804\" srcset=\"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/04\/javascript.webp 758w, https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/04\/javascript-300x169.webp 300w\" sizes=\"auto, (max-width: 758px) 100vw, 758px\" \/><\/a><figcaption class=\"wp-element-caption\">JavaScript<\/figcaption><\/figure>\n<\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full\"><a href=\"\/blog\/categoria\/sql\" target=\"_blank\" rel=\" noreferrer noopener\"><img loading=\"lazy\" decoding=\"async\" width=\"758\" height=\"426\" src=\"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/05\/Capa-Artigos-2.webp\" alt=\"SQL\" class=\"wp-image-942\" srcset=\"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/05\/Capa-Artigos-2.webp 758w, https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/05\/Capa-Artigos-2-300x169.webp 300w\" sizes=\"auto, (max-width: 758px) 100vw, 758px\" \/><\/a><figcaption class=\"wp-element-caption\">SQL<\/figcaption><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full\"><a href=\"\/blog\/categoria\/php\" target=\"_blank\" rel=\" noreferrer noopener\"><img loading=\"lazy\" decoding=\"async\" width=\"758\" height=\"426\" src=\"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/11\/Capa-PHP.png\" alt=\"Capa Curso PHP\" class=\"wp-image-2835\" srcset=\"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/11\/Capa-PHP.png 758w, https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/11\/Capa-PHP-300x169.png 300w\" sizes=\"auto, (max-width: 758px) 100vw, 758px\" \/><\/a><figcaption class=\"wp-element-caption\">PHP<\/figcaption><\/figure>\n<\/div>\n<\/div>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">E se voc\u00ea gosta do nosso conte\u00fado, n\u00e3o deixe de contribuir adquirindo os servi\u00e7os e produtos dos nossos apoiadores e empresas que somos associados.<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/hostinger.com.br\/?REFERRALCODE=1THIAGO62\" target=\"_blank\" rel=\" noreferrer noopener\"><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"250\" src=\"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/03\/hostinger.png\" alt=\"Hospedagem Hostinger\" class=\"wp-image-92\"\/><\/a><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/amzn.to\/3SNDYlc\" target=\"_blank\" rel=\" noreferrer noopener\"><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"250\" src=\"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/08\/ofertas-amazon.webp\" alt=\"Ofertas Amazon\" class=\"wp-image-1308\"\/><\/a><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/amzn.to\/3SNKmt0\" target=\"_blank\" rel=\" noreferrer noopener\"><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"250\" src=\"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/08\/amazonprime.webp\" alt=\"Amazon Prime\" class=\"wp-image-1307\"\/><\/a><\/figure>\n<\/div>\n<\/div>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Agora que suas URLs est\u00e3o limpas e profissionais, \u00e9 hora de entender como processar as requisi\u00e7\u00f5es que chegam por elas. No pr\u00f3ximo artigo, veremos: <strong>&#8220;Request &amp; Response: Manipulando dados de entrada e cabe\u00e7alhos.&#8221;<\/strong><\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\"><strong>Dica de Especialista:<\/strong> Se as suas rotas come\u00e7arem a ficar muito complexas, voc\u00ea pode usar o comando <code>bin\/cake routes<\/code> no terminal. Ele listar\u00e1 todas as rotas ativas no seu sistema, mostrando exatamente qual Controller e Action cada URL est\u00e1 chamando. \u00c9 a melhor ferramenta de debug para roteamento!<\/p>\n","protected":false},"excerpt":{"rendered":"<p><span class=\"span-reading-time rt-reading-time\" style=\"display: block;\"><span class=\"rt-label rt-prefix\">Tempo de leitura: <\/span> <span class=\"rt-time\"> 5<\/span> <span class=\"rt-label rt-postfix\">minutos<\/span><\/span>Rotas no CakePHP: A primeira impress\u00e3o de um site para um usu\u00e1rio \u2014 e para&#8230;<\/p>\n","protected":false},"author":1,"featured_media":5819,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[97],"tags":[],"class_list":["post-5873","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-cakephp","wpcat-97-id"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.9 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Rotas no CakePHP - BLOG THIAGO ROSSI<\/title>\n<meta name=\"description\" content=\"Rotas no CakePHP: No CakePHP, o sistema de roteamento \u00e9 o respons\u00e1vel por mapear uma requisi\u00e7\u00e3o HTTP (a URL que o usu\u00e1rio digita) para uma ...\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/thiagorossi.com.br\/blog\/rotas-no-cakephp\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Rotas no CakePHP - BLOG THIAGO ROSSI\" \/>\n<meta property=\"og:description\" content=\"Rotas no CakePHP: No CakePHP, o sistema de roteamento \u00e9 o respons\u00e1vel por mapear uma requisi\u00e7\u00e3o HTTP (a URL que o usu\u00e1rio digita) para uma ...\" \/>\n<meta property=\"og:url\" content=\"https:\/\/thiagorossi.com.br\/blog\/rotas-no-cakephp\/\" \/>\n<meta property=\"og:site_name\" content=\"BLOG THIAGO ROSSI\" \/>\n<meta property=\"article:published_time\" content=\"2026-04-08T16:17:34+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-04-08T16:22:13+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2026\/04\/capa-cakephp.png\" \/>\n\t<meta property=\"og:image:width\" content=\"758\" \/>\n\t<meta property=\"og:image:height\" content=\"426\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Thiago Rossi\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Thiago Rossi\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. tempo de leitura\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/rotas-no-cakephp\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/rotas-no-cakephp\\\/\"},\"author\":{\"name\":\"Thiago Rossi\",\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/#\\\/schema\\\/person\\\/5f28286948ec2afdeb2e044a2196cd87\"},\"headline\":\"Rotas no CakePHP\",\"datePublished\":\"2026-04-08T16:17:34+00:00\",\"dateModified\":\"2026-04-08T16:22:13+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/rotas-no-cakephp\\\/\"},\"wordCount\":972,\"publisher\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/rotas-no-cakephp\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/04\\\/capa-cakephp.png\",\"articleSection\":[\"CakePHP\"],\"inLanguage\":\"pt-BR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/rotas-no-cakephp\\\/\",\"url\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/rotas-no-cakephp\\\/\",\"name\":\"Rotas no CakePHP - BLOG THIAGO ROSSI\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/rotas-no-cakephp\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/rotas-no-cakephp\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/04\\\/capa-cakephp.png\",\"datePublished\":\"2026-04-08T16:17:34+00:00\",\"dateModified\":\"2026-04-08T16:22:13+00:00\",\"description\":\"Rotas no CakePHP: No CakePHP, o sistema de roteamento \u00e9 o respons\u00e1vel por mapear uma requisi\u00e7\u00e3o HTTP (a URL que o usu\u00e1rio digita) para uma ...\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/rotas-no-cakephp\\\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/rotas-no-cakephp\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/rotas-no-cakephp\\\/#primaryimage\",\"url\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/04\\\/capa-cakephp.png\",\"contentUrl\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/04\\\/capa-cakephp.png\",\"width\":758,\"height\":426,\"caption\":\"CakePHP\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/rotas-no-cakephp\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Rotas no CakePHP\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/\",\"name\":\"THIAGO ROSSI\",\"description\":\"Mais de 20 anos de experi\u00eancia no mercado de TI!\",\"publisher\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/#organization\"},\"alternateName\":\"TR | CURSO WEB DEV\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-BR\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/#organization\",\"name\":\"THIAGO ROSSI\",\"alternateName\":\"TR | CURSO WEB DEV\",\"url\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/04\\\/new-logo.webp\",\"contentUrl\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/04\\\/new-logo.webp\",\"width\":300,\"height\":300,\"caption\":\"THIAGO ROSSI\"},\"image\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/linkedin.com\\\/in\\\/thiagox86\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/#\\\/schema\\\/person\\\/5f28286948ec2afdeb2e044a2196cd87\",\"name\":\"Thiago Rossi\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/bb28b4665f4162bab9fbef8db5a7f00597f79ab90ece9a67189bb6bce78d5786?s=96&d=retro&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/bb28b4665f4162bab9fbef8db5a7f00597f79ab90ece9a67189bb6bce78d5786?s=96&d=retro&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/bb28b4665f4162bab9fbef8db5a7f00597f79ab90ece9a67189bb6bce78d5786?s=96&d=retro&r=g\",\"caption\":\"Thiago Rossi\"},\"description\":\"Com mais de 20 anos de jornada na tecnologia, minha trajet\u00f3ria evoluiu do ensino t\u00e9cnico \u00e0 arquitetura de sistemas complexos. Hoje, foco minha expertise no desenvolvimento de solu\u00e7\u00f5es de Intelig\u00eancia Artificial nativa e an\u00e1lise de dados p\u00fablicos, utilizando o ecossistema PHP para transformar dados brutos em transpar\u00eancia e efici\u00eancia. Como autor e desenvolvedor, acredito na democratiza\u00e7\u00e3o do conhecimento. Essa vis\u00e3o resultou em uma biblioteca de mais de 530 artigos gratuitos, cobrindo desde a base do WebDev e Infraestrutura at\u00e9 os bastidores da ind\u00fastria de Jogos e IA. No universo de Game Design, sou autor do livro \\\"GDD \u2013 O Guia Definitivo\\\" e documento ativamente meus processos atrav\u00e9s de DevLogs, unindo rigor t\u00e9cnico e criatividade em projetos desenvolvidos com GDevelop 5. Meu compromisso \u00e9 conectar engenharia de ponta com as reais oportunidades do mercado de tecnologia.\",\"sameAs\":[\"https:\\\/\\\/thiagorossi.com.br\\\/blog\",\"https:\\\/\\\/instagram.com\\\/thiagorossix86\",\"https:\\\/\\\/linkedin.com\\\/in\\\/thiagox86\"],\"url\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/author\\\/thiagorossi\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Rotas no CakePHP - BLOG THIAGO ROSSI","description":"Rotas no CakePHP: No CakePHP, o sistema de roteamento \u00e9 o respons\u00e1vel por mapear uma requisi\u00e7\u00e3o HTTP (a URL que o usu\u00e1rio digita) para uma ...","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/thiagorossi.com.br\/blog\/rotas-no-cakephp\/","og_locale":"pt_BR","og_type":"article","og_title":"Rotas no CakePHP - BLOG THIAGO ROSSI","og_description":"Rotas no CakePHP: No CakePHP, o sistema de roteamento \u00e9 o respons\u00e1vel por mapear uma requisi\u00e7\u00e3o HTTP (a URL que o usu\u00e1rio digita) para uma ...","og_url":"https:\/\/thiagorossi.com.br\/blog\/rotas-no-cakephp\/","og_site_name":"BLOG THIAGO ROSSI","article_published_time":"2026-04-08T16:17:34+00:00","article_modified_time":"2026-04-08T16:22:13+00:00","og_image":[{"width":758,"height":426,"url":"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2026\/04\/capa-cakephp.png","type":"image\/png"}],"author":"Thiago Rossi","twitter_card":"summary_large_image","twitter_misc":{"Escrito por":"Thiago Rossi","Est. tempo de leitura":"7 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/thiagorossi.com.br\/blog\/rotas-no-cakephp\/#article","isPartOf":{"@id":"https:\/\/thiagorossi.com.br\/blog\/rotas-no-cakephp\/"},"author":{"name":"Thiago Rossi","@id":"https:\/\/thiagorossi.com.br\/blog\/#\/schema\/person\/5f28286948ec2afdeb2e044a2196cd87"},"headline":"Rotas no CakePHP","datePublished":"2026-04-08T16:17:34+00:00","dateModified":"2026-04-08T16:22:13+00:00","mainEntityOfPage":{"@id":"https:\/\/thiagorossi.com.br\/blog\/rotas-no-cakephp\/"},"wordCount":972,"publisher":{"@id":"https:\/\/thiagorossi.com.br\/blog\/#organization"},"image":{"@id":"https:\/\/thiagorossi.com.br\/blog\/rotas-no-cakephp\/#primaryimage"},"thumbnailUrl":"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2026\/04\/capa-cakephp.png","articleSection":["CakePHP"],"inLanguage":"pt-BR"},{"@type":"WebPage","@id":"https:\/\/thiagorossi.com.br\/blog\/rotas-no-cakephp\/","url":"https:\/\/thiagorossi.com.br\/blog\/rotas-no-cakephp\/","name":"Rotas no CakePHP - BLOG THIAGO ROSSI","isPartOf":{"@id":"https:\/\/thiagorossi.com.br\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/thiagorossi.com.br\/blog\/rotas-no-cakephp\/#primaryimage"},"image":{"@id":"https:\/\/thiagorossi.com.br\/blog\/rotas-no-cakephp\/#primaryimage"},"thumbnailUrl":"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2026\/04\/capa-cakephp.png","datePublished":"2026-04-08T16:17:34+00:00","dateModified":"2026-04-08T16:22:13+00:00","description":"Rotas no CakePHP: No CakePHP, o sistema de roteamento \u00e9 o respons\u00e1vel por mapear uma requisi\u00e7\u00e3o HTTP (a URL que o usu\u00e1rio digita) para uma ...","breadcrumb":{"@id":"https:\/\/thiagorossi.com.br\/blog\/rotas-no-cakephp\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/thiagorossi.com.br\/blog\/rotas-no-cakephp\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/thiagorossi.com.br\/blog\/rotas-no-cakephp\/#primaryimage","url":"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2026\/04\/capa-cakephp.png","contentUrl":"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2026\/04\/capa-cakephp.png","width":758,"height":426,"caption":"CakePHP"},{"@type":"BreadcrumbList","@id":"https:\/\/thiagorossi.com.br\/blog\/rotas-no-cakephp\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/thiagorossi.com.br\/blog\/"},{"@type":"ListItem","position":2,"name":"Rotas no CakePHP"}]},{"@type":"WebSite","@id":"https:\/\/thiagorossi.com.br\/blog\/#website","url":"https:\/\/thiagorossi.com.br\/blog\/","name":"THIAGO ROSSI","description":"Mais de 20 anos de experi\u00eancia no mercado de TI!","publisher":{"@id":"https:\/\/thiagorossi.com.br\/blog\/#organization"},"alternateName":"TR | CURSO WEB DEV","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/thiagorossi.com.br\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-BR"},{"@type":"Organization","@id":"https:\/\/thiagorossi.com.br\/blog\/#organization","name":"THIAGO ROSSI","alternateName":"TR | CURSO WEB DEV","url":"https:\/\/thiagorossi.com.br\/blog\/","logo":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/thiagorossi.com.br\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/04\/new-logo.webp","contentUrl":"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/04\/new-logo.webp","width":300,"height":300,"caption":"THIAGO ROSSI"},"image":{"@id":"https:\/\/thiagorossi.com.br\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/linkedin.com\/in\/thiagox86"]},{"@type":"Person","@id":"https:\/\/thiagorossi.com.br\/blog\/#\/schema\/person\/5f28286948ec2afdeb2e044a2196cd87","name":"Thiago Rossi","image":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/secure.gravatar.com\/avatar\/bb28b4665f4162bab9fbef8db5a7f00597f79ab90ece9a67189bb6bce78d5786?s=96&d=retro&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/bb28b4665f4162bab9fbef8db5a7f00597f79ab90ece9a67189bb6bce78d5786?s=96&d=retro&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/bb28b4665f4162bab9fbef8db5a7f00597f79ab90ece9a67189bb6bce78d5786?s=96&d=retro&r=g","caption":"Thiago Rossi"},"description":"Com mais de 20 anos de jornada na tecnologia, minha trajet\u00f3ria evoluiu do ensino t\u00e9cnico \u00e0 arquitetura de sistemas complexos. Hoje, foco minha expertise no desenvolvimento de solu\u00e7\u00f5es de Intelig\u00eancia Artificial nativa e an\u00e1lise de dados p\u00fablicos, utilizando o ecossistema PHP para transformar dados brutos em transpar\u00eancia e efici\u00eancia. Como autor e desenvolvedor, acredito na democratiza\u00e7\u00e3o do conhecimento. Essa vis\u00e3o resultou em uma biblioteca de mais de 530 artigos gratuitos, cobrindo desde a base do WebDev e Infraestrutura at\u00e9 os bastidores da ind\u00fastria de Jogos e IA. No universo de Game Design, sou autor do livro \"GDD \u2013 O Guia Definitivo\" e documento ativamente meus processos atrav\u00e9s de DevLogs, unindo rigor t\u00e9cnico e criatividade em projetos desenvolvidos com GDevelop 5. Meu compromisso \u00e9 conectar engenharia de ponta com as reais oportunidades do mercado de tecnologia.","sameAs":["https:\/\/thiagorossi.com.br\/blog","https:\/\/instagram.com\/thiagorossix86","https:\/\/linkedin.com\/in\/thiagox86"],"url":"https:\/\/thiagorossi.com.br\/blog\/author\/thiagorossi\/"}]}},"_links":{"self":[{"href":"https:\/\/thiagorossi.com.br\/blog\/wp-json\/wp\/v2\/posts\/5873","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/thiagorossi.com.br\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/thiagorossi.com.br\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/thiagorossi.com.br\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/thiagorossi.com.br\/blog\/wp-json\/wp\/v2\/comments?post=5873"}],"version-history":[{"count":2,"href":"https:\/\/thiagorossi.com.br\/blog\/wp-json\/wp\/v2\/posts\/5873\/revisions"}],"predecessor-version":[{"id":5875,"href":"https:\/\/thiagorossi.com.br\/blog\/wp-json\/wp\/v2\/posts\/5873\/revisions\/5875"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/thiagorossi.com.br\/blog\/wp-json\/wp\/v2\/media\/5819"}],"wp:attachment":[{"href":"https:\/\/thiagorossi.com.br\/blog\/wp-json\/wp\/v2\/media?parent=5873"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/thiagorossi.com.br\/blog\/wp-json\/wp\/v2\/categories?post=5873"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/thiagorossi.com.br\/blog\/wp-json\/wp\/v2\/tags?post=5873"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}