{"id":616,"date":"2019-12-03T09:45:16","date_gmt":"2019-12-03T12:45:16","guid":{"rendered":"https:\/\/micheladrianomedeiros.com.br\/blog\/?p=616"},"modified":"2019-12-03T09:45:17","modified_gmt":"2019-12-03T12:45:17","slug":"javalin-3-2","status":"publish","type":"post","link":"https:\/\/micheladrianomedeiros.com.br\/blog\/javalin-3-2\/","title":{"rendered":"Javalin 3 #2"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\"><strong>Cookie Store<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A fun\u00e7\u00e3o ctx.cookieStore() fornece um conveniente caminho para compartilhar informa\u00e7\u00f5es entre handlers, request ou at\u00e9 mesmo servidores:<\/p>\n\n\n\n<link rel=\"stylesheet\" href=\"https:\/\/javalin.io\/css\/main.css\">\n<script src=\"https:\/\/javalin.io\/js\/scripts.js\"><\/script>\n   \n <style>\/* Styles that affect the length of the document *\/\np code,\nli code {\n    font-size: 90%;\n    letter-spacing: -0.5px;\n    border: 1px solid #ccc;\n    padding: 1px 3px;\n}\n\n.multitab-code pre {\n    margin-top: 0;\n    border-radius: 0 0 5px 5px;\n}\n\n.multitab-code div[data-tab] {\n    display: none;\n}\n<\/style>\n\n<div class=\"language-java highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code><span class=\"n\">ctx<\/span><span class=\"o\">.<\/span><span class=\"na\">cookieStore<\/span><span class=\"o\">(<\/span><span class=\"n\">key<\/span><span class=\"o\">,<\/span> <span class=\"n\">value<\/span><span class=\"o\">);<\/span> <span class=\"c1\">\/\/ store any type of value<\/span>\n<span class=\"n\">ctx<\/span><span class=\"o\">.<\/span><span class=\"na\">cookieStore<\/span><span class=\"o\">(<\/span><span class=\"n\">key<\/span><span class=\"o\">);<\/span> <span class=\"c1\">\/\/ read any type of value<\/span>\n<span class=\"n\">ctx<\/span><span class=\"o\">.<\/span><span class=\"na\">clearCookieStore<\/span><span class=\"o\">();<\/span> <span class=\"c1\">\/\/ clear the cookie-store<\/span>\n<\/code><\/pre><\/div><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">O cookieStore funciona desta maneira:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">1. O primeiro handler que combina\na entrada do request que ir\u00e1 popular o cookie-store-map com dados guardados no\ncookie (caso exista).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">2. Este map pode agora ser\nutilizado como um estado entre handlers no mesmo ciclo de request, bastante parecido\ncom o ctx.attribute().<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">3. No fim do ciclo do request,\no cookie-store-map \u00e9 serializado, base64-encoded e escrito no response como um\ncookie. Isto permite voc\u00ea dividir o map entre requests e servers (no caso voc\u00ea\nest\u00e1 executando m\u00faltiplos servidores por tr\u00e1s de um load-balancer)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Exemplo:<\/strong><\/p>\n\n\n\n<link rel=\"stylesheet\" href=\"https:\/\/javalin.io\/css\/main.css\">\n<script src=\"https:\/\/javalin.io\/js\/scripts.js\"><\/script>\n   \n <style>\/* Styles that affect the length of the document *\/\np code,\nli code {\n    font-size: 90%;\n    letter-spacing: -0.5px;\n    border: 1px solid #ccc;\n    padding: 1px 3px;\n}\n\n.multitab-code pre {\n    margin-top: 0;\n    border-radius: 0 0 5px 5px;\n}\n\n.multitab-code div[data-tab] {\n    display: none;\n}\n<\/style>\n<div class=\"multitab-code\" data-tab=\"1\">\n<ul>\n    <li data-tab=\"1\">Java<\/li>\n    <li data-tab=\"2\">Kotlin<\/li>\n<\/ul>\n<div data-tab=\"1\">\n    <div class=\"language-java highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code><span class=\"n\">serverOneApp<\/span><span class=\"o\">.<\/span><span class=\"na\">post<\/span><span class=\"o\">(<\/span><span class=\"s\">\"\/cookie-storer\"<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span> <span class=\"n\">ctx<\/span> <span class=\"o\">-&gt;<\/span>\n    <span class=\"n\">ctx<\/span><span class=\"o\">.<\/span><span class=\"na\">cookieStore<\/span><span class=\"o\">(<\/span><span class=\"s\">\"string\"<\/span><span class=\"o\">,<\/span> <span class=\"s\">\"Hello world!\"<\/span><span class=\"o\">);<\/span>\n    <span class=\"n\">ctx<\/span><span class=\"o\">.<\/span><span class=\"na\">cookieStore<\/span><span class=\"o\">(<\/span><span class=\"s\">\"i\"<\/span><span class=\"o\">,<\/span> <span class=\"mi\">42<\/span><span class=\"o\">);<\/span>\n    <span class=\"n\">ctx<\/span><span class=\"o\">.<\/span><span class=\"na\">cookieStore<\/span><span class=\"o\">(<\/span><span class=\"s\">\"list\"<\/span><span class=\"o\">,<\/span> <span class=\"nc\">Arrays<\/span><span class=\"o\">.<\/span><span class=\"na\">asList<\/span><span class=\"o\">(<\/span><span class=\"s\">\"One\"<\/span><span class=\"o\">,<\/span> <span class=\"s\">\"Two\"<\/span><span class=\"o\">,<\/span> <span class=\"s\">\"Three\"<\/span><span class=\"o\">));<\/span>\n<span class=\"o\">}<\/span>\n<span class=\"n\">serverTwoApp<\/span><span class=\"o\">.<\/span><span class=\"na\">get<\/span><span class=\"o\">(<\/span><span class=\"s\">\"\/cookie-reader\"<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span> <span class=\"n\">ctx<\/span> <span class=\"o\">-&gt;<\/span> <span class=\"c1\">\/\/ runs on a different server than serverOneApp<\/span>\n    <span class=\"nc\">String<\/span> <span class=\"n\">string<\/span> <span class=\"o\">=<\/span> <span class=\"n\">ctx<\/span><span class=\"o\">.<\/span><span class=\"na\">cookieStore<\/span><span class=\"o\">(<\/span><span class=\"s\">\"string\"<\/span><span class=\"o\">)<\/span>\n    <span class=\"kt\">int<\/span> <span class=\"n\">i<\/span> <span class=\"o\">=<\/span> <span class=\"n\">ctx<\/span><span class=\"o\">.<\/span><span class=\"na\">cookieStore<\/span><span class=\"o\">(<\/span><span class=\"s\">\"i\"<\/span><span class=\"o\">)<\/span>\n    <span class=\"nc\">List<\/span><span class=\"o\">&lt;<\/span><span class=\"nc\">String<\/span><span class=\"o\">&gt;<\/span> <span class=\"n\">list<\/span> <span class=\"o\">=<\/span> <span class=\"n\">ctx<\/span><span class=\"o\">.<\/span><span class=\"na\">cookieStore<\/span><span class=\"o\">(<\/span><span class=\"s\">\"list\"<\/span><span class=\"o\">)<\/span>\n<span class=\"o\">}<\/span>\n<\/code><\/pre><\/div>    <\/div>\n  <\/div>\n<div data-tab=\"2\">\n    <div class=\"language-kotlin highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code><span class=\"n\">serverOneApp<\/span><span class=\"p\">.<\/span><span class=\"nf\">post<\/span><span class=\"p\">(<\/span><span class=\"s\">\"\/cookie-storer\"<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span> <span class=\"n\">ctx<\/span> <span class=\"p\">-&gt;<\/span>\n    <span class=\"n\">ctx<\/span><span class=\"p\">.<\/span><span class=\"nf\">cookieStore<\/span><span class=\"p\">(<\/span><span class=\"s\">\"string\"<\/span><span class=\"p\">,<\/span> <span class=\"s\">\"Hello world!\"<\/span><span class=\"p\">)<\/span>\n    <span class=\"n\">ctx<\/span><span class=\"p\">.<\/span><span class=\"nf\">cookieStore<\/span><span class=\"p\">(<\/span><span class=\"s\">\"i\"<\/span><span class=\"p\">,<\/span> <span class=\"m\">42<\/span><span class=\"p\">)<\/span>\n    <span class=\"n\">ctx<\/span><span class=\"p\">.<\/span><span class=\"nf\">cookieStore<\/span><span class=\"p\">(<\/span><span class=\"s\">\"list\"<\/span><span class=\"p\">,<\/span> <span class=\"nf\">listOf<\/span><span class=\"p\">(<\/span><span class=\"s\">\"One\"<\/span><span class=\"p\">,<\/span> <span class=\"s\">\"Two\"<\/span><span class=\"p\">,<\/span> <span class=\"s\">\"Three\"<\/span><span class=\"p\">))<\/span>\n<span class=\"p\">}<\/span>\n<span class=\"n\">serverTwoApp<\/span><span class=\"p\">.<\/span><span class=\"k\">get<\/span><span class=\"p\">(<\/span><span class=\"s\">\"\/cookie-reader\"<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span> <span class=\"n\">ctx<\/span> <span class=\"p\">-&gt;<\/span> <span class=\"c1\">\/\/ runs on a different server than serverOneApp<\/span>\n    <span class=\"kd\">val<\/span> <span class=\"py\">string<\/span> <span class=\"p\">=<\/span> <span class=\"n\">ctx<\/span><span class=\"p\">.<\/span><span class=\"n\">cookieStore<\/span><span class=\"p\">&lt;<\/span><span class=\"nc\">String<\/span><span class=\"p\">&gt;(<\/span><span class=\"s\">\"string\"<\/span><span class=\"p\">)<\/span>\n    <span class=\"kd\">val<\/span> <span class=\"py\">i<\/span> <span class=\"p\">=<\/span> <span class=\"n\">ctx<\/span><span class=\"p\">.<\/span><span class=\"n\">cookieStore<\/span><span class=\"p\">&lt;<\/span><span class=\"nc\">Int<\/span><span class=\"p\">&gt;(<\/span><span class=\"s\">\"i\"<\/span><span class=\"p\">)<\/span>\n    <span class=\"kd\">val<\/span> <span class=\"py\">list<\/span> <span class=\"p\">=<\/span> <span class=\"n\">ctx<\/span><span class=\"p\">.<\/span><span class=\"n\">cookieStore<\/span><span class=\"p\">&lt;<\/span><span class=\"nc\">List<\/span><span class=\"p\">&lt;<\/span><span class=\"nc\">String<\/span><span class=\"p\">&gt;&gt;(<\/span><span class=\"s\">\"list\"<\/span><span class=\"p\">)<\/span>\n<span class=\"p\">}<\/span>\n<\/code><\/pre><\/div>    <\/div>\n  <\/div>\n<\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Desde que o cliente guarda o\ncookie, o get request para o serverTwoApp ir\u00e1 ser capaz de recuperar as informa\u00e7\u00f5es\nque foram passadas via post para serverOneApp.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Lembre-se que os cookies t\u00eam no m\u00e1ximo 4kb.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Context extensions<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Context extensions fornece\npara o desenvolvedor Java uma maneira de estender o objeto Context.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Um dos mais populares recursos\ndo Kotlin \u00e9 a extension functions. Quando trabalhar com um objeto que n\u00e3o seja\nJava, voc\u00ea muitas vezes termina fazendo MyUtil.action(object, &#8230;).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Se voc\u00ea, por exemplo, quiser serializar um objeto e configurar o resultado no Context, voc\u00ea pode fazer:<\/p>\n\n\n\n<link rel=\"stylesheet\" href=\"https:\/\/javalin.io\/css\/main.css\">\n<script src=\"https:\/\/javalin.io\/js\/scripts.js\"><\/script>\n   \n <style>\/* Styles that affect the length of the document *\/\np code,\nli code {\n    font-size: 90%;\n    letter-spacing: -0.5px;\n    border: 1px solid #ccc;\n    padding: 1px 3px;\n}\n\n.multitab-code pre {\n    margin-top: 0;\n    border-radius: 0 0 5px 5px;\n}\n\n.multitab-code div[data-tab] {\n    display: none;\n}\n<\/style>\n<div class=\"language-java highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code><span class=\"n\">app<\/span><span class=\"o\">.<\/span><span class=\"na\">get<\/span><span class=\"o\">(<\/span><span class=\"s\">\"\/\"<\/span><span class=\"o\">,<\/span> <span class=\"n\">ctx<\/span> <span class=\"o\">-&gt;<\/span> <span class=\"nc\">MyMapperUtil<\/span><span class=\"o\">.<\/span><span class=\"na\">serialize<\/span><span class=\"o\">(<\/span><span class=\"n\">ctx<\/span><span class=\"o\">,<\/span> <span class=\"n\">myMapper<\/span><span class=\"o\">,<\/span> <span class=\"n\">myObject<\/span><span class=\"o\">));<\/span> <span class=\"c1\">\/\/ three args, what happens where?<\/span>\n<\/code><\/pre><\/div><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Com context extensions voc\u00ea pode adicionar extens\u00f5es no context:<\/p>\n\n\n\n<link rel=\"stylesheet\" href=\"https:\/\/javalin.io\/css\/main.css\">\n<script src=\"https:\/\/javalin.io\/js\/scripts.js\"><\/script>\n   \n <style>\/* Styles that affect the length of the document *\/\np code,\nli code {\n    font-size: 90%;\n    letter-spacing: -0.5px;\n    border: 1px solid #ccc;\n    padding: 1px 3px;\n}\n\n.multitab-code pre {\n    margin-top: 0;\n    border-radius: 0 0 5px 5px;\n}\n\n.multitab-code div[data-tab] {\n    display: none;\n}\n<\/style>\n<div class=\"language-java highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code><span class=\"n\">app<\/span><span class=\"o\">.<\/span><span class=\"na\">get<\/span><span class=\"o\">(<\/span><span class=\"s\">\"\/\"<\/span><span class=\"o\">,<\/span> <span class=\"n\">ctx<\/span> <span class=\"o\">-&gt;<\/span> <span class=\"n\">ctx<\/span><span class=\"o\">.<\/span><span class=\"na\">use<\/span><span class=\"o\">(<\/span><span class=\"nc\">MyMapper<\/span><span class=\"o\">.<\/span><span class=\"na\">class<\/span><span class=\"o\">).<\/span><span class=\"na\">serialize<\/span><span class=\"o\">(<\/span><span class=\"n\">object<\/span><span class=\"o\">));<\/span> <span class=\"c1\">\/\/ use MyMapper to serialize object<\/span>\n<\/code><\/pre><\/div><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Context extensions deve ser adicionado antes de ser utilizado, isto pode tipicamente ser feito primeiro (before) no filtro do seu app:<\/p>\n\n\n\n\n<link rel=\"stylesheet\" href=\"https:\/\/javalin.io\/css\/main.css\">\n<script src=\"https:\/\/javalin.io\/js\/scripts.js\"><\/script>\n   \n <style>\/* Styles that affect the length of the document *\/\np code,\nli code {\n    font-size: 90%;\n    letter-spacing: -0.5px;\n    border: 1px solid #ccc;\n    padding: 1px 3px;\n}\n\n.multitab-code pre {\n    margin-top: 0;\n    border-radius: 0 0 5px 5px;\n}\n\n.multitab-code div[data-tab] {\n    display: none;\n}\n<\/style>\n<div class=\"language-java highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code><span class=\"n\">app<\/span><span class=\"o\">.<\/span><span class=\"na\">before<\/span><span class=\"o\">(<\/span><span class=\"n\">ctx<\/span> <span class=\"o\">-&gt;<\/span> <span class=\"n\">ctx<\/span><span class=\"o\">.<\/span><span class=\"na\">register<\/span><span class=\"o\">(<\/span><span class=\"nc\">MyMapper<\/span><span class=\"o\">.<\/span><span class=\"na\">class<\/span><span class=\"o\">,<\/span> <span class=\"k\">new<\/span> <span class=\"nc\">MyMapper<\/span><span class=\"o\">(<\/span><span class=\"n\">ctx<\/span><span class=\"o\">,<\/span> <span class=\"n\">otherDependency<\/span><span class=\"o\">));<\/span>\n<\/code><\/pre><\/div><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>WebSockets<\/strong> <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Javalin \u00e9 muito intuitivo para utilizar o WebSockets. Voc\u00ea declara um endpoint com um caminho e configura um diferente event handlers no lambda:<\/p>\n\n\n\n<link rel=\"stylesheet\" href=\"https:\/\/javalin.io\/css\/main.css\">\n<script src=\"https:\/\/javalin.io\/js\/scripts.js\"><\/script>\n   \n <style>\/* Styles that affect the length of the document *\/\np code,\nli code {\n    font-size: 90%;\n    letter-spacing: -0.5px;\n    border: 1px solid #ccc;\n    padding: 1px 3px;\n}\n\n.multitab-code pre {\n    margin-top: 0;\n    border-radius: 0 0 5px 5px;\n}\n\n.multitab-code div[data-tab] {\n    display: none;\n}\n<\/style>\n<div class=\"multitab-code\" data-tab=\"1\">\n<ul>\n    <li data-tab=\"1\">Java<\/li>\n    <li data-tab=\"2\">Kotlin<\/li>\n<\/ul>\n<div data-tab=\"1\">\n    <div class=\"language-java highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code><span class=\"n\">app<\/span><span class=\"o\">.<\/span><span class=\"na\">ws<\/span><span class=\"o\">(<\/span><span class=\"s\">\"\/websocket\/:path\"<\/span><span class=\"o\">,<\/span> <span class=\"n\">ws<\/span> <span class=\"o\">-&gt;<\/span> <span class=\"o\">{<\/span>\n    <span class=\"n\">ws<\/span><span class=\"o\">.<\/span><span class=\"na\">onConnect<\/span><span class=\"o\">(<\/span><span class=\"n\">ctx<\/span> <span class=\"o\">-&gt;<\/span> <span class=\"nc\">System<\/span><span class=\"o\">.<\/span><span class=\"na\">out<\/span><span class=\"o\">.<\/span><span class=\"na\">println<\/span><span class=\"o\">(<\/span><span class=\"s\">\"Connected\"<\/span><span class=\"o\">));<\/span>\n<span class=\"o\">});<\/span>\n<\/code><\/pre><\/div>    <\/div>\n  <\/div>\n<div data-tab=\"2\">\n    <div class=\"language-kotlin highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code><span class=\"n\">app<\/span><span class=\"p\">.<\/span><span class=\"nf\">ws<\/span><span class=\"p\">(<\/span><span class=\"s\">\"\/websocket\/:path\"<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span> <span class=\"n\">ws<\/span> <span class=\"p\">-&gt;<\/span>\n    <span class=\"n\">ws<\/span><span class=\"p\">.<\/span><span class=\"nf\">onConnect<\/span> <span class=\"p\">{<\/span> <span class=\"n\">ctx<\/span> <span class=\"p\">-&gt;<\/span> <span class=\"nf\">println<\/span><span class=\"p\">(<\/span><span class=\"s\">\"Connected\"<\/span><span class=\"p\">)<\/span> <span class=\"p\">}<\/span>\n<span class=\"p\">}<\/span>\n<\/code><\/pre><\/div>    <\/div>\n  <\/div>\n<\/div>\n\n\n\n<p class=\"wp-block-paragraph\">H\u00e1 no total cinco eventos suportados:<\/p>\n\n\n\n<link rel=\"stylesheet\" href=\"https:\/\/javalin.io\/css\/main.css\">\n<script src=\"https:\/\/javalin.io\/js\/scripts.js\"><\/script>\n   \n <style>\/* Styles that affect the length of the document *\/\np code,\nli code {\n    font-size: 90%;\n    letter-spacing: -0.5px;\n    border: 1px solid #ccc;\n    padding: 1px 3px;\n}\n\n.multitab-code pre {\n    margin-top: 0;\n    border-radius: 0 0 5px 5px;\n}\n\n.multitab-code div[data-tab] {\n    display: none;\n}\n<\/style>\n<div class=\"language-java highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code><span class=\"n\">ws<\/span><span class=\"o\">.<\/span><span class=\"na\">onConnect<\/span><span class=\"o\">(<\/span><span class=\"nc\">WsConnectContext<\/span><span class=\"o\">)<\/span>\n<span class=\"n\">ws<\/span><span class=\"o\">.<\/span><span class=\"na\">onError<\/span><span class=\"o\">(<\/span><span class=\"nc\">WsErrorContext<\/span><span class=\"o\">)<\/span>\n<span class=\"n\">ws<\/span><span class=\"o\">.<\/span><span class=\"na\">onClose<\/span><span class=\"o\">(<\/span><span class=\"nc\">WsCloseContext<\/span><span class=\"o\">)<\/span>\n<span class=\"n\">ws<\/span><span class=\"o\">.<\/span><span class=\"na\">onMessage<\/span><span class=\"o\">(<\/span><span class=\"nc\">WsMessageContext<\/span><span class=\"o\">)<\/span>\n<span class=\"n\">ws<\/span><span class=\"o\">.<\/span><span class=\"na\">onBinaryMessage<\/span><span class=\"o\">(<\/span><span class=\"nc\">WsBinaryMessageContext<\/span><span class=\"o\">)<\/span>\n<\/code><\/pre><\/div><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Os diferentes sabores de WsContext exp\u00f5e diferentes coisas, como por exemplo, WsMessageContext tem o m\u00e9todo .message() o qual d\u00e1 a mensagem que o cliente mandou. As diferen\u00e7as entre os diferentes contexts \u00e9 pequena.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Fonte:  <a href=\"https:\/\/javalin.io\/documentation\">https:\/\/javalin.io\/documentation<\/a> <\/p>\n","protected":false},"excerpt":{"rendered":"<p>Cookie Store A fun\u00e7\u00e3o ctx.cookieStore() fornece um conveniente caminho para compartilhar informa\u00e7\u00f5es entre handlers, request ou at\u00e9 mesmo servidores: ctx.cookieStore(key, value); \/\/ store any type of value ctx.cookieStore(key); \/\/ read any type of value ctx.clearCookieStore(); \/\/ clear the cookie-store O cookieStore funciona desta maneira: 1. O primeiro handler que combina a entrada do request que [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":280,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[57,58],"tags":[],"class_list":["post-616","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-framework","category-javalin"],"_links":{"self":[{"href":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-json\/wp\/v2\/posts\/616","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=616"}],"version-history":[{"count":2,"href":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-json\/wp\/v2\/posts\/616\/revisions"}],"predecessor-version":[{"id":852,"href":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-json\/wp\/v2\/posts\/616\/revisions\/852"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-json\/wp\/v2\/media\/280"}],"wp:attachment":[{"href":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-json\/wp\/v2\/media?parent=616"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-json\/wp\/v2\/categories?post=616"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-json\/wp\/v2\/tags?post=616"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}