{"id":3974,"date":"2017-10-02T07:00:08","date_gmt":"2017-10-02T14:00:08","guid":{"rendered":"http:\/\/www.couchbase.com\/blog\/?p=3974"},"modified":"2023-09-09T02:30:23","modified_gmt":"2023-09-09T09:30:23","slug":"create-restful-api-node-js-hapi-couchbase-nosql","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/pt\/create-restful-api-node-js-hapi-couchbase-nosql\/","title":{"rendered":"Criar uma API RESTful com Node.js, Hapi e Couchbase NoSQL"},"content":{"rendered":"<p>Desenvolver aplicativos Node.js com o Express \u00e9, sem d\u00favida, uma op\u00e7\u00e3o muito popular, mas n\u00e3o \u00e9 a \u00fanica op\u00e7\u00e3o e pode at\u00e9 n\u00e3o ser a melhor op\u00e7\u00e3o. Recentemente, comecei a pesquisar <a href=\"https:\/\/hapijs.com\/\" target=\"_blank\" rel=\"noopener\">Hapi<\/a> que se define como uma estrutura para servi\u00e7os, algo que n\u00e3o era exatamente uma coisa quando o Express surgiu.<\/p>\n<p>Anteriormente, eu havia escrito sobre <a href=\"https:\/\/www.thepolyglotdeveloper.com\/2015\/10\/create-a-full-stack-app-using-node-js-couchbase-server\/\" target=\"_blank\" rel=\"noopener\">Cria\u00e7\u00e3o de uma API RESTful com Node.js e Express<\/a>mas, desta vez, vamos explorar a possibilidade de fazer o mesmo com o Hapi.<\/p>\n<p><!--more--><\/p>\n<p>Antes de investirmos muito no c\u00f3digo, precisamos descobrir o que exatamente vamos construir. O objetivo aqui \u00e9 criar um aplicativo de dois endpoints. Um endpoint deve nos permitir criar dados no banco de dados e o outro deve nos permitir ler do banco de dados.<\/p>\n<p>Crie um novo diret\u00f3rio de projeto em algum lugar do seu computador e execute o seguinte comando no prompt de comando dentro desse diret\u00f3rio:<\/p>\n<pre class=\"lang:default decode:true\">npm init -y<\/pre>\n<p>O comando acima criar\u00e1 um novo projeto Node.js estabelecendo um projeto\u00a0<strong>package.json<\/strong> arquivo. A pr\u00f3xima etapa \u00e9 instalar cada uma das depend\u00eancias do projeto.<\/p>\n<p>Execute o seguinte na linha de comando:<\/p>\n<pre class=\"lang:default decode:true\">npm install couchbase hapi joi uuid --save<\/pre>\n<p>O comando acima baixar\u00e1 o SDK do Couchbase Node.js, a estrutura Hapi, o Joi para valida\u00e7\u00e3o de dados e um pacote para gerar valores UUID para representar nossas chaves de documento NoSQL.<\/p>\n<p>V\u00e1 em frente e crie um\u00a0<strong>app.js<\/strong> em seu projeto. \u00c9 aqui que teremos todas as nossas informa\u00e7\u00f5es de roteamento e l\u00f3gica de banco de dados. Abra esse arquivo\u00a0<strong>app.js<\/strong> e inclua o seguinte c\u00f3digo JavaScript:<\/p>\n<pre class=\"lang:default decode:true\">const Hapi = require(\"hapi\");\r\nconst Couchbase = require(\"couchbase\");\r\nconst UUID = require(\"uuid\");\r\nconst Joi = require(\"joi\");\r\n\r\nconst server = new Hapi.Server();\r\nconst N1qlQuery = Couchbase.N1qlQuery;\r\n\r\nconst cluster = new Couchbase.Cluster(\"https:\/\/localhost\");\r\nconst bucket = cluster.openBucket(\"default\", \"\");\r\n\r\nserver.connection({ \"host\": \"localhost\", \"port\": 3000 });\r\n\r\nserver.route({\r\n    method: \"GET\",\r\n    path: \"\/\",\r\n    handler: (request, response) =&gt; {\r\n        return response(\"Hello World\");\r\n    }\r\n});\r\n\r\nserver.start(error =&gt; {\r\n    if(error) {\r\n        throw error;\r\n    }\r\n    console.log(\"Listening at \" + server.info.uri);\r\n});<\/pre>\n<p>O c\u00f3digo acima nos ajudar\u00e1 a come\u00e7ar. Ele importa cada uma das depend\u00eancias do nosso projeto, inicializa o Hapi para um host e uma porta espec\u00edficos e estabelece uma conex\u00e3o com o Couchbase. Tamb\u00e9m definimos uma \u00fanica rota para representar nossa rota raiz.<\/p>\n<p>Para este exemplo, o Couchbase ser\u00e1 executado localmente e usaremos um Bucket chamado <code>padr\u00e3o<\/code>. Para obter informa\u00e7\u00f5es sobre a instala\u00e7\u00e3o do Couchbase, consulte meus tutoriais para <a href=\"https:\/\/www.youtube.com\/watch?v=L1wNemXGd9Q\" target=\"_blank\" rel=\"noopener\">Mac<\/a>, <a href=\"https:\/\/www.youtube.com\/watch?v=z8BcuXDJrDY\" target=\"_blank\" rel=\"noopener\">Linux<\/a>e <a href=\"https:\/\/www.youtube.com\/watch?v=dZpnANelV2M\" target=\"_blank\" rel=\"noopener\">Windows<\/a>.<\/p>\n<p>Agora podemos nos preocupar com nossos dois pontos de extremidade que interagem com o banco de dados.<\/p>\n<p>O primeiro ponto de extremidade, provavelmente o mais simples, ser\u00e1 o retorno de uma lista de documentos, neste caso, pessoas que foram criadas anteriormente:<\/p>\n<pre class=\"lang:default decode:true\">server.route({\r\n    method: \"GET\",\r\n    path: \"\/people\",\r\n    handler: (request, response) =&gt; {\r\n        var statement = \"SELECT `\" + bucket._name + \"`.* FROM `\" + bucket._name + \"` WHERE type = 'person'\";\r\n        var query = N1qlQuery.fromString(statement);\r\n        bucket.query(query, (error, result) =&gt; {\r\n            if(error) {\r\n                return response(error).code(500);\r\n            }\r\n            return response(result);\r\n        });\r\n    }\r\n});<\/pre>\n<p>Observe o <code>manipulador<\/code> method. Nele, constru\u00edmos uma consulta N1QL que obt\u00e9m todos os documentos que t\u00eam um <code>tipo<\/code> que corresponde \u00e0 propriedade <code>pessoa<\/code>. Isso significa que podemos ter muitos outros tipos de documentos que n\u00e3o ser\u00e3o detectados por nossa consulta.<\/p>\n<p>Se houver um problema com a consulta, retornaremos um erro com um c\u00f3digo de resposta 500; caso contr\u00e1rio, retornaremos os resultados da consulta.<\/p>\n<p>O pr\u00f3ximo ponto de extremidade \u00e9 onde usamos o Joi para valida\u00e7\u00e3o de dados. D\u00ea uma olhada no c\u00f3digo JavaScript a seguir:<\/p>\n<pre class=\"lang:default decode:true\">server.route({\r\n    method: \"POST\",\r\n    path: \"\/person\",\r\n    config: {\r\n        validate: {\r\n            payload: {\r\n                firstname: Joi.string().required(),\r\n                lastname: Joi.string().required(),\r\n                type: Joi.any().forbidden().default(\"person\"),\r\n                timestamp (registro de data e hora): Joi.any().forbidden().default((new Date()).getTime())\r\n            }\r\n        }\r\n    },\r\n    handler: (request, response) =&gt; {\r\n        bucket.insert(UUID.v4(), request.payload, (error, result) =&gt; {\r\n            if(error) {\r\n                return response(error).code(500);\r\n            }\r\n            return response(request.payload);\r\n        });\r\n    }\r\n});<\/pre>\n<p>Quando um cliente tenta consumir a partir desse endpoint, a valida\u00e7\u00e3o acontece como parte do Hapi. Nesse processo de valida\u00e7\u00e3o, inspecionamos a carga \u00fatil e garantimos que cada uma de nossas propriedades atenda aos crit\u00e9rios. Nesse caso, ambas as propriedades <code>primeiro nome<\/code> e <code>sobrenome<\/code> precisam estar presentes. \u00c9 proibido a um <code>tipo<\/code> e <code>carimbo de data\/hora<\/code> para existir no corpo da solicita\u00e7\u00e3o. Se existirem, ser\u00e1 retornado um erro. Se n\u00e3o existirem, ser\u00e1 usado um valor padr\u00e3o.<\/p>\n<p>Se nossa valida\u00e7\u00e3o for aprovada, poderemos inserir os dados no Couchbase com um ID exclusivo. Os dados tamb\u00e9m ser\u00e3o retornados na resposta.<\/p>\n<h2>Conclus\u00e3o<\/h2>\n<p>Voc\u00ea acabou de ver como criar uma API RESTful muito simples com o Hapi e o <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/\" target=\"_blank\" rel=\"noopener\">Servidor Couchbase<\/a>. Tenho usado o Express desde o in\u00edcio, mas quando se trata do Hapi, sinto que ele foi muito mais bem projetado para a cria\u00e7\u00e3o de servi\u00e7os da Web. No entanto, ambos d\u00e3o conta do recado e, se voc\u00ea quiser ver uma alternativa ao Express, d\u00ea uma olhada neste <a href=\"https:\/\/www.thepolyglotdeveloper.com\/2015\/10\/create-a-full-stack-app-using-node-js-couchbase-server\/\" target=\"_blank\" rel=\"noopener\">tutorial anterior<\/a> Eu escrevi.<\/p>\n<p>Para obter mais informa\u00e7\u00f5es sobre como usar o Couchbase com o Node.js, consulte o <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/developers\/\" target=\"_blank\" rel=\"noopener\">Portal do desenvolvedor do Couchbase<\/a>.<\/p>","protected":false},"excerpt":{"rendered":"<p>Developing Node.js applications with Express is no doubt a very popular option, however it isn&#8217;t the only option and it may not even be the best option. I recently started looking into Hapi which defines itself as being a framework [&hellip;]<\/p>\n","protected":false},"author":63,"featured_media":13873,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1814,1815,1816,1822],"tags":[1393,1745],"ppma_author":[9032],"class_list":["post-3974","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-application-design","category-best-practices-and-tutorials","category-couchbase-server","category-node-js","tag-api","tag-restful"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.3 (Yoast SEO v27.3) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Create a RESTful API with Node.js, Hapi, and Couchbase NoSQL<\/title>\n<meta name=\"description\" content=\"Learn how to create a RESTful API with Couchbase NoSQL, N1QL, and the efficient Hapi framework for Node.js\" \/>\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\/create-restful-api-node-js-hapi-couchbase-nosql\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Create a RESTful API with Node.js, Hapi, and Couchbase NoSQL\" \/>\n<meta property=\"og:description\" content=\"Learn how to create a RESTful API with Couchbase NoSQL, N1QL, and the efficient Hapi framework for Node.js\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/pt\/create-restful-api-node-js-hapi-couchbase-nosql\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/thepolyglotdeveloper\" \/>\n<meta property=\"article:published_time\" content=\"2017-10-02T14:00:08+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-09-09T09:30:23+00:00\" \/>\n<meta name=\"author\" content=\"Nic Raboy, Developer Advocate, Couchbase\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@nraboy\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Nic Raboy, Developer Advocate, Couchbase\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/create-restful-api-node-js-hapi-couchbase-nosql\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/create-restful-api-node-js-hapi-couchbase-nosql\\\/\"},\"author\":{\"name\":\"Nic Raboy, Developer Advocate, Couchbase\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#\\\/schema\\\/person\\\/bb545ebe83bb2d12f91095811d0a72e1\"},\"headline\":\"Create a RESTful API with Node.js, Hapi, and Couchbase NoSQL\",\"datePublished\":\"2017-10-02T14:00:08+00:00\",\"dateModified\":\"2023-09-09T09:30:23+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/create-restful-api-node-js-hapi-couchbase-nosql\\\/\"},\"wordCount\":638,\"commentCount\":1,\"publisher\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/create-restful-api-node-js-hapi-couchbase-nosql\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/1\\\/2022\\\/11\\\/couchbase-nosql-dbaas.png\",\"keywords\":[\"API\",\"restful\"],\"articleSection\":[\"Application Design\",\"Best Practices and Tutorials\",\"Couchbase Server\",\"Node.js\"],\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/create-restful-api-node-js-hapi-couchbase-nosql\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/create-restful-api-node-js-hapi-couchbase-nosql\\\/\",\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/create-restful-api-node-js-hapi-couchbase-nosql\\\/\",\"name\":\"Create a RESTful API with Node.js, Hapi, and Couchbase NoSQL\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/create-restful-api-node-js-hapi-couchbase-nosql\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/create-restful-api-node-js-hapi-couchbase-nosql\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/1\\\/2022\\\/11\\\/couchbase-nosql-dbaas.png\",\"datePublished\":\"2017-10-02T14:00:08+00:00\",\"dateModified\":\"2023-09-09T09:30:23+00:00\",\"description\":\"Learn how to create a RESTful API with Couchbase NoSQL, N1QL, and the efficient Hapi framework for Node.js\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/create-restful-api-node-js-hapi-couchbase-nosql\\\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/create-restful-api-node-js-hapi-couchbase-nosql\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/create-restful-api-node-js-hapi-couchbase-nosql\\\/#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\\\/create-restful-api-node-js-hapi-couchbase-nosql\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Create a RESTful API with Node.js, Hapi, and Couchbase NoSQL\"}]},{\"@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\\\/bb545ebe83bb2d12f91095811d0a72e1\",\"name\":\"Nic Raboy, Developer Advocate, Couchbase\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/bedeb68368d4681aca4c74fe5f697f0c423b80d498ec50fd915ba018b72c101f?s=96&d=mm&r=g8863514d8bed0cf6080f23db40e00354\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/bedeb68368d4681aca4c74fe5f697f0c423b80d498ec50fd915ba018b72c101f?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/bedeb68368d4681aca4c74fe5f697f0c423b80d498ec50fd915ba018b72c101f?s=96&d=mm&r=g\",\"caption\":\"Nic Raboy, Developer Advocate, Couchbase\"},\"description\":\"Nic Raboy is an advocate of modern web and mobile development technologies. He has experience in Java, JavaScript, Golang and a variety of frameworks such as Angular, NativeScript, and Apache Cordova. Nic writes about his development experiences related to making web and mobile development easier to understand.\",\"sameAs\":[\"https:\\\/\\\/www.thepolyglotdeveloper.com\",\"https:\\\/\\\/www.facebook.com\\\/thepolyglotdeveloper\",\"https:\\\/\\\/x.com\\\/nraboy\"],\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/pt\\\/author\\\/nic-raboy-2\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Criar uma API RESTful com Node.js, Hapi e Couchbase NoSQL","description":"Saiba como criar uma API RESTful com o Couchbase NoSQL, N1QL e a eficiente estrutura Hapi para Node.js","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\/create-restful-api-node-js-hapi-couchbase-nosql\/","og_locale":"pt_BR","og_type":"article","og_title":"Create a RESTful API with Node.js, Hapi, and Couchbase NoSQL","og_description":"Learn how to create a RESTful API with Couchbase NoSQL, N1QL, and the efficient Hapi framework for Node.js","og_url":"https:\/\/www.couchbase.com\/blog\/pt\/create-restful-api-node-js-hapi-couchbase-nosql\/","og_site_name":"The Couchbase Blog","article_author":"https:\/\/www.facebook.com\/thepolyglotdeveloper","article_published_time":"2017-10-02T14:00:08+00:00","article_modified_time":"2023-09-09T09:30:23+00:00","author":"Nic Raboy, Developer Advocate, Couchbase","twitter_card":"summary_large_image","twitter_creator":"@nraboy","twitter_misc":{"Written by":"Nic Raboy, Developer Advocate, Couchbase","Est. reading time":"3 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/create-restful-api-node-js-hapi-couchbase-nosql\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/create-restful-api-node-js-hapi-couchbase-nosql\/"},"author":{"name":"Nic Raboy, Developer Advocate, Couchbase","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/bb545ebe83bb2d12f91095811d0a72e1"},"headline":"Create a RESTful API with Node.js, Hapi, and Couchbase NoSQL","datePublished":"2017-10-02T14:00:08+00:00","dateModified":"2023-09-09T09:30:23+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/create-restful-api-node-js-hapi-couchbase-nosql\/"},"wordCount":638,"commentCount":1,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/create-restful-api-node-js-hapi-couchbase-nosql\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","keywords":["API","restful"],"articleSection":["Application Design","Best Practices and Tutorials","Couchbase Server","Node.js"],"inLanguage":"pt-BR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/create-restful-api-node-js-hapi-couchbase-nosql\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/create-restful-api-node-js-hapi-couchbase-nosql\/","url":"https:\/\/www.couchbase.com\/blog\/create-restful-api-node-js-hapi-couchbase-nosql\/","name":"Criar uma API RESTful com Node.js, Hapi e Couchbase NoSQL","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/create-restful-api-node-js-hapi-couchbase-nosql\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/create-restful-api-node-js-hapi-couchbase-nosql\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","datePublished":"2017-10-02T14:00:08+00:00","dateModified":"2023-09-09T09:30:23+00:00","description":"Saiba como criar uma API RESTful com o Couchbase NoSQL, N1QL e a eficiente estrutura Hapi para Node.js","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/create-restful-api-node-js-hapi-couchbase-nosql\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/create-restful-api-node-js-hapi-couchbase-nosql\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/create-restful-api-node-js-hapi-couchbase-nosql\/#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\/create-restful-api-node-js-hapi-couchbase-nosql\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Create a RESTful API with Node.js, Hapi, and Couchbase NoSQL"}]},{"@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\/bb545ebe83bb2d12f91095811d0a72e1","name":"Nic Raboy, defensor dos desenvolvedores, Couchbase","image":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/secure.gravatar.com\/avatar\/bedeb68368d4681aca4c74fe5f697f0c423b80d498ec50fd915ba018b72c101f?s=96&d=mm&r=g8863514d8bed0cf6080f23db40e00354","url":"https:\/\/secure.gravatar.com\/avatar\/bedeb68368d4681aca4c74fe5f697f0c423b80d498ec50fd915ba018b72c101f?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/bedeb68368d4681aca4c74fe5f697f0c423b80d498ec50fd915ba018b72c101f?s=96&d=mm&r=g","caption":"Nic Raboy, Developer Advocate, Couchbase"},"description":"Nic Raboy \u00e9 um defensor das modernas tecnologias de desenvolvimento m\u00f3vel e da Web. Ele tem experi\u00eancia em Java, JavaScript, Golang e uma variedade de estruturas, como Angular, NativeScript e Apache Cordova. Nic escreve sobre suas experi\u00eancias de desenvolvimento relacionadas a tornar o desenvolvimento m\u00f3vel e da Web mais f\u00e1cil de entender.","sameAs":["https:\/\/www.thepolyglotdeveloper.com","https:\/\/www.facebook.com\/thepolyglotdeveloper","https:\/\/x.com\/nraboy"],"url":"https:\/\/www.couchbase.com\/blog\/pt\/author\/nic-raboy-2\/"}]}},"acf":[],"authors":[{"term_id":9032,"user_id":63,"is_guest":0,"slug":"nic-raboy-2","display_name":"Nic Raboy, Developer Advocate, Couchbase","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/bedeb68368d4681aca4c74fe5f697f0c423b80d498ec50fd915ba018b72c101f?s=96&d=mm&r=g","0":null,"1":"","2":"","3":"","4":"","5":"","6":"","7":"","8":""}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/3974","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\/63"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/comments?post=3974"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/3974\/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=3974"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/categories?post=3974"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/tags?post=3974"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/ppma_author?post=3974"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}