{"id":1253,"date":"2024-08-12T22:30:00","date_gmt":"2024-08-13T01:30:00","guid":{"rendered":"https:\/\/kangaroo.host\/blog\/htmx-o-que-e-como-funciona\/"},"modified":"2024-11-01T23:08:52","modified_gmt":"2024-11-02T02:08:52","slug":"htmx-o-que-e-como-funciona","status":"publish","type":"post","link":"https:\/\/kangaroo.host\/blog\/htmx-o-que-e-como-funciona\/","title":{"rendered":"HTMX: O que \u00e9 e como funciona?"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Ol\u00e1, Kangaroozinho. Seja bem-vindo de volta! Que o <a href=\"https:\/\/kangaroo.host\/blog\/como-o-javascript-mudou-a-web\/\" data-type=\"post\" data-id=\"8471\">JavaScript<\/a> moldou muito da WEB que conhecemos hoje, todos sabemos muito bem! Com ele, muitos sites come\u00e7aram a se tornais mais din\u00e2micos e interativos, mas essa linguagem de programa\u00e7\u00e3o ainda pode ser uma barreira para alguns.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Assim, o <a href=\"https:\/\/htmx.org\/\" target=\"_blank\" rel=\"noopener\">HTMX<\/a> surge como uma nova proposta de facilitar o uso do JavaScript atrav\u00e9s do Ajax, permitindo usar o pr\u00f3prio HTML b\u00e1sico da p\u00e1gina para definir o comportamento de intera\u00e7\u00e3o, permitindo a manipula\u00e7\u00e3o do DOM do visitante.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Para entender um pouco mais como isso funciona e como implementar esse recurso em seu site, confira at\u00e9 o final este nosso artigo mais que especial.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Sum\u00e1rio<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li>O que \u00e9?<\/li>\n\n\n\n<li>Como funciona?<\/li>\n\n\n\n<li>Exemplos de c\u00f3digo<\/li>\n\n\n\n<li>Conclus\u00e3o<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">O que \u00e9 o HTMX?<\/h2>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"https:\/\/kangaroo.host\/blog\/wp-content\/uploads\/2024\/08\/Site-oficial-HTMX.png\" alt=\"Site oficial HTMX\" class=\"wp-image-9069\"\/><figcaption class=\"wp-element-caption\">Imagem: Site oficial HTMX<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">O HTMX \u00e9 uma biblioteca muito poderosa e altamente funcional que pode ser incorporada diretamente no c\u00f3digo HTML de seu site. Seu principal objetivo \u00e9 facilitar o uso do JavaScript em seus projetos, sem precisar us\u00e1-lo diretamente e permitir a manipula\u00e7\u00e3o de elementos da p\u00e1gina de forma totalmente descomplicada.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Al\u00e9m disso, devido \u00e0 sua metodologia de funcionamento bastante particular (que j\u00e1 vamos explicar), o HTMX permite que at\u00e9 usu\u00e1rios menos habituados com programa\u00e7\u00e3o front-end consigam \u00f3timos resultados em termos de dinamismo e interatividade para as p\u00e1ginas.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u00c9 poss\u00edvel dizer que essa biblioteca permite que o HTML funcione com &#8220;ester\u00f3ides&#8221;, praticamente concedendo super-poderes e a possibilidade de que o front-end (atrav\u00e9s do HTML) execute requisi\u00e7\u00f5es para um end-point do seu back-end via Ajax, sendo esse Ajax acionado pela sintaxe pr\u00f3pria do HTMX.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Seu uso \u00e9 bastante interessante por permitir reduzir a complexidade geral do projeto, j\u00e1 que todo o front-end est\u00e1, no fim das contas, configurado apenas em HTML, j\u00e1 que o HTMX \u00e9 acionado atrav\u00e9s de atributos HTML, e \u00e9 justamente por isso que essa biblioteca se torna t\u00e3o vers\u00e1til e at\u00e9 mesmo convidativa para usu\u00e1rios iniciantes em desenvolvimento WEB.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Como ele funciona?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Os efeitos de interatividade s\u00e3o poss\u00edveis porque o HTMX faz com que o pr\u00f3prio back-end processe as informa\u00e7\u00f5es que ser\u00e3o manipuladas, sem que isso seja feito diretamente no navegador do visitante, e as grandes vantagens disso s\u00e3o justamente manter toda a estrutura front-end em um mesmo contexto de linguagem quanto reduzir a complexidade dessa parte do projeto.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Isso pode parecer um tanto confuso a princ\u00edpio, mas a grande sacada dessa biblioteca \u00e9 permitir que voc\u00ea adicione atributos HTML que s\u00e3o espec\u00edficos do HTMX, e com base nos atributos configurados \u00e9 poss\u00edvel disparar requisi\u00e7\u00f5es ao endpoint definido.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Como a principal abordagem do HTMX \u00e9 ser configurado atrav\u00e9s do HTML e fazer com que o servidor retorne uma resposta tamb\u00e9m em HTML, essa biblioteca pode ser usada sem problemas junto de quase qualquer linguagem de programa\u00e7\u00e3o, j\u00e1 que basta ter o HTML b\u00e1sico da p\u00e1gina para definir os par\u00e2metros e qualquer linguagem de programa\u00e7\u00e3o pode processar a requisi\u00e7\u00e3o e devolver uma resposta tamb\u00e9m em HTML.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Assim, em termos mais pr\u00e1ticos, essa resposta HTML retornada pelo back-end serve para substituir imediatamente outras informa\u00e7\u00f5es da p\u00e1gina, atrav\u00e9s da manipula\u00e7\u00e3o de DOM, o que permite criar p\u00e1ginas &#8220;reativas&#8221; e com interatividade.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Exemplos<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Como todo aprendizado sempre \u00e9 melhor com exemplos, vamos simular um caso pr\u00e1tico de um formul\u00e1rio de contato que, ap\u00f3s disparado, exibe uma notifica\u00e7\u00e3o de sucesso no envio. Para isso, vamos come\u00e7ar pelo nosso c\u00f3digo HTML b\u00e1sico, j\u00e1 com o HTMX importado:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro padding-bottom-disabled cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(2 * 0.6 * .875rem);--cbp-line-highlight-color:rgba(201, 218, 248, 0.2);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff\"><svg  width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"&lt;!DOCTYPE html&gt;\n&lt;html lang=&quot;pt-BR&quot;&gt;\n&lt;head&gt;\n    &lt;meta charset=&quot;UTF-8&quot;&gt;\n    &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;\n    &lt;title&gt;Formul\u00e1rio de Contato&lt;\/title&gt;\n    &lt;link href=&quot;https:\/\/stackpath.bootstrapcdn.com\/bootstrap\/4.5.2\/css\/bootstrap.min.css&quot; rel=&quot;stylesheet&quot;&gt;\n&lt;\/head&gt;\n&lt;body&gt;\n    &lt;div class=&quot;container mt-5&quot;&gt;\n        &lt;h1 class=&quot;text-center&quot;&gt;Formul\u00e1rio de Contato&lt;\/h1&gt;\n        &lt;form hx-post=&quot;enviar.php&quot; hx-target=&quot;#contato&quot; hx-swap=&quot;beforeend&quot; id=&quot;contato&quot; class=&quot;mt-4&quot;&gt;\n            &lt;div class=&quot;form-group&quot;&gt;\n                &lt;label for=&quot;nome&quot;&gt;Nome:&lt;\/label&gt;\n                &lt;input type=&quot;text&quot; class=&quot;form-control&quot; id=&quot;nome&quot; name=&quot;nome&quot;&gt;\n            &lt;\/div&gt;\n            &lt;div class=&quot;form-group&quot;&gt;\n                &lt;label for=&quot;email&quot;&gt;Email:&lt;\/label&gt;\n                &lt;input type=&quot;email&quot; class=&quot;form-control&quot; id=&quot;email&quot; name=&quot;email&quot;&gt;\n            &lt;\/div&gt;\n            &lt;div class=&quot;form-group&quot;&gt;\n                &lt;label for=&quot;assunto&quot;&gt;Assunto:&lt;\/label&gt;\n                &lt;input type=&quot;text&quot; class=&quot;form-control&quot; id=&quot;assunto&quot; name=&quot;assunto&quot;&gt;\n            &lt;\/div&gt;\n            &lt;div class=&quot;form-group&quot;&gt;\n                &lt;label for=&quot;mensagem&quot;&gt;Mensagem:&lt;\/label&gt;\n                &lt;textarea class=&quot;form-control&quot; id=&quot;mensagem&quot; name=&quot;mensagem&quot; rows=&quot;4&quot;&gt;&lt;\/textarea&gt;\n            &lt;\/div&gt;\n            &lt;button type=&quot;submit&quot; class=&quot;btn btn-primary&quot;&gt;Enviar&lt;\/button&gt;\n        &lt;\/form&gt;\n    &lt;\/div&gt;\n    &lt;script src=&quot;https:\/\/unpkg.com\/htmx.org@2.0.1&quot;&gt;&lt;\/script&gt;\n&lt;\/body&gt;\n&lt;\/html&gt;\" style=\"color:#2e3440ff;display:none;background-color:#d8dee9ff\" aria-label=\"Copiar\" data-copied-text=\"Copiado!\" data-has-text-button=\"textSimple\" data-inside-header-type=\"headlights\" aria-live=\"polite\" class=\"code-block-pro-copy-button\"><span class=\"cbp-btn-text\">Copiar<\/span><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #81A1C1\">&lt;!DOCTYPE<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">html<\/span><span style=\"color: #81A1C1\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">&lt;html<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">lang<\/span><span style=\"color: #ECEFF4\">=<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">pt-BR<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #81A1C1\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">&lt;head&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">&lt;meta<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">charset<\/span><span style=\"color: #ECEFF4\">=<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">UTF-8<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #81A1C1\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">&lt;meta<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">name<\/span><span style=\"color: #ECEFF4\">=<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">viewport<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">content<\/span><span style=\"color: #ECEFF4\">=<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">width=device-width, initial-scale=1.0<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #81A1C1\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">&lt;title&gt;<\/span><span style=\"color: #D8DEE9FF\">Formul\u00e1rio de Contato<\/span><span style=\"color: #81A1C1\">&lt;\/title&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">&lt;link<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">href<\/span><span style=\"color: #ECEFF4\">=<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">https:\/\/stackpath.bootstrapcdn.com\/bootstrap\/4.5.2\/css\/bootstrap.min.css<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">rel<\/span><span style=\"color: #ECEFF4\">=<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">stylesheet<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #81A1C1\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">&lt;\/head&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">&lt;body&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">&lt;div<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">class<\/span><span style=\"color: #ECEFF4\">=<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">container mt-5<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #81A1C1\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #81A1C1\">&lt;h1<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">class<\/span><span style=\"color: #ECEFF4\">=<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">text-center<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #81A1C1\">&gt;<\/span><span style=\"color: #D8DEE9FF\">Formul\u00e1rio de Contato<\/span><span style=\"color: #81A1C1\">&lt;\/h1&gt;<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #81A1C1\">&lt;form<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">hx-post<\/span><span style=\"color: #ECEFF4\">=<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">enviar.php<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">hx-target<\/span><span style=\"color: #ECEFF4\">=<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">#contato<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">hx-swap<\/span><span style=\"color: #ECEFF4\">=<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">beforeend<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">id<\/span><span style=\"color: #ECEFF4\">=<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">contato<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">class<\/span><span style=\"color: #ECEFF4\">=<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">mt-4<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #81A1C1\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">            <\/span><span style=\"color: #81A1C1\">&lt;div<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">class<\/span><span style=\"color: #ECEFF4\">=<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">form-group<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #81A1C1\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">                <\/span><span style=\"color: #81A1C1\">&lt;label<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">for<\/span><span style=\"color: #ECEFF4\">=<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">nome<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #81A1C1\">&gt;<\/span><span style=\"color: #D8DEE9FF\">Nome:<\/span><span style=\"color: #81A1C1\">&lt;\/label&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">                <\/span><span style=\"color: #81A1C1\">&lt;input<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">type<\/span><span style=\"color: #ECEFF4\">=<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">text<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">class<\/span><span style=\"color: #ECEFF4\">=<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">form-control<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">id<\/span><span style=\"color: #ECEFF4\">=<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">nome<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">name<\/span><span style=\"color: #ECEFF4\">=<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">nome<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #81A1C1\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">            <\/span><span style=\"color: #81A1C1\">&lt;\/div&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">            <\/span><span style=\"color: #81A1C1\">&lt;div<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">class<\/span><span style=\"color: #ECEFF4\">=<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">form-group<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #81A1C1\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">                <\/span><span style=\"color: #81A1C1\">&lt;label<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">for<\/span><span style=\"color: #ECEFF4\">=<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">email<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #81A1C1\">&gt;<\/span><span style=\"color: #D8DEE9FF\">Email:<\/span><span style=\"color: #81A1C1\">&lt;\/label&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">                <\/span><span style=\"color: #81A1C1\">&lt;input<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">type<\/span><span style=\"color: #ECEFF4\">=<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">email<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">class<\/span><span style=\"color: #ECEFF4\">=<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">form-control<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">id<\/span><span style=\"color: #ECEFF4\">=<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">email<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">name<\/span><span style=\"color: #ECEFF4\">=<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">email<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #81A1C1\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">            <\/span><span style=\"color: #81A1C1\">&lt;\/div&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">            <\/span><span style=\"color: #81A1C1\">&lt;div<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">class<\/span><span style=\"color: #ECEFF4\">=<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">form-group<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #81A1C1\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">                <\/span><span style=\"color: #81A1C1\">&lt;label<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">for<\/span><span style=\"color: #ECEFF4\">=<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">assunto<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #81A1C1\">&gt;<\/span><span style=\"color: #D8DEE9FF\">Assunto:<\/span><span style=\"color: #81A1C1\">&lt;\/label&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">                <\/span><span style=\"color: #81A1C1\">&lt;input<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">type<\/span><span style=\"color: #ECEFF4\">=<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">text<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">class<\/span><span style=\"color: #ECEFF4\">=<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">form-control<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">id<\/span><span style=\"color: #ECEFF4\">=<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">assunto<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">name<\/span><span style=\"color: #ECEFF4\">=<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">assunto<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #81A1C1\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">            <\/span><span style=\"color: #81A1C1\">&lt;\/div&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">            <\/span><span style=\"color: #81A1C1\">&lt;div<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">class<\/span><span style=\"color: #ECEFF4\">=<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">form-group<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #81A1C1\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">                <\/span><span style=\"color: #81A1C1\">&lt;label<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">for<\/span><span style=\"color: #ECEFF4\">=<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">mensagem<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #81A1C1\">&gt;<\/span><span style=\"color: #D8DEE9FF\">Mensagem:<\/span><span style=\"color: #81A1C1\">&lt;\/label&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">                <\/span><span style=\"color: #81A1C1\">&lt;textarea<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">class<\/span><span style=\"color: #ECEFF4\">=<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">form-control<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">id<\/span><span style=\"color: #ECEFF4\">=<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">mensagem<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">name<\/span><span style=\"color: #ECEFF4\">=<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">mensagem<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">rows<\/span><span style=\"color: #ECEFF4\">=<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">4<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #81A1C1\">&gt;&lt;\/textarea&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">            <\/span><span style=\"color: #81A1C1\">&lt;\/div&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">            <\/span><span style=\"color: #81A1C1\">&lt;button<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">type<\/span><span style=\"color: #ECEFF4\">=<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">submit<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">class<\/span><span style=\"color: #ECEFF4\">=<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">btn btn-primary<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #81A1C1\">&gt;<\/span><span style=\"color: #D8DEE9FF\">Enviar<\/span><span style=\"color: #81A1C1\">&lt;\/button&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #81A1C1\">&lt;\/form&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">&lt;\/div&gt;<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #ECEFF4\">    <\/span><span style=\"color: #81A1C1\">&lt;script<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">src<\/span><span style=\"color: #ECEFF4\">=<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">https:\/\/unpkg.com\/htmx.org@2.0.1<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #81A1C1\">&gt;&lt;\/script&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">&lt;\/body&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">&lt;\/html&gt;<\/span><\/span><\/code><\/pre><span style=\"display:flex;align-items:flex-end;padding:10px;width:100%;justify-content:flex-start;background-color:#2e3440ff;color:#c8d0e0;font-size:12px;line-height:1;position:relative\">HTML<\/span><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">No c\u00f3digo de exemplo, temos apenas uma p\u00e1gina HTML bastante simples, que tem como conte\u00fado s\u00f3 um formul\u00e1rio. Por\u00e9m, observe os atributos adicionados dentro do nosso elemento do &lt;form> e como \u00e9 feita tamb\u00e9m a importa\u00e7\u00e3o da biblioteca para dentro do c\u00f3digo.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Agora, vamos falar um pouquinho mais desses atributos t\u00e3o especiais e o que cada um deles est\u00e1 fazendo em nosso c\u00f3digo. Antes de come\u00e7ar, \u00e9 interessante observar que todos eles est\u00e3o iniciados em <strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-luminous-vivid-orange-color\">hx-<\/mark><\/strong> o que \u00e9 uma conven\u00e7\u00e3o da biblioteca.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Por isso, todos atributos usados pelo HTMX sempre levar\u00e3o esse prefixo, o que vai nos ajudar muito a identificar eles mais facilmente, como os seguintes exemplos:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-luminous-vivid-orange-color\">hx-post<\/mark><\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">A diretiva hx-post orienta que aquele determinado elemento (quando acionado pelo seu gatilho) ir\u00e1 disparar uma requisi\u00e7\u00e3o do tipo <strong><em>POST <\/em><\/strong>para o endpoint informado. Aqui, temos uma fun\u00e7\u00e3o muito parecida com o que faria o <strong><em>action=&#8221;POST&#8221;<\/em><\/strong> utilizado normalmente.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Assim como definimos para que o elemento disparasse um <em>POST<\/em>, tamb\u00e9m \u00e9 totalmente poss\u00edvel usarmos outros tipos de requisi\u00e7\u00e3o aceitos pelo protocolo HTTP, como o <strong><em>GET, PUT, PATCH<\/em><\/strong>, etc. Para isso, basta trocar o nome do protocolo ap\u00f3s o hx-, como em <strong><em>hx-get<\/em><\/strong> ou <strong><em>hx-put<\/em><\/strong> por exemplo.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-luminous-vivid-orange-color\">hx-target<\/mark><\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">J\u00e1 o hx-target define qual elemento ser\u00e1 afetado pela resposta retornada pela resposta retornada pelo back-end. Em nosso exemplo, aqui \u00e9 onde definimos qual \u00e9 o elemento que ser\u00e1 manipulado para receber a resposta do endpoint php.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">O hx-target aceita informa\u00e7\u00f5es de acordo com os padr\u00f5es de seletor CSS, por isso \u00e9 poss\u00edvel definir como alvo uma classe, ID ou elemento de seu HTML. No exemplo acima, usamos o ID contato que est\u00e1 atrelado ao elemento &lt;form><\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-luminous-vivid-orange-color\">hx-swap<\/mark><\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">O atributo hx-swap define de que forma o elemento definido pelo hx-target ser\u00e1 manipulado, e existe uma s\u00e9rie de op\u00e7\u00f5es pr\u00e9-definidas para essa diretiva, que s\u00e3o elas:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>innerHTML <\/strong>(padr\u00e3o): substitui todo o HTML dentro do target pela resposta do endpoint;<\/li>\n\n\n\n<li><strong>outerHTML<\/strong>: substitui todo o HTML pela resposta retornada;<\/li>\n\n\n\n<li><strong>textContent<\/strong>: substitui todo o texto do elemento alvo sem analisar a reposta como um HTML;<\/li>\n\n\n\n<li><strong>beforebegin<\/strong>: posiciona a resposta antes do come\u00e7o elemento destino;<\/li>\n\n\n\n<li><strong>afterbegin<\/strong>: posiciona a resposta imediatamente ap\u00f3s o come\u00e7o do elemento alvo;<\/li>\n\n\n\n<li><strong>beforeend<\/strong>: posiciona a resposta ap\u00f3s o fim do elemento alvo;<\/li>\n\n\n\n<li><strong>afterend<\/strong>: posiciona a resposta imediatamente ap\u00f3s o in\u00edcio do elemento alvo;<\/li>\n\n\n\n<li><strong>delete<\/strong>: remove o elemento alvo;<\/li>\n\n\n\n<li><strong>none<\/strong>: n\u00e3o executa nenhuma a\u00e7\u00e3o com o elemento alvo.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-luminous-vivid-orange-color\">hx-trigger<\/mark><\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Outro atributo muito utilizado \u00e9 o hx-trigger, que define o gatilho que far\u00e1 com que a requisi\u00e7\u00e3o seja disparada. No exemplo acima, n\u00e3o foi necess\u00e1rio usar esse atributo por estarmos usando um formul\u00e1rio com um bot\u00e3o submit, que o HTMX nativamente j\u00e1 entende como um gatilho para a requisi\u00e7\u00e3o.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Por\u00e9m, \u00e9 poss\u00edvel criar bot\u00f5es que acionem gatilhos, por exemplo. Assim, quando clicados, imediatamente a requisi\u00e7\u00e3o \u00e9 disparada. Normalmente, a forma mais comum de configura\u00e7\u00e3o para esses casos seria atrav\u00e9s do <strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-luminous-vivid-orange-color\">hx-trigger=&#8221;click&#8221;<\/mark><\/strong> para que a requisi\u00e7\u00e3o ocorra a cada clique, ou com <strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-luminous-vivid-orange-color\">hx-trigger=&#8221;click once&#8221;<\/mark><\/strong> para que a requisi\u00e7\u00e3o seja disparada apenas ap\u00f3s o primeiro clique.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Agora, voltando ao nosso exemplo, abaixo temos o c\u00f3digo do nosso endpoint, que ser\u00e1 o arquivo enviar.php. Nele, definimos apenas um retorno de escrita de texto atrav\u00e9s do comando echo, que responder\u00e1 o texto do c\u00f3digo HTML que nos dar\u00e1 a notifica\u00e7\u00e3o de que o formul\u00e1rio foi enviado.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro padding-bottom-disabled cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff\"><svg  width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"&lt;?php\n\necho '\n&lt;div class=&quot;alert alert-success mt-4&quot;&gt;\n    &lt;strong&gt;Obrigado!&lt;\/strong&gt; Sua mensagem foi recebida com sucesso.\n&lt;\/div&gt;';\" style=\"color:#2e3440ff;display:none;background-color:#d8dee9ff\" aria-label=\"Copy\" data-copied-text=\"Copied!\" data-has-text-button=\"textSimple\" data-inside-header-type=\"headlights\" aria-live=\"polite\" class=\"code-block-pro-copy-button\"><span class=\"cbp-btn-text\">Copy<\/span><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #81A1C1\">&lt;?<\/span><span style=\"color: #D8DEE9FF\">php<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">echo<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #A3BE8C\">&lt;div class=&quot;alert alert-success mt-4&quot;&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #A3BE8C\">    &lt;strong&gt;Obrigado!&lt;\/strong&gt; Sua mensagem foi recebida com sucesso.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #A3BE8C\">&lt;\/div&gt;<\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #81A1C1\">;<\/span><\/span><\/code><\/pre><span style=\"display:flex;align-items:flex-end;padding:10px;width:100%;justify-content:flex-start;background-color:#2e3440ff;color:#c8d0e0;font-size:12px;line-height:1;position:relative\">PHP<\/span><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Por raz\u00f5es did\u00e1ticas, o c\u00f3digo acima apenas fornece a resposta de sucesso em todos os casos, sem validar se realmente foi enviado com sucesso ou n\u00e3o. Em um cen\u00e1rio real, considere ajustar a reposta de acordo com suas valida\u00e7\u00f5es de possibilidade de erros e l\u00f3gica de neg\u00f3cio.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Com todo esse cen\u00e1rio, temos o seguinte resultado ap\u00f3s enviar o formul\u00e1rio com o HTMX:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"https:\/\/kangaroo.host\/blog\/wp-content\/uploads\/2024\/08\/exemplo-com-htmx.gif\" alt=\"Exemplo formul\u00e1rio com htmx\" class=\"wp-image-9068\"\/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Conclus\u00e3o<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">O HTMX n\u00e3o somente emprega praticidade no desenvolvimento, como tamb\u00e9m pode ser uma \u00f3tima forma de melhorar a produtividade ao desenvolver projetos front-end, por sua capacidade de simplificar significativamente a complexidade de elementos interativos.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Seja iniciante ou experiente, essa biblioteca ainda sim \u00e9 n\u00e3o somente poderosa, como amig\u00e1vel para todos os tipos de projeto, atendendo \u00e0s mais variadas necessidades. Com o crescente sucesso que vem fazendo, com certeza \u00e9 uma tecnologia muito importante para se ficar de olho, j\u00e1 que sua ado\u00e7\u00e3o tem crescido cada vez mais nos \u00faltimos anos, e que s\u00f3 tende a aumentar ainda mais.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Esperamos que esse conte\u00fado introdut\u00f3rio ao HTMX possa ser \u00fatil para seus pr\u00f3ximos projetos, e n\u00e3o deixe de conferir a <a href=\"https:\/\/htmx.org\/docs\/\" target=\"_blank\" rel=\"noopener\">documenta\u00e7\u00e3o oficial<\/a> para um material ainda mais completo sobre a biblioteca. Por fim, n\u00e3o deixe de continuar acompanhando <a href=\"\/blog\">nosso blog<\/a> e nos vemos na pr\u00f3xima o\/<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ol\u00e1, Kangaroozinho. Seja bem-vindo de volta! Que o JavaScript moldou muito da WEB que conhecemos hoje, todos sabemos muito bem! Com ele, muitos sites come\u00e7aram a se tornais mais din\u00e2micos e interativos, mas essa linguagem de programa\u00e7\u00e3o ainda pode ser uma barreira para alguns. Assim, o HTMX surge como uma nova proposta de facilitar o [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":1255,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[71],"tags":[352,322,353,240,32],"class_list":["post-1253","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-desenvolvimento","tag-ajax","tag-dom","tag-htmx","tag-javascript","tag-site"],"_links":{"self":[{"href":"https:\/\/kangaroo.host\/blog\/wp-json\/wp\/v2\/posts\/1253","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kangaroo.host\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kangaroo.host\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kangaroo.host\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/kangaroo.host\/blog\/wp-json\/wp\/v2\/comments?post=1253"}],"version-history":[{"count":0,"href":"https:\/\/kangaroo.host\/blog\/wp-json\/wp\/v2\/posts\/1253\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kangaroo.host\/blog\/wp-json\/wp\/v2\/media\/1255"}],"wp:attachment":[{"href":"https:\/\/kangaroo.host\/blog\/wp-json\/wp\/v2\/media?parent=1253"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/kangaroo.host\/blog\/wp-json\/wp\/v2\/categories?post=1253"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kangaroo.host\/blog\/wp-json\/wp\/v2\/tags?post=1253"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}