{"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\/es\/getting-started-ratpack-couchbase\/","title":{"rendered":"Introducci\u00f3n a Ratpack y Couchbase"},"content":{"rendered":"<p>Hace poco empec\u00e9 a jugar con <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>Es un conjunto de bibliotecas Java para crear aplicaciones HTTP modernas.<\/p><\/blockquote>\n<p>Para ir m\u00e1s all\u00e1 de esa simple definici\u00f3n, Ratpack es no bloqueante, as\u00edncrono y basado en la red. Un poco como nuestro <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\">SDK de Java<\/a>. Por tanto, es un candidato natural para un marco de aplicaciones ligero.<\/p>\n<p>Una de las primeras cosas que puedes hacer cuando pruebas un nuevo framework web es crear una API b\u00e1sica. Y construir un CRUD simple es algo natural cuando trabajas con una base de datos de documentos como Couchbase. As\u00ed que este post es una introducci\u00f3n b\u00e1sica a Ratpack mostrando la abstracci\u00f3n del repositorio de entidades de Couchbase disponible con nuestro Java SDK. No me centrar\u00e9 aqu\u00ed en la API en s\u00ed, sino m\u00e1s bien en el mecanismo utilizado en Ratpack y el repositorio Couchbase.<\/p>\n<h2>Creaci\u00f3n de un proyecto Ratpack Java<\/h2>\n<p>La mayor\u00eda de los usuarios de Ratpack que conozco suelen codificar con Groovy. Yo suelo codificar en Java, as\u00ed que esto es lo que voy a usar hoy. El <a href=\"https:\/\/ratpack.io\/manual\/current\/quick-start.html#quick_start\">inicio r\u00e1pido<\/a> Sin embargo, las gu\u00edas que encontrar\u00e1s para Ratpack incluyen Groovy. La plantilla lazybones es una plantilla Groovy, por ejemplo. As\u00ed que empec\u00e9 generando un simple proyecto Java Gradle en mi IDE favorito. Luego abr\u00ed el archivo <code>build.gradle<\/code> y lo complet\u00e9 con las dependencias correctas. He a\u00f1adido el archivo <em>jcenter<\/em> una dependencia a ratpack-gradle 1.3.3 y me asegur\u00e9 de que estaba usando la versi\u00f3n <code>io.ratpack.ratpack-java<\/code> plugin. Y no olvidemos la dependencia de 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>El siguiente paso es iniciar la aplicaci\u00f3n con un simple Hola Mundo. Tengo una clase de aplicaci\u00f3n como se puede ver en el archivo de compilaci\u00f3n de arriba con la clase <code>mainClassName<\/code> opci\u00f3n. Todo lo que voy a hacer aqu\u00ed para empezar es poner en marcha el servidor Ratpack y registrar la ruta URL &apos;\/hello&apos; para devolver un mensaje de Hola Mundo.<\/p>\n<p>Ratpack tiene <a href=\"https:\/\/ratpack.io\/manual\/current\/handlers.html#handlers\">Manipuladores<\/a> objetos. Un Manejador es una funci\u00f3n con un Contexto como par\u00e1metro. Puedes asociar un handler a una ruta. As\u00ed que aqu\u00ed voy a asociar una funci\u00f3n Handler a la ruta &apos;\/hello&apos;. Para entender Ratpack tienes que entender los handlers ya que los usar\u00e1s en todas tus aplicaciones.<\/p>\n<p>El punto de entrada en una aplicaci\u00f3n Ratpack es la clase RatpackServer. Desde esta clase se puede utilizar el m\u00e9todo est\u00e1tico <code>iniciar<\/code>. Toma una funci\u00f3n con un objeto RatpackServerSpec como par\u00e1metro. Este objeto te da una API fluida para configurar el servidor. Lo \u00fanico que necesito hacer aqu\u00ed es a\u00f1adir mi manejador. El <code>manipuladores<\/code> toma como par\u00e1metro una funci\u00f3n con una Cadena de Manejadores. A partir de esa cadena puedo crear mi handler:<\/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>Cuando inicio la aplicaci\u00f3n y voy a localhost:5050\/hello, obtengo el mensaje hola. Pasando a la parte de Couchbase.<\/p>\n<h2>El modelo de entidades de Couchbase<\/h2>\n<p>El modelo de entidad apareci\u00f3 con la versi\u00f3n 2.2.x. Puedes declarar entidad f\u00e1cilmente usando la anotaci\u00f3n @Id de Couchbase. Tambi\u00e9n necesitas asegurarte de que tu clase de entidad tiene un constructor p\u00fablico de arg cero y que setter y getter est\u00e1n disponibles para los campos que quieres en el documento JSON resultante. Para modelar un usuario con un nombre de usuario, edad, nombre y apellidos, utilizo la siguiente clase 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>La anotaci\u00f3n @Id es obligatoria y define el campo que se utilizar\u00e1 como clave de su documento. Puede utilizar la anotaci\u00f3n @Field para cambiar el nombre de las propiedades en el documento JSON resultante. Tenga en cuenta tambi\u00e9n que el campo @Id no estar\u00e1 en el JSON.<\/p>\n<p>Esta clase de entidad debe utilizarse con la clase <a href=\"https:\/\/docs.couchbase.com\/sdk-api\/couchbase-java-client-2.2.5\/com\/couchbase\/client\/java\/document\/EntityDocument.html\">DocumentoEntidad<\/a>. Su uso es muy similar al del <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\">otras implementaciones de documentos<\/a> disponible con el SDK. El siguiente c\u00f3digo crear\u00e1 un documento JSON en 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 crean el siguiente documento:<\/p>\n<p>Clave: ldoguin<\/p>\n<p>Valor: { \"lName\": \"Doguin\", \"age\": 31, \"fName\": \"Laurent\" }<\/p>\n<p>Este c\u00f3digo es actualmente bloqueante y s\u00edncrono. \u00bfEs esto malo? Depende :) Si est\u00e1s ejecutando c\u00f3digo bloqueante en un hilo no bloqueante, como har\u00edas si se estuviera ejecutando en lugar del hola mundo anterior, entonces est\u00e1s bloqueando todo lo dem\u00e1s. Y s\u00ed, eso ser\u00eda algo malo. Porque este hilo gestiona el bucle de eventos que maneja todas las peticiones. He encontrado <a href=\"https:\/\/blog.anacoders.com\/blocking-code-in-ratpack\/\">esta entrada del blog<\/a> bastante \u00fatil para entender esto.<\/p>\n<p>Uno de los objetivos de Ratpack&apos;s es ayudarle a utilizar c\u00f3digo de bloqueo en un <a href=\"https:\/\/ratpack.io\/manual\/current\/async.html#performing_blocking_operations_eg_io\">as\u00edncrono, no bloqueante<\/a> manipulador. Ratpack utiliza <a href=\"https:\/\/ratpack.io\/manual\/current\/api\/ratpack\/exec\/Promise.html\">Promesa<\/a> como una forma de gestionar el c\u00f3digo as\u00edncrono. Y tambi\u00e9n te da una primitiva de Bloqueo que toma una funci\u00f3n como argumento y devuelve una promesa. La funci\u00f3n ejecutar\u00e1 el c\u00f3digo de bloqueo. Aqu\u00ed tengo un ejemplo que crea un usuario cuando se pulsa la URL localhost:5050\/create y lo devuelve cuando se pulsa la 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>Dejando a un lado el hecho de que esta es probablemente la API peor dise\u00f1ada de la historia, esto deber\u00eda darte una idea de c\u00f3mo puedes ejecutar c\u00f3digo s\u00edncrono bloqueante en un manejador as\u00edncrono con Ratpack. Que es el primer paso para migrar una aplicaci\u00f3n existente a Ratpack.<\/p>\n<p>Pero este ejemplo no muestra todas las bondades de nuestro SDK basado en RxJava. As\u00ed que en el pr\u00f3ximo post te mostrar\u00e9 c\u00f3mo utilizar RxJava y Ratpack junto con la versi\u00f3n Async del Repositorio.<\/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.5 (Yoast SEO v26.5) - 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\/es\/getting-started-ratpack-couchbase\/\" \/>\n<meta property=\"og:locale\" content=\"es_MX\" \/>\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\/es\/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\":\"es\",\"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\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/getting-started-ratpack-couchbase\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@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\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@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\":\"es\",\"@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\/es\/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\/es\/getting-started-ratpack-couchbase\/","og_locale":"es_MX","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\/es\/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":"es","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":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/getting-started-ratpack-couchbase\/"]}]},{"@type":"ImageObject","inLanguage":"es","@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":"El blog de Couchbase","description":"Couchbase, la base de datos 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":"es"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"El blog de Couchbase","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"es","@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":"es","@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 es un metalero empoll\u00f3n que vive en Par\u00eds. Principalmente escribe c\u00f3digo en Java y texto estructurado en AsciiDoc, y a menudo habla sobre datos, programaci\u00f3n reactiva y otras cosas de moda. Tambi\u00e9n fue Developer Advocate de Clever Cloud y Nuxeo, donde dedic\u00f3 su tiempo y experiencia a ayudar a esas comunidades a crecer y fortalecerse. Ahora dirige las relaciones con los desarrolladores en 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\/es\/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 es un metalero empoll\u00f3n que vive en Par\u00eds. Principalmente escribe c\u00f3digo en Java y texto estructurado en AsciiDoc, y a menudo habla sobre datos, programaci\u00f3n reactiva y otras cosas de moda. Tambi\u00e9n fue Developer Advocate de Clever Cloud y Nuxeo, donde dedic\u00f3 su tiempo y experiencia a ayudar a esas comunidades a crecer y fortalecerse. Ahora dirige las relaciones con los desarrolladores en Couchbase."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/2238","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/users\/49"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/comments?post=2238"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/2238\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media\/13873"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media?parent=2238"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/categories?post=2238"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/tags?post=2238"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/ppma_author?post=2238"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}