{"id":2238,"date":"2016-04-29T00:41:35","date_gmt":"2016-04-29T00:41:35","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=2238"},"modified":"2016-04-29T00:41:35","modified_gmt":"2016-04-29T00:41:35","slug":"getting-started-ratpack-couchbase","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/pt\/getting-started-ratpack-couchbase\/","title":{"rendered":"Introdu\u00e7\u00e3o ao Ratpack e ao Couchbase"},"content":{"rendered":"<p>Recentemente, comecei a brincar com <a href=\"https:\/\/ratpack.io\/\">Ratpack<\/a>. \u00a0<img decoding=\"async\" align=\"right\" src=\"\/wp-content\/original-assets\/2016\/april\/getting-started-ratpack-couchbase\/ratpacklogo.png\" \/><\/p>\n<blockquote><p>\u00c9 um conjunto de bibliotecas Java para a cria\u00e7\u00e3o de aplicativos HTTP modernos.<\/p><\/blockquote>\n<p>Para ir al\u00e9m dessa defini\u00e7\u00e3o simples, o Ratpack \u00e9 n\u00e3o bloqueador, ass\u00edncrono e baseado em rede. Um pouco como o nosso <a href=\"https:\/\/developer.couchbase.com\/documentation\/server\/4.1\/sdks\/java-2.2\/java-intro.html?utm_source=blogs&#038;utm_medium=link&#038;utm_campaign=blogs\">Java SDK<\/a>. Portanto, ele \u00e9 um candidato natural para uma estrutura de aplicativo leve.<\/p>\n<p>Uma das primeiras coisas que voc\u00ea pode fazer ao testar uma nova estrutura da Web \u00e9 criar uma API b\u00e1sica. E a cria\u00e7\u00e3o de um CRUD simples \u00e9 natural quando voc\u00ea trabalha com um banco de dados de documentos como o Couchbase. Portanto, este post \u00e9 uma introdu\u00e7\u00e3o b\u00e1sica ao Ratpack, apresentando a abstra\u00e7\u00e3o do reposit\u00f3rio de entidades do Couchbase dispon\u00edvel com nosso Java SDK. N\u00e3o vou me concentrar na API em si, mas mais no mecanismo usado no Ratpack e no reposit\u00f3rio do Couchbase.<\/p>\n<h2>Criando um projeto Java do Ratpack<\/h2>\n<p>A maioria dos usu\u00e1rios do Ratpack que conhe\u00e7o tende a programar com Groovy. Normalmente, estou codificando em Java, portanto, \u00e9 isso que vou usar hoje. O <a href=\"https:\/\/ratpack.io\/manual\/current\/quick-start.html#quick_start\">in\u00edcio r\u00e1pido<\/a> No entanto, os guias que voc\u00ea encontrar\u00e1 para o Ratpack ter\u00e3o Groovy. O modelo lazybones \u00e9 um modelo em Groovy, por exemplo. Ent\u00e3o, comecei gerando um projeto Java Gradle simples em meu IDE favorito. Em seguida, abri o arquivo <code>build.gradle<\/code> e o completei com as depend\u00eancias corretas. Adicionei o arquivo <em>jcentro<\/em> uma depend\u00eancia do ratpack-gradle 1.3.3 e me certifiquei de que estava usando o reposit\u00f3rio <code>io.ratpack.ratpack-java<\/code> plugin. E n\u00e3o vamos nos esquecer da depend\u00eancia do Couchbase.<\/p>\n<pre>\n<code>buildscript {\n  repositories {\n    jcenter()\n  }\n  dependencies {\n    classpath \"io.ratpack:ratpack-gradle:1.3.3\"\n  }\n}\n\napply plugin: \"io.ratpack.ratpack-java\"\napply plugin: &apos;eclipse&apos;\n\nsourceCompatibility = 1.8\nversion = &apos;1.0&apos;\njar {\n    manifest {\n        attributes &apos;Implementation-Title&apos;: &apos;Ratpack Couchbase Repository Sample&apos;,\n                   &apos;Implementation-Version&apos;: version\n    }\n}\n\nrepositories {\n    mavenCentral()\n    jcenter()\n}\n\ndependencies {\n  compile \"com.couchbase.client:java-client:2.2.5\" \n}\n\nmainClassName = \"org.couchbase.devex.Application\"\n\ntest {\n    systemProperties &apos;property&apos;: &apos;value&apos;\n}\n<\/code><\/pre>\n<p>A pr\u00f3xima etapa \u00e9 iniciar o aplicativo com um simples Hello World. Tenho uma classe Application, como voc\u00ea pode ver no arquivo de compila\u00e7\u00e3o acima, com a classe <code>mainClassName<\/code> op\u00e7\u00e3o. Tudo o que farei aqui para come\u00e7ar \u00e9 ativar o servidor Ratpack e registrar o caminho de URL &apos;\/hello&apos; para retornar uma mensagem Hello World.<\/p>\n<p>O Ratpack tem <a href=\"https:\/\/ratpack.io\/manual\/current\/handlers.html#handlers\">Manipuladores<\/a> objetos. Um manipulador \u00e9 uma fun\u00e7\u00e3o com um contexto como par\u00e2metro. Voc\u00ea pode associar um manipulador a um caminho. Portanto, aqui vou associar uma fun\u00e7\u00e3o Handler ao caminho &apos;\/hello&apos;. Para entender o Ratpack, \u00e9 preciso entender os manipuladores, pois voc\u00ea os usar\u00e1 em todos os seus aplicativos.<\/p>\n<p>O ponto de entrada em um aplicativo Ratpack \u00e9 a classe RatpackServer. Nessa classe, voc\u00ea pode usar o m\u00e9todo est\u00e1tico <code>iniciar<\/code>. Ele usa uma fun\u00e7\u00e3o com um objeto RatpackServerSpec como par\u00e2metro. Esse objeto fornece a voc\u00ea uma API fluente para configurar o servidor. A \u00fanica coisa que preciso fazer aqui \u00e9 adicionar meu manipulador. O <code>manipuladores<\/code> recebe como par\u00e2metro uma fun\u00e7\u00e3o com uma cadeia de manipuladores. A partir dessa cadeia, posso criar meu manipulador:<\/p>\n<pre>\n<code>package org.couchbase.devex;\n\nimport ratpack.server.RatpackServer;\n\npublic class Application {\n\n  public static void main(String... args) throws Exception {\n    RatpackServer\n        .start(server -> server.handlers(chain -> chain.path(\"hello\", ctx -> ctx.render(\"Hello World!\"))));\n  }\n\n}\n<\/code><\/pre>\n<p>Quando inicio o aplicativo e vou para localhost:5050\/hello, recebo minha mensagem hello. Passando para a parte do Couchbase.<\/p>\n<h2>O modelo de entidade do Couchbase<\/h2>\n<p>O modelo de entidade apareceu com a vers\u00e3o 2.2.x. Voc\u00ea pode declarar a entidade facilmente usando a anota\u00e7\u00e3o @Id do Couchbase. Tamb\u00e9m \u00e9 necess\u00e1rio certificar-se de que sua classe de entidade tenha um construtor p\u00fablico com zero arg e que o setter e o getter estejam dispon\u00edveis para os campos que voc\u00ea deseja no documento JSON resultante. Para modelar um usu\u00e1rio com nome de usu\u00e1rio, idade, nome e sobrenome, uso a seguinte classe User:<\/p>\n<pre>\n<code>package org.couchbase.devex;\n\nimport com.couchbase.client.java.repository.annotation.Field;\nimport com.couchbase.client.java.repository.annotation.Id;\n\npublic class User {\n\n  @Id\n  private String username;\n\n  private Integer age;\n\n  @Field(\"fName\")\n  private String firstName;\n\n  @Field(\"lName\")\n  private String lastName;\n\n  public User() {}\n\n  public User(String username, Integer age, String firstName, String lastName) {\n    this.username = username;\n    this.age = age;\n    this.firstName = firstName;\n    this.lastName = lastName;\n  }\n\n  public String getUsername() {\n    return username;\n  }\n\n  public void setUsername(String username) {\n    this.username = username;\n  }\n\n  public Integer getAge() {\n    return age;\n  }\n\n  public void setAge(Integer age) {\n    this.age = age;\n  }\n\n  public String getFirstName() {\n    return firstName;\n  }\n\n  public void setFirstName(String firstName) {\n    this.firstName = firstName;\n  }\n\n  public String getLastName() {\n    return lastName;\n  }\n\n  public void setLastName(String lastName) {\n    this.lastName = lastName;\n  }\n\n  @Override\n  public String toString() {\n    return \"User [username=\" + username + \", age=\" + age + \", firstName=\" + firstName + \", lastName=\" + lastName\n        + \"]\";\n  }\n\n}\n<\/code><\/pre>\n<p>A anota\u00e7\u00e3o @Id \u00e9 obrigat\u00f3ria e define o campo que ser\u00e1 usado como chave do seu documento. Voc\u00ea pode usar a anota\u00e7\u00e3o @Field para alterar o nome das propriedades em seu documento JSON resultante. Observe tamb\u00e9m que o campo @Id n\u00e3o estar\u00e1 no JSON.<\/p>\n<p>Essa classe de entidade deve ser usada com a classe <a href=\"https:\/\/docs.couchbase.com\/sdk-api\/couchbase-java-client-2.2.5\/com\/couchbase\/client\/java\/document\/EntityDocument.html\">EntidadeDocumento<\/a>. Seu uso \u00e9 muito semelhante ao do <a href=\"https:\/\/developer.couchbase.com\/documentation\/server\/4.1\/sdks\/java-2.2\/documents-basics.html?utm_source=blogs&#038;utm_medium=link&#038;utm_campaign=blogs\">outras implementa\u00e7\u00f5es de documentos<\/a> dispon\u00edvel com o SDK. O c\u00f3digo a seguir criar\u00e1 um documento JSON no Couchbase:<\/p>\n<pre>\n<code>  User user = new User(\"ldoguin\", 31, \"Laurent\", \"Doguin\");\n  EntityDocument<User> document = EntityDocument.create(user);\n  Repository repo = CouchbaseCluster.create().openBucket().repository();\n  repo.upsert(document);\n<\/code><\/pre>\n<p>Que criam o seguinte documento:<\/p>\n<p>Legenda: ldoguin<\/p>\n<p>Valor: { \"lName\": \"Doguin\", \"age\": 31, \"fName\": \"Laurent\" }<\/p>\n<p>No momento, esse c\u00f3digo est\u00e1 bloqueando e \u00e9 s\u00edncrono. Isso \u00e9 ruim? Depende :) Se voc\u00ea estiver executando um c\u00f3digo bloqueante em uma thread n\u00e3o bloqueante, como faria se ele estivesse sendo executado no lugar do hello world acima, ent\u00e3o voc\u00ea estar\u00e1 bloqueando todo o resto. E sim, isso seria uma coisa ruim. Porque esse thread gerencia o loop de eventos que trata de todas as solicita\u00e7\u00f5es. Eu encontrei <a href=\"https:\/\/blog.anacoders.com\/blocking-code-in-ratpack\/\">esta postagem do blog<\/a> bastante \u00fatil para entender isso.<\/p>\n<p>Um dos objetivos do Ratpack&amp;apos \u00e9 ajud\u00e1-lo a usar o c\u00f3digo de bloqueio em uma <a href=\"https:\/\/ratpack.io\/manual\/current\/async.html#performing_blocking_operations_eg_io\">ass\u00edncrono, sem bloqueio<\/a> manipulador. O Ratpack usa <a href=\"https:\/\/ratpack.io\/manual\/current\/api\/ratpack\/exec\/Promise.html\">Promessa<\/a> como uma forma de gerenciar o c\u00f3digo ass\u00edncrono. E ele tamb\u00e9m oferece uma primitiva de bloqueio que recebe uma fun\u00e7\u00e3o como argumento e retorna uma promessa. A fun\u00e7\u00e3o executar\u00e1 o c\u00f3digo de bloqueio. Aqui tenho um exemplo que cria um usu\u00e1rio ao acessar o URL localhost:5050\/create e o retorna ao acessar o URL localhost:5050\/get:<\/p>\n<pre>\n<code>  public static void main(String... args) throws Exception {\n    RatpackServer.start(server -> server.handlers(chain -> chain.path(\"create\", ctx -> {\n      Blocking.get(() -> {\n        EntityDocument<User> document = EntityDocument.create(new User(\"ldoguin\", 31, \"Laurent\", \"Doguin\"));\n        Repository repo = CouchbaseCluster.create().openBucket().repository();\n        return repo.upsert(document);\n      }).then(entityDoc -> ctx.render(\"OK\"));\n    }).path(\"get\", ctx -> {\n      Blocking.get(() -> {\n        Repository repo = CouchbaseCluster.create().openBucket().repository();\n        EntityDocument<User> ldoguin = repo.get(\"ldoguin\", User.class);\n        return ldoguin;\n      }).then(user -> ctx.render(user.content().toString()));\n    })\n    ));\n  }\n<\/code><\/pre>\n<p>Deixando de lado o fato de que essa \u00e9 provavelmente a API mais mal projetada de todos os tempos, isso deve lhe dar uma ideia de como voc\u00ea pode executar c\u00f3digo s\u00edncrono e de bloqueio em um manipulador ass\u00edncrono com o Ratpack. Esse \u00e9 o primeiro passo para migrar um aplicativo existente para o Ratpack.<\/p>\n<p>Mas esse exemplo n\u00e3o mostra realmente todas as vantagens do nosso SDK baseado em RxJava. Portanto, na pr\u00f3xima postagem, mostrarei como usar o RxJava e o Ratpack junto com a vers\u00e3o Async do Repository.<\/p>","protected":false},"excerpt":{"rendered":"<p>I recently started playing with Ratpack. \u00a0 It&apos;s a set of Java libraries for buiding modern HTTP applications. To go beyond that simple definition, Ratpack is non-blocking, asynchronous and netty-based. A bit like our Java SDK. So it comes as [&hellip;]<\/p>","protected":false},"author":49,"featured_media":13873,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1815,1818],"tags":[1437,1635],"ppma_author":[9023],"class_list":["post-2238","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-best-practices-and-tutorials","category-java","tag-async","tag-ratpack"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.7 (Yoast SEO v26.7) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Getting Started with Ratpack and Couchbase - The Couchbase Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.couchbase.com\/blog\/pt\/getting-started-ratpack-couchbase\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Getting Started with Ratpack and Couchbase\" \/>\n<meta property=\"og:description\" content=\"I recently started playing with Ratpack. \u00a0 It&amp;apos;s a set of Java libraries for buiding modern HTTP applications. To go beyond that simple definition, Ratpack is non-blocking, asynchronous and netty-based. A bit like our Java SDK. So it comes as [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/pt\/getting-started-ratpack-couchbase\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2016-04-29T00:41:35+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2022\/11\/couchbase-nosql-dbaas.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1800\" \/>\n\t<meta property=\"og:image:height\" content=\"630\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Laurent Doguin\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@ldoguin\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"unstructured.io\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/getting-started-ratpack-couchbase\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/getting-started-ratpack-couchbase\/\"},\"author\":{\"name\":\"Laurent Doguin\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/c0aa9b8f1ed51b7a9e2f7cb755994a5e\"},\"headline\":\"Getting Started with Ratpack and Couchbase\",\"datePublished\":\"2016-04-29T00:41:35+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/getting-started-ratpack-couchbase\/\"},\"wordCount\":852,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/getting-started-ratpack-couchbase\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"keywords\":[\"async\",\"ratpack\"],\"articleSection\":[\"Best Practices and Tutorials\",\"Java\"],\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/getting-started-ratpack-couchbase\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/getting-started-ratpack-couchbase\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/getting-started-ratpack-couchbase\/\",\"name\":\"Getting Started with Ratpack and Couchbase - The Couchbase Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/getting-started-ratpack-couchbase\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/getting-started-ratpack-couchbase\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"datePublished\":\"2016-04-29T00:41:35+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/getting-started-ratpack-couchbase\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/getting-started-ratpack-couchbase\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/getting-started-ratpack-couchbase\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"width\":1800,\"height\":630},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/getting-started-ratpack-couchbase\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Getting Started with Ratpack and Couchbase\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"name\":\"The Couchbase Blog\",\"description\":\"Couchbase, the NoSQL Database\",\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-BR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"width\":218,\"height\":34,\"caption\":\"The Couchbase Blog\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/c0aa9b8f1ed51b7a9e2f7cb755994a5e\",\"name\":\"Laurent Doguin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/12929ce99397769f362b7a90d6b85071\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/b8c466908092b46634af916b6921f30187a051e4367ded7ac9b1a3f2c5692fd2?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/b8c466908092b46634af916b6921f30187a051e4367ded7ac9b1a3f2c5692fd2?s=96&d=mm&r=g\",\"caption\":\"Laurent Doguin\"},\"description\":\"Laurent is a nerdy metal head who lives in Paris. He mostly writes code in Java and structured text in AsciiDoc, and often talks about data, reactive programming and other buzzwordy stuff. He is also a former Developer Advocate for Clever Cloud and Nuxeo where he devoted his time and expertise to helping those communities grow bigger and stronger. He now runs Developer Relations at Couchbase.\",\"sameAs\":[\"https:\/\/x.com\/ldoguin\"],\"honorificPrefix\":\"Mr\",\"birthDate\":\"1985-06-07\",\"gender\":\"male\",\"award\":[\"Devoxx Champion\",\"Couchbase Legend\"],\"knowsAbout\":[\"Java\"],\"knowsLanguage\":[\"English\",\"French\"],\"jobTitle\":\"Director Developer Relation & Strategy\",\"worksFor\":\"Couchbase\",\"url\":\"https:\/\/www.couchbase.com\/blog\/pt\/author\/laurent-doguin\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Getting Started with Ratpack and Couchbase - The Couchbase Blog","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:\/\/www.couchbase.com\/blog\/pt\/getting-started-ratpack-couchbase\/","og_locale":"pt_BR","og_type":"article","og_title":"Getting Started with Ratpack and Couchbase","og_description":"I recently started playing with Ratpack. \u00a0 It&apos;s a set of Java libraries for buiding modern HTTP applications. To go beyond that simple definition, Ratpack is non-blocking, asynchronous and netty-based. A bit like our Java SDK. So it comes as [&hellip;]","og_url":"https:\/\/www.couchbase.com\/blog\/pt\/getting-started-ratpack-couchbase\/","og_site_name":"The Couchbase Blog","article_published_time":"2016-04-29T00:41:35+00:00","og_image":[{"width":1800,"height":630,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2022\/11\/couchbase-nosql-dbaas.png","type":"image\/png"}],"author":"Laurent Doguin","twitter_card":"summary_large_image","twitter_creator":"@ldoguin","twitter_misc":{"Written by":"unstructured.io","Est. reading time":"6 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/getting-started-ratpack-couchbase\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/getting-started-ratpack-couchbase\/"},"author":{"name":"Laurent Doguin","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/c0aa9b8f1ed51b7a9e2f7cb755994a5e"},"headline":"Getting Started with Ratpack and Couchbase","datePublished":"2016-04-29T00:41:35+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/getting-started-ratpack-couchbase\/"},"wordCount":852,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/getting-started-ratpack-couchbase\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","keywords":["async","ratpack"],"articleSection":["Best Practices and Tutorials","Java"],"inLanguage":"pt-BR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/getting-started-ratpack-couchbase\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/getting-started-ratpack-couchbase\/","url":"https:\/\/www.couchbase.com\/blog\/getting-started-ratpack-couchbase\/","name":"Getting Started with Ratpack and Couchbase - The Couchbase Blog","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/getting-started-ratpack-couchbase\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/getting-started-ratpack-couchbase\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","datePublished":"2016-04-29T00:41:35+00:00","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/getting-started-ratpack-couchbase\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/getting-started-ratpack-couchbase\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/getting-started-ratpack-couchbase\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","width":1800,"height":630},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/getting-started-ratpack-couchbase\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Getting Started with Ratpack and Couchbase"}]},{"@type":"WebSite","@id":"https:\/\/www.couchbase.com\/blog\/#website","url":"https:\/\/www.couchbase.com\/blog\/","name":"Blog do Couchbase","description":"Couchbase, o banco de dados NoSQL","publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-BR"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"Blog do Couchbase","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","width":218,"height":34,"caption":"The Couchbase Blog"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/c0aa9b8f1ed51b7a9e2f7cb755994a5e","name":"Laurent Doguin","image":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/12929ce99397769f362b7a90d6b85071","url":"https:\/\/secure.gravatar.com\/avatar\/b8c466908092b46634af916b6921f30187a051e4367ded7ac9b1a3f2c5692fd2?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/b8c466908092b46634af916b6921f30187a051e4367ded7ac9b1a3f2c5692fd2?s=96&d=mm&r=g","caption":"Laurent Doguin"},"description":"Laurent \u00e9 um nerd metaleiro que mora em Paris. Em sua maior parte, ele escreve c\u00f3digo em Java e texto estruturado em AsciiDoc, e frequentemente fala sobre dados, programa\u00e7\u00e3o reativa e outras coisas que est\u00e3o na moda. Ele tamb\u00e9m foi Developer Advocate do Clever Cloud e do Nuxeo, onde dedicou seu tempo e experi\u00eancia para ajudar essas comunidades a crescerem e se fortalecerem. Atualmente, ele dirige as Rela\u00e7\u00f5es com Desenvolvedores na Couchbase.","sameAs":["https:\/\/x.com\/ldoguin"],"honorificPrefix":"Mr","birthDate":"1985-06-07","gender":"male","award":["Devoxx Champion","Couchbase Legend"],"knowsAbout":["Java"],"knowsLanguage":["English","French"],"jobTitle":"Director Developer Relation & Strategy","worksFor":"Couchbase","url":"https:\/\/www.couchbase.com\/blog\/pt\/author\/laurent-doguin\/"}]}},"authors":[{"term_id":9023,"user_id":49,"is_guest":0,"slug":"laurent-doguin","display_name":"Laurent Doguin","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/b8c466908092b46634af916b6921f30187a051e4367ded7ac9b1a3f2c5692fd2?s=96&d=mm&r=g","author_category":"","last_name":"Doguin","first_name":"Laurent","job_title":"","user_url":"","description":"Laurent \u00e9 um nerd metaleiro que mora em Paris. Em sua maior parte, ele escreve c\u00f3digo em Java e texto estruturado em AsciiDoc, e frequentemente fala sobre dados, programa\u00e7\u00e3o reativa e outras coisas que est\u00e3o na moda. Ele tamb\u00e9m foi Developer Advocate do Clever Cloud e do Nuxeo, onde dedicou seu tempo e experi\u00eancia para ajudar essas comunidades a crescerem e se fortalecerem. Atualmente, ele dirige as Rela\u00e7\u00f5es com Desenvolvedores na Couchbase."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/2238","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/users\/49"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/comments?post=2238"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/2238\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media\/13873"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media?parent=2238"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/categories?post=2238"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/tags?post=2238"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/ppma_author?post=2238"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}