{"id":6669,"date":"2019-04-15T07:26:38","date_gmt":"2019-04-15T14:26:38","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=6669"},"modified":"2019-05-17T12:35:20","modified_gmt":"2019-05-17T19:35:20","slug":"generating-couchbase-api-dreamfactory","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/pt\/generating-couchbase-api-dreamfactory\/","title":{"rendered":"Gera\u00e7\u00e3o de APIs do Couchbase com o DreamFactory"},"content":{"rendered":"<p><em>Esta \u00e9 uma postagem de convidado escrita por W. Jason Gilmore (<a href=\"https:\/\/www.wjgilmore.com\">https:\/\/www.wjgilmore.com<\/a>), CTO da DreamFactory, Inc., uma plataforma de automa\u00e7\u00e3o e gerenciamento de APIs de c\u00f3digo aberto. Antes de ingressar na DreamFactory, ele passou grande parte de sua carreira como consultor e desenvolvedor, ajudando equipes de todo o mundo a criar solu\u00e7\u00f5es de software incr\u00edveis. Jason \u00e9 um escritor prol\u00edfico no assunto de tecnologias da Web, com quase uma d\u00fazia de livros e mais de 300 artigos em seu curr\u00edculo. Ele atua como consultor t\u00e9cnico especial para v\u00e1rias startups sediadas em Ohio e Nova York.<\/em><\/p>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2019\/04\/12001-jason-headshot-400.jpg\" alt=\"Jason Gilmore\" \/><\/figure>\r\n\r\n\r\n\r\n<p>As organiza\u00e7\u00f5es modernas est\u00e3o sob enorme press\u00e3o para processar e incorporar dados de forma eficiente em todas as iniciativas. De fato, a \u00eanfase dada \u00e0 extra\u00e7\u00e3o, \u00e0 compila\u00e7\u00e3o, \u00e0 an\u00e1lise e \u00e0 dissemina\u00e7\u00e3o de informa\u00e7\u00f5es \u00e9 tanta que um campo de estudo totalmente novo, conhecido como <strong>ci\u00eancia de dados<\/strong> surgiu para dar sentido a tudo isso (para aqueles que est\u00e3o pensando que isso soa desconfiadamente acad\u00eamico, observe que a Harvard Business Review chamou a ci\u00eancia de dados de <a href=\"https:\/\/hbr.org\/2012\/10\/data-scientist-the-sexiest-job-of-the-21st-century\">O trabalho mais sexy do s\u00e9culo XXI<\/a>.<\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\" id=\"_the_need_for_apis\">A necessidade de APIs<\/h2>\r\n\r\n\r\n\r\n<p>Al\u00e9m de formalizar o processo de gerenciamento de dados, as equipes de TI t\u00eam adotado cada vez mais ambientes de bancos de dados heterog\u00eaneos e desenvolvimento orientado por APIs, em um esfor\u00e7o para garantir que os dados possam ser ingeridos, processados e distribu\u00eddos com o m\u00ednimo de atrito. J\u00e1 se foi o tempo em que uma organiza\u00e7\u00e3o inteira padronizava um determinado fornecedor de banco de dados; em vez disso, agora \u00e9 comum que as empresas adotem uma mistura de solu\u00e7\u00f5es SQL e NoSQL comerciais e de c\u00f3digo aberto.<\/p>\r\n\r\n\r\n\r\n<p>\u00c9 claro que deve haver uma maneira sensata de gerenciar os dados \u00e0 medida que eles fluem por esses bancos de dados, e \u00e9 a\u00ed que entram as APIs. Como os bancos de dados geralmente precisam ser consultados em v\u00e1rios aplicativos (iOS, Web etc.), nos \u00faltimos anos os desenvolvedores t\u00eam evitado bibliotecas espec\u00edficas de aplicativos, preferindo as APIs. Ao criar e se conectar a uma API uniforme, os desenvolvedores podem se concentrar no aplicativo em si, em vez de se preocuparem com o encanamento relacionado ao banco de dados.<\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\" id=\"_enter_dreamfactory\">Entrar no DreamFactory<\/h2>\r\n\r\n\r\n\r\n<p>Ou, pelo menos, essa \u00e9 a ideia. A realidade \u00e9 que a cria\u00e7\u00e3o e a manuten\u00e7\u00e3o de uma API de banco de dados \u00e9 um esfor\u00e7o extraordinariamente demorado e caro. Embora uma equipe experiente possa criar uma interface de API CRUD em algumas semanas, ela geralmente n\u00e3o leva em considera\u00e7\u00e3o os v\u00e1rios recursos adicionais necess\u00e1rios para o gerenciamento da API. Recursos como autentica\u00e7\u00e3o e autoriza\u00e7\u00e3o, limita\u00e7\u00e3o de volume de solicita\u00e7\u00f5es, armazenamento em cache e registro em log geralmente n\u00e3o s\u00e3o considerados no planejamento de uma API, e descobrir como implementar esses recursos de forma fragmentada pode ser extremamente dif\u00edcil e caro.<\/p>\r\n\r\n\r\n\r\n<p>Muitas organiza\u00e7\u00f5es evitam essas dores de cabe\u00e7a adotando um <strong>Plataforma de gerenciamento de API<\/strong>. Uma solu\u00e7\u00e3o desse tipo particularmente popular \u00e9 <a href=\"https:\/\/www.dreamfactory.com\">DreamFactory<\/a>. Ele n\u00e3o s\u00f3 \u00e9 de c\u00f3digo aberto (vers\u00f5es comerciais que oferecem recursos avan\u00e7ados tamb\u00e9m est\u00e3o dispon\u00edveis), mas tamb\u00e9m inclui suporte nativo para o Couchbase! Nesta postagem, voc\u00ea aprender\u00e1 como gerar uma API REST do Couchbase usando o DreamFactory em apenas alguns minutos e, em seguida, bloquear o acesso \u00e0 API usando o recurso de gerenciamento de fun\u00e7\u00f5es do DreamFactory.<\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\" id=\"_introducing_dreamfactory\">Apresentando o DreamFactory<\/h2>\r\n\r\n\r\n\r\n<p><a href=\"https:\/\/www.dreamfactory.com\/\">DreamFactory<\/a> \u00e9 uma estrutura de automa\u00e7\u00e3o e gerenciamento de APIs usada por dezenas de milhares de organiza\u00e7\u00f5es em todo o mundo. Embora sua popularidade decorra em grande parte da capacidade de gerar APIs seguras, documentadas e com todos os recursos para uma variedade de bancos de dados SQL e NoSQL sem necessidade de codifica\u00e7\u00e3o, o DreamFactory, na verdade, oferece suporte a milhares de fontes de dados e servi\u00e7os de terceiros, incluindo provedores de entrega de e-mail, servi\u00e7os de notifica\u00e7\u00e3o m\u00f3vel, incluindo AWS SNS, Apple e GCM Push, e para converter servi\u00e7os SOAP em REST.<\/p>\r\n\r\n\r\n\r\n<p>O DreamFactory \u00e9 compat\u00edvel com um total de 18 bancos de dados, incluindo MySQL, Oracle, Microsoft SQL Server e... Couchbase! A gera\u00e7\u00e3o de uma API \u00e9 muito simples, exigindo apenas o fornecimento de um nome de API desejado e credenciais do servidor Couchbase. Para criar uma API, voc\u00ea come\u00e7ar\u00e1 fazendo login na interface de administra\u00e7\u00e3o da Web do DreamFactory. Voc\u00ea poder\u00e1 acessar os principais recursos do DreamFactory por meio da barra de navega\u00e7\u00e3o:<\/p>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2019\/04\/12002-services-navbar.png\" alt=\"DreamFactory navigational bar\" \/><\/figure>\r\n\r\n\r\n\r\n<p>Crie o servi\u00e7o clicando em <code>Servi\u00e7os<\/code> ent\u00e3o <code>Criar<\/code>e, em seguida, escolha <code>Couchbase<\/code> do <code>Banco de dados<\/code> categoria:<\/p>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2019\/04\/12003-service-select.png\" alt=\"Select the Couchbase database service\" \/><\/figure>\r\n\r\n\r\n\r\n<p>Em seguida, voc\u00ea escolher\u00e1 um nome de API e definir\u00e1 um r\u00f3tulo e uma descri\u00e7\u00e3o. O nome \u00e9 particularmente importante, pois, como voc\u00ea ver\u00e1, ele servir\u00e1 como uma esp\u00e9cie de espa\u00e7o de nome para a API gerada. O r\u00f3tulo e a descri\u00e7\u00e3o s\u00e3o apenas para fins de refer\u00eancia na interface de administra\u00e7\u00e3o:<\/p>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2019\/04\/12004-service-couchbase-config.png\" alt=\"Couchbase configuration in DreamFactory\" \/><\/figure>\r\n\r\n\r\n\r\n<p>Depois de preencher esses campos, clique no bot\u00e3o <code>Configura\u00e7\u00e3o<\/code> e forne\u00e7a suas credenciais do Couchbase:<\/p>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2019\/04\/12005-service-couchbase-config2.png\" alt=\"Completed Couchbase configuration in DreamFactory\" \/><\/figure>\r\n\r\n\r\n\r\n<p>Al\u00e9m do <code>Anfitri\u00e3o<\/code>, <code>Porto<\/code>, <code>Nome de usu\u00e1rio<\/code> e <code>Senha<\/code> opcionalmente, \u00e9 poss\u00edvel limitar o n\u00famero de registros retornados por um campo <code>OBTER<\/code> e ativar o cache de dados por um per\u00edodo de tempo definido. Para os fins deste tutorial, deixarei essas op\u00e7\u00f5es intocadas e apenas gerarei a API pressionando o bot\u00e3o <code>Salvar<\/code> bot\u00e3o.<\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\" id=\"_interacting_with_the_api\">Interagindo com a API<\/h2>\r\n\r\n\r\n\r\n<p>Depois que a API tiver sido gerada, voc\u00ea poder\u00e1 navegar at\u00e9 a se\u00e7\u00e3o <code>Documentos da API<\/code> para fazer experi\u00eancias com ela. O DreamFactory gera documenta\u00e7\u00e3o Swagger para cada API, e os administradores podem fornecer aos usu\u00e1rios acesso restrito a essa documenta\u00e7\u00e3o. Selecione a nova API e voc\u00ea ver\u00e1 uma lista de todos os pontos de extremidade dispon\u00edveis:<\/p>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2019\/04\/12006-api-docs-list.png\" alt=\"API endpoints created by DreamFactory\" \/><\/figure>\r\n\r\n\r\n\r\n<p>Escolha o <code>GET \/_schema<\/code> e pressione a tecla <code>Experimente<\/code> bot\u00e3o. Como a documenta\u00e7\u00e3o do Swagger \u00e9 interativa, voc\u00ea pode aprender como a API funciona sem ter que ir direto para o c\u00f3digo, o que pode reduzir bastante a frustra\u00e7\u00e3o. Pressionando <code>Experimente<\/code> habilitar\u00e1 os v\u00e1rios campos de par\u00e2metros associados a esse ponto de extremidade:<\/p>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2019\/04\/12007-api-docs-schema.png\" alt=\"Detailed information about an API endpoint\" \/><\/figure>\r\n\r\n\r\n\r\n<p><em>OBSERVA\u00c7\u00c3O: devido \u00e0 amplitude dos bancos de dados suportados e \u00e0 import\u00e2ncia dada ao fornecimento de uma interface de API de banco de dados uniforme, independentemente do tipo de banco de dados subjacente, o DreamFactory usa termos gen\u00e9ricos para se referir a estruturas relacionadas a bancos de dados. Logicamente, esses termos nem sempre mapeiam exatamente a terminologia espec\u00edfica do banco de dados. Por exemplo, o Couchbase usa o termo <strong>balde<\/strong> para representar um banco de dados, enquanto o DreamFactory usa o termo gen\u00e9rico <strong>esquema<\/strong> para essa representa\u00e7\u00e3o.<\/em><\/p>\r\n\r\n\r\n\r\n<p>Pressione o bot\u00e3o <code>Executar<\/code> e o ponto de extremidade da API ser\u00e1 consultado, retornando todos os buckets dispon\u00edveis. Os usu\u00e1rios do Couchbase estar\u00e3o familiarizados com a fun\u00e7\u00e3o <code>amostra de viagem<\/code> retornado na resposta a seguir:<\/p>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2019\/04\/12008-api-docs-schema-response.png\" alt=\"Example of a response from an API endpoint\" \/><\/figure>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\" id=\"_accessing_data_from_the_api\">Acesso a dados da API<\/h2>\r\n\r\n\r\n\r\n<p>Em seguida, role para baixo at\u00e9 a se\u00e7\u00e3o <code>GET \/_table\/{table_name}<\/code> para recuperar registros (documentos) do <code>amostra de viagem<\/code> bucket. O processo para fazer isso \u00e9 semelhante ao usado para recuperar os buckets; voc\u00ea selecionar\u00e1 o endpoint, pressionar\u00e1 <code>Experimente<\/code>e, em seguida, insira os par\u00e2metros de endpoint de API desejados. Como voc\u00ea pode ver na captura de tela abaixo, esse endpoint \u00e9 compat\u00edvel com v\u00e1rios par\u00e2metros:<\/p>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2019\/04\/12009-api-docs-get-table.png\" alt=\"API documentation\" \/><\/figure>\r\n\r\n\r\n\r\n<p>Quando se trata de selecionar registros, o DreamFactory oferece suporte a tudo o que voc\u00ea normalmente faria ao consultar um banco de dados. \u00c9 poss\u00edvel selecionar campos espec\u00edficos, unir tabelas, filtrar registros, aplicar limites e deslocamentos, e assim por diante. Para este exemplo, vamos manter a simplicidade e rolar para baixo at\u00e9 a parte inferior da lista de par\u00e2metros e inserir <code>amostra de viagem<\/code> no <code>nome_da_tabela<\/code> par\u00e2metro. Pressione <code>Executar<\/code> e voc\u00ea ver\u00e1 os seguintes resultados:<\/p>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2019\/04\/12010-api-docs-get-results.png\" alt=\"Couchbase results through DreamFactory\" \/><\/figure>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\" id=\"_generating_a_restricted_api_key\">Gera\u00e7\u00e3o de uma chave de API restrita<\/h2>\r\n\r\n\r\n\r\n<p>A interface API Docs \u00e9 excelente para saber mais sobre o funcionamento de uma API, mas \u00e9 inevit\u00e1vel que voc\u00ea queira come\u00e7ar a consultar a API em um aplicativo da Web ou m\u00f3vel. Para isso, voc\u00ea dever\u00e1 primeiro gerar um aplicativo <strong>Chave da API<\/strong>. Isso ocorre porque o DreamFactory n\u00e3o suporta o conceito de uma API p\u00fablica; todas as APIs s\u00e3o protegidas, no m\u00ednimo, por uma chave de API. Al\u00e9m disso, cada chave de API \u00e9 mapeada para uma <strong>fun\u00e7\u00e3o<\/strong>. As fun\u00e7\u00f5es do DreamFactory determinam o que um cliente de posse de uma chave de API pode fazer em conjunto com a API. Por exemplo, voc\u00ea pode criar uma fun\u00e7\u00e3o que seja somente de leitura, ou que permita apenas o acesso a uma tabela espec\u00edfica do banco de dados, ou que possa inserir registros em uma tabela, mas ler registros de outra tabela.<\/p>\r\n\r\n\r\n\r\n<p>Para criar uma fun\u00e7\u00e3o, navegue at\u00e9 a se\u00e7\u00e3o <code>Fun\u00e7\u00f5es<\/code> e pressione <code>Criar<\/code>. Voc\u00ea atribuir\u00e1 um nome e uma descri\u00e7\u00e3o \u00e0 fun\u00e7\u00e3o e, em seguida, clicar\u00e1 no bot\u00e3o <code>Acesso<\/code> aba. \u00c9 aqui que a m\u00e1gica acontece. Na captura de tela a seguir, voc\u00ea ver\u00e1 que selecionei a guia <code>couchbase<\/code> API (servi\u00e7o) e definir <code>Componente<\/code> para <code>_table\/travel-sample\/*<\/code>ou seja, a fun\u00e7\u00e3o s\u00f3 pode acessar esse conjunto de dados espec\u00edfico. Al\u00e9m disso, defini <code>Acesso<\/code> para <code>OBTER<\/code>o que significa que essa ser\u00e1 uma fun\u00e7\u00e3o somente de leitura:<\/p>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2019\/04\/12011-create-role.png\" alt=\"Create a DreamFactory role\" \/><\/figure>\r\n\r\n\r\n\r\n<p>H\u00e1 alguns outros recursos interessantes aqui, mas, por uma quest\u00e3o de brevidade, sugiro apenas pressionar <code>Salvar<\/code> para gerar a fun\u00e7\u00e3o.<\/p>\r\n\r\n\r\n\r\n<p>Em seguida, clique no bot\u00e3o <code>Aplicativos<\/code> para gerar uma chave de API. Pressione o bot\u00e3o <code>Criar<\/code> e voc\u00ea ver\u00e1 a seguinte interface:<\/p>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2019\/04\/12012-create-application.png\" alt=\"Create a DreamFactory application\" \/><\/figure>\r\n\r\n\r\n\r\n<p>Aqui voc\u00ea fornecer\u00e1 um nome e uma descri\u00e7\u00e3o do aplicativo. Voc\u00ea tamb\u00e9m escolher\u00e1 uma fun\u00e7\u00e3o para essa chave de API e, neste exemplo, selecionei a rec\u00e9m-gerada <code>couchbase<\/code> fun\u00e7\u00e3o. Por fim, para o <code>Localiza\u00e7\u00e3o do aplicativo<\/code> Eu selecionei <code>N\u00e3o \u00e9 necess\u00e1rio armazenamento<\/code> porque estarei me conectando \u00e0 API de um local remoto, como um aplicativo da Web. Pressione <code>Salvar<\/code> e voc\u00ea retornar\u00e1 \u00e0 listagem de chaves do aplicativo:<\/p>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2019\/04\/12013-couchbase-api-key.png\" alt=\"Create a key for secure DreamFactory API access\" \/><\/figure>\r\n\r\n\r\n\r\n<p>Parab\u00e9ns, voc\u00ea acabou de criar uma chave de API restrita somente para leitura! Agora vamos usar essa chave para falar com o bucket do Couchbase.<\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\" id=\"_connecting_to_your_api\">Conectando-se \u00e0 sua API<\/h2>\r\n\r\n\r\n\r\n<p>Com sua chave de API em m\u00e3os, \u00e9 hora de interagir com a API de fora da interface do DreamFactory. Para os fins deste exemplo, usarei o <a href=\"https:\/\/insomnia.rest\/\">Cliente REST da Insomnia<\/a> no entanto, voc\u00ea pode usar <a href=\"https:\/\/www.getpostman.com\/\">Carteiro<\/a>Outro cliente de API, ou certamente pode criar uma interface simples para a Web ou para o iPhone. Na captura de tela a seguir, consultei a <code>\/api\/v2\/couchbase\/_table\/travel-sample<\/code> e, no lado direito da interface, voc\u00ea pode ver os resultados:<\/p>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2019\/04\/12014-insomnia.png\" alt=\"Using Insomnia to interact with the REST API\" \/><\/figure>\r\n\r\n\r\n\r\n<p>De particular import\u00e2ncia aqui \u00e9 o <code>X-DreamFactory-Api-Key<\/code> header! \u00c9 aqui que a chave da API \u00e9 fornecida. Deixar de fornecer a chave resultar\u00e1 em uma mensagem <code>400<\/code> com uma mensagem de erro referente a uma chave ausente. Al\u00e9m disso, se essa chave tentar acessar uma tabela restrita ou executar uma a\u00e7\u00e3o (inserir, atualizar etc.) que n\u00e3o tenha sido expressamente permitida na defini\u00e7\u00e3o da fun\u00e7\u00e3o, ser\u00e1 gerado um <code>401<\/code> um c\u00f3digo de status n\u00e3o autorizado ser\u00e1 retornado.<\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\" id=\"_resources\">Recursos<\/h2>\r\n\r\n\r\n\r\n<p>Esperamos que esta introdu\u00e7\u00e3o ao DreamFactory tenha feito com que sua mente se concentre na rapidez com que voc\u00ea pode come\u00e7ar a criar aplicativos com base no Couchbase. Se voc\u00ea estiver interessado em saber mais, os recursos a seguir devem ser \u00fateis:<\/p>\r\n\r\n\r\n\r\n<ul class=\"wp-block-list\">\r\n<li><a href=\"https:\/\/www.dreamfactory.com\/?utm_source=couchbase&amp;utm_medium=blog&amp;utm_campaign=traffic\">O site da DreamFactory<\/a>: O site oficial do DreamFactory inclui todos os tipos de informa\u00e7\u00f5es sobre a plataforma.<\/li>\r\n<li><a href=\"https:\/\/guide.dreamfactory.com\/?utm_source=couchbase&amp;utm_medium=blog&amp;utm_campaign=traffic\">Primeiros passos com o DreamFactory<\/a>: Este guia recentemente publicado sobre os fundamentos do DreamFactory o orienta sobre os principais recursos da plataforma. Em particular, sugiro a leitura de <a href=\"https:\/\/guide.dreamfactory.com\/docs\/#chapter-3-generating-a-database-backed-api?utm_source=couchbase&amp;utm_medium=blog&amp;utm_campaign=traffic\">cap\u00edtulo 3<\/a>.<\/li>\r\n<li><a href=\"https:\/\/academy.dreamfactory.com\/?utm_source=couchbase&amp;utm_medium=blog&amp;utm_campaign=traffic\">Academia DreamFactory<\/a>: A DreamFactory Academy inclui v\u00e1rios v\u00eddeos introdut\u00f3rios. Al\u00e9m disso, talvez voc\u00ea queira dar uma olhada no muito mais abrangente <a href=\"https:\/\/www.youtube.com\/user\/dreamfactorysoftware\">Canal do YouTube<\/a>.<\/li>\r\n<li><a href=\"https:\/\/www.dreamfactory.com\/downloads-interstitial\/?utm_source=couchbase&amp;utm_medium=blog&amp;utm_campaign=traffic\">Downloads do DreamFactory<\/a>: O DreamFactory est\u00e1 dispon\u00edvel em uma ampla variedade de vers\u00f5es e \u00e9 compat\u00edvel com todas as principais plataformas. Acesse este link para escolher a vers\u00e3o desejada!<\/li>\r\n<li><a href=\"https:\/\/blog.dreamfactory.com\/?utm_source=couchbase&amp;utm_medium=blog&amp;utm_campaign=traffic\">Blog da DreamFactory<\/a>: Voc\u00ea encontrar\u00e1 um fluxo de postagens publicadas regularmente sobre os recursos do DreamFactory aqui, incluindo esta postagem recente sobre <a href=\"https:\/\/blog.dreamfactory.com\/creating-a-geofence-api-using-the-haversine-formula-php-and-dreamfactorys-scripted-api-services\/?utm_source=couchbase&amp;utm_medium=blog&amp;utm_campaign=traffic\">Criar uma API de geofence usando a f\u00f3rmula Haversine, PHP e os servi\u00e7os de API com script do DreamFactory<\/a>.<\/li>\r\n<\/ul>","protected":false},"excerpt":{"rendered":"<p>This is a guest post written by W. Jason Gilmore (https:\/\/www.wjgilmore.com) the CTO of DreamFactory, Inc., an open source API automation and management platform. Prior to joining DreamFactory he spent much of his career as a consultant and developer, helping [&hellip;]<\/p>","protected":false},"author":71,"featured_media":6678,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1],"tags":[],"ppma_author":[8937],"class_list":["post-6669","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.9 (Yoast SEO v25.9) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Generating Couchbase APIs with DreamFactory - The Couchbase Blog<\/title>\n<meta name=\"description\" content=\"DreamFactory help you to build and maintain a database APIs to save you time and money. Let&#039;s get started with DreamFactory and Couchbase.\" \/>\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\/generating-couchbase-api-dreamfactory\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Generating Couchbase APIs with DreamFactory\" \/>\n<meta property=\"og:description\" content=\"DreamFactory help you to build and maintain a database APIs to save you time and money. Let&#039;s get started with DreamFactory and Couchbase.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/pt\/generating-couchbase-api-dreamfactory\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2019-04-15T14:26:38+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2019-05-17T19:35:20+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2019\/04\/120-hero-dreamfactory-logo.png\" \/>\n\t<meta property=\"og:image:width\" content=\"700\" \/>\n\t<meta property=\"og:image:height\" content=\"115\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Matthew Groves\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@mgroves\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Matthew Groves\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"9 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/generating-couchbase-api-dreamfactory\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/generating-couchbase-api-dreamfactory\/\"},\"author\":{\"name\":\"Matthew Groves\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/3929663e372020321b0152dc4fa65a58\"},\"headline\":\"Generating Couchbase APIs with DreamFactory\",\"datePublished\":\"2019-04-15T14:26:38+00:00\",\"dateModified\":\"2019-05-17T19:35:20+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/generating-couchbase-api-dreamfactory\/\"},\"wordCount\":1691,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/generating-couchbase-api-dreamfactory\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/04\/120-hero-dreamfactory-logo.png\",\"articleSection\":[\"Uncategorized\"],\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/generating-couchbase-api-dreamfactory\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/generating-couchbase-api-dreamfactory\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/generating-couchbase-api-dreamfactory\/\",\"name\":\"Generating Couchbase APIs with DreamFactory - The Couchbase Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/generating-couchbase-api-dreamfactory\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/generating-couchbase-api-dreamfactory\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/04\/120-hero-dreamfactory-logo.png\",\"datePublished\":\"2019-04-15T14:26:38+00:00\",\"dateModified\":\"2019-05-17T19:35:20+00:00\",\"description\":\"DreamFactory help you to build and maintain a database APIs to save you time and money. Let's get started with DreamFactory and Couchbase.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/generating-couchbase-api-dreamfactory\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/generating-couchbase-api-dreamfactory\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/generating-couchbase-api-dreamfactory\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/04\/120-hero-dreamfactory-logo.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/04\/120-hero-dreamfactory-logo.png\",\"width\":700,\"height\":115},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/generating-couchbase-api-dreamfactory\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Generating Couchbase APIs with DreamFactory\"}]},{\"@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\/3929663e372020321b0152dc4fa65a58\",\"name\":\"Matthew Groves\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/ba51e6aacc53995c323a634e4502ef54\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/70feb1b28a099ad0112b8d21fe1e81e1a4524beed3e20b7f107d5370e85a07ab?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/70feb1b28a099ad0112b8d21fe1e81e1a4524beed3e20b7f107d5370e85a07ab?s=96&d=mm&r=g\",\"caption\":\"Matthew Groves\"},\"description\":\"Matthew D. Groves is a guy who loves to code. It doesn't matter if it's C#, jQuery, or PHP: he'll submit pull requests for anything. He has been coding professionally ever since he wrote a QuickBASIC point-of-sale app for his parent's pizza shop back in the 90s. He currently works as a Senior Product Marketing Manager for Couchbase. His free time is spent with his family, watching the Reds, and getting involved in the developer community. He is the author of AOP in .NET, Pro Microservices in .NET, a Pluralsight author, and a Microsoft MVP.\",\"sameAs\":[\"https:\/\/crosscuttingconcerns.com\",\"https:\/\/x.com\/mgroves\"],\"url\":\"https:\/\/www.couchbase.com\/blog\/pt\/author\/matthew-groves\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Generating Couchbase APIs with DreamFactory - The Couchbase Blog","description":"DreamFactory help you to build and maintain a database APIs to save you time and money. Let's get started with DreamFactory and Couchbase.","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\/generating-couchbase-api-dreamfactory\/","og_locale":"pt_BR","og_type":"article","og_title":"Generating Couchbase APIs with DreamFactory","og_description":"DreamFactory help you to build and maintain a database APIs to save you time and money. Let's get started with DreamFactory and Couchbase.","og_url":"https:\/\/www.couchbase.com\/blog\/pt\/generating-couchbase-api-dreamfactory\/","og_site_name":"The Couchbase Blog","article_published_time":"2019-04-15T14:26:38+00:00","article_modified_time":"2019-05-17T19:35:20+00:00","og_image":[{"width":700,"height":115,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2019\/04\/120-hero-dreamfactory-logo.png","type":"image\/png"}],"author":"Matthew Groves","twitter_card":"summary_large_image","twitter_creator":"@mgroves","twitter_misc":{"Written by":"Matthew Groves","Est. reading time":"9 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/generating-couchbase-api-dreamfactory\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/generating-couchbase-api-dreamfactory\/"},"author":{"name":"Matthew Groves","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/3929663e372020321b0152dc4fa65a58"},"headline":"Generating Couchbase APIs with DreamFactory","datePublished":"2019-04-15T14:26:38+00:00","dateModified":"2019-05-17T19:35:20+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/generating-couchbase-api-dreamfactory\/"},"wordCount":1691,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/generating-couchbase-api-dreamfactory\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/04\/120-hero-dreamfactory-logo.png","articleSection":["Uncategorized"],"inLanguage":"pt-BR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/generating-couchbase-api-dreamfactory\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/generating-couchbase-api-dreamfactory\/","url":"https:\/\/www.couchbase.com\/blog\/generating-couchbase-api-dreamfactory\/","name":"Generating Couchbase APIs with DreamFactory - The Couchbase Blog","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/generating-couchbase-api-dreamfactory\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/generating-couchbase-api-dreamfactory\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/04\/120-hero-dreamfactory-logo.png","datePublished":"2019-04-15T14:26:38+00:00","dateModified":"2019-05-17T19:35:20+00:00","description":"DreamFactory help you to build and maintain a database APIs to save you time and money. Let's get started with DreamFactory and Couchbase.","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/generating-couchbase-api-dreamfactory\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/generating-couchbase-api-dreamfactory\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/generating-couchbase-api-dreamfactory\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/04\/120-hero-dreamfactory-logo.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/04\/120-hero-dreamfactory-logo.png","width":700,"height":115},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/generating-couchbase-api-dreamfactory\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Generating Couchbase APIs with DreamFactory"}]},{"@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\/3929663e372020321b0152dc4fa65a58","name":"Matthew Groves","image":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/ba51e6aacc53995c323a634e4502ef54","url":"https:\/\/secure.gravatar.com\/avatar\/70feb1b28a099ad0112b8d21fe1e81e1a4524beed3e20b7f107d5370e85a07ab?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/70feb1b28a099ad0112b8d21fe1e81e1a4524beed3e20b7f107d5370e85a07ab?s=96&d=mm&r=g","caption":"Matthew Groves"},"description":"Matthew D. Groves \u00e9 um cara que adora programar. N\u00e3o importa se \u00e9 C#, jQuery ou PHP: ele enviar\u00e1 solicita\u00e7\u00f5es de pull para qualquer coisa. Ele tem programado profissionalmente desde que escreveu um aplicativo de ponto de venda QuickBASIC para a pizzaria de seus pais nos anos 90. Atualmente, ele trabalha como gerente s\u00eanior de marketing de produtos da Couchbase. Seu tempo livre \u00e9 passado com a fam\u00edlia, assistindo aos Reds e participando da comunidade de desenvolvedores. Ele \u00e9 autor de AOP in .NET, Pro Microservices in .NET, autor da Pluralsight e Microsoft MVP.","sameAs":["https:\/\/crosscuttingconcerns.com","https:\/\/x.com\/mgroves"],"url":"https:\/\/www.couchbase.com\/blog\/pt\/author\/matthew-groves\/"}]}},"authors":[{"term_id":8937,"user_id":71,"is_guest":0,"slug":"matthew-groves","display_name":"Matthew Groves","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/70feb1b28a099ad0112b8d21fe1e81e1a4524beed3e20b7f107d5370e85a07ab?s=96&d=mm&r=g","author_category":"","last_name":"Groves","first_name":"Matthew","job_title":"","user_url":"https:\/\/crosscuttingconcerns.com","description":"Matthew D. Groves \u00e9 um cara que adora programar.  N\u00e3o importa se \u00e9 C#, jQuery ou PHP: ele enviar\u00e1 solicita\u00e7\u00f5es de pull para qualquer coisa.  Ele tem programado profissionalmente desde que escreveu um aplicativo de ponto de venda QuickBASIC para a pizzaria de seus pais nos anos 90.  Atualmente, ele trabalha como gerente s\u00eanior de marketing de produtos da Couchbase. Seu tempo livre \u00e9 passado com a fam\u00edlia, assistindo aos Reds e participando da comunidade de desenvolvedores.  Ele \u00e9 autor de AOP in .NET, Pro Microservices in .NET, autor da Pluralsight e Microsoft MVP."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/6669","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\/71"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/comments?post=6669"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/6669\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media\/6678"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media?parent=6669"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/categories?post=6669"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/tags?post=6669"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/ppma_author?post=6669"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}