{"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\/generating-couchbase-api-dreamfactory\/","title":{"rendered":"Generating Couchbase APIs with DreamFactory"},"content":{"rendered":"\r\n<p><em>This is a guest post written by W. Jason Gilmore (<a href=\"https:\/\/www.wjgilmore.com\">https:\/\/www.wjgilmore.com<\/a>) 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 teams around the globe build amazing software solutions. Jason is a prolific writer on the subject of web technologies with almost a dozen books and more than 300 articles to his credit. He serves as a special technical advisor for several startups based in Ohio and New 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>Modern organizations are under tremendous pressure to efficiently process and incorporate data into every initiative. In fact, the emphasis placed upon extracting, compiling, analyzing, and disseminating information is such that an entirely new field of study known as <strong>data science<\/strong> has emerged to make sense of it all (for those of you thinking this sounds suspiciously academic, take note that Harvard Business Review called data science <a href=\"https:\/\/hbr.org\/2012\/10\/data-scientist-the-sexiest-job-of-the-21st-century\">The Sexiest Job of the 21st Century<\/a>.<\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\" id=\"_the_need_for_apis\">The Need for APIs<\/h2>\r\n\r\n\r\n\r\n<p>In addition to formalizing the data management process, IT teams have increasingly embraced heterogeneous database environments and API-driven development in an effort to ensure data can be ingested, processed, and distributed with minimal friction. Gone are the days when an entire organization standardizes upon a particular database vendor; instead, it\u2019s now commonplace for enterprises to embrace a mixture of both commercial and open source SQL and NoSQL solutions.<\/p>\r\n\r\n\r\n\r\n<p>Of course, there must be some sane way to manage data as it flows through these databases, and that\u2019s where APIs come in. Because databases must often be queried from a variety of applications (iOS, web, etc.), developers have in recent years eschewed application-specific libraries in preference for APIs. By creating and plugging into a uniform API, developers can focus on the application itself rather than database-related plumbing.<\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\" id=\"_enter_dreamfactory\">Enter DreamFactory<\/h2>\r\n\r\n\r\n\r\n<p>Or at least that\u2019s the idea. The reality is, building and maintaining a database API is an extraordinarily time-consuming and costly endeavor. While an experienced team can build a CRUD API interface in perhaps a few weeks, they often don\u2019t take into consideration the many additional requisite features necessary for API management. Capabilities such as authentication and authorization, request volume limiting, caching, and logging are often not considered when planning an API, and figuring out how to implement these capabilities in a piecemeal fashion can be extraordinarily difficult and costly.<\/p>\r\n\r\n\r\n\r\n<p>Many organizations avoid these headaches by adopting an <strong>API management platform<\/strong>. One particularly popular such solution is <a href=\"https:\/\/www.dreamfactory.com\">DreamFactory<\/a>. Not only is it open source (commercial versions offering advanced capabilities are also available), but it also includes native support for Couchbase! In this post you\u2019ll learn how to generate a Couchbase REST API using DreamFactory in just minutes, and then lock down API access using DreamFactory\u2019s role management feature.<\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\" id=\"_introducing_dreamfactory\">Introducing DreamFactory<\/h2>\r\n\r\n\r\n\r\n<p><a href=\"https:\/\/www.dreamfactory.com\/\">DreamFactory<\/a> is an API automation and management framework used by tens of thousands of organizations around the globe. Although its popularity largely stems from the ability to generate full featured, documented, and secure APIs for a variety of SQL and NoSQL databases with no coding required, DreamFactory actually supports thousands of data sources and third-party services, including e-mail delivery providers, mobile notification services including AWS SNS, Apple and GCM Push, and for converting SOAP services to REST.<\/p>\r\n\r\n\r\n\r\n<p>DreamFactory supports a total of 18 databases, including MySQL, Oracle, Microsoft SQL Server, and\u2026\u200b Couchbase! Generating an API is very straightforward, requiring only the provision of a desired API name and Couchbase server credentials. To create an API, you\u2019ll begin by logging into the DreamFactory web administration interface. You\u2019ll be able to access DreamFactory\u2019s key features via the navigational bar:<\/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>Create the service by clicking on <code>Services<\/code> then <code>Create<\/code>, then choose <code>Couchbase<\/code> from the <code>Database<\/code> category:<\/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>Next you\u2019ll choose an API name, and set a label and description. The name is particularly important, because as you\u2019ll see this will serve as a namespace of sorts for your generated API. The label and description are just for reference purposes within the administration 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\/12004-service-couchbase-config.png\" alt=\"Couchbase configuration in DreamFactory\" \/><\/figure>\r\n\r\n\r\n\r\n<p>After completing these fields, click on the <code>Config<\/code> tab and supply your Couchbase credentials:<\/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>In addition to the <code>Host<\/code>, <code>Port<\/code>, <code>Username<\/code> and <code>Password<\/code> fields, you can optionally cap the number of records returned by a <code>GET<\/code> request, and enable data caching for a set period of time. For the purposes of this tutorial I\u2019ll leave those options untouched and just generate the API by pressing the <code>Save<\/code> button.<\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\" id=\"_interacting_with_the_api\">Interacting with the API<\/h2>\r\n\r\n\r\n\r\n<p>Once the API has been generated, you can navigate to the <code>API Docs<\/code> interface to experiment with it. DreamFactory generates Swagger documentation for each API, and administrators can provide users with restricted access to this documentation. Select the new API, and you\u2019ll be presented with a list of all available endpoints:<\/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>Choose the <code>GET \/_schema<\/code> endpoint and press the <code>Try it out<\/code> button. Because Swagger documentation is interactive, you can learn how the API works without having to jump straight into code, which can greatly decrease frustration. Pressing <code>Try it out<\/code> will enable the various parameter fields associated with this endpoint:<\/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>NOTE: Because of the breadth of supported databases, and the importance placed on providing a uniform database API interface regardless of the underlying database type, DreamFactory uses generic terms for referring to database-related structures. Logically, these terms don\u2019t always map exactly to database-specific terminology. For instance Couchbase uses the term <strong>bucket<\/strong> to represent a database, whereas DreamFactory uses the generic term <strong>schema<\/strong> for this representation.<\/em><\/p>\r\n\r\n\r\n\r\n<p>Press the <code>Execute<\/code> button and the API endpoint will be queried, returning all available buckets. Couchbase users will be familiar with the <code>travel-sample<\/code> bucket returned in the following response:<\/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\">Accessing data from the API<\/h2>\r\n\r\n\r\n\r\n<p>Next, scroll down to the <code>GET \/_table\/{table_name}<\/code> endpoint to retrieve records (documents) from the <code>travel-sample<\/code> bucket. The process for doing so is similar to that used for retrieving the buckets; you\u2019ll select the endpoint, press <code>Try it out<\/code>, and then enter any desired API endpoint parameters. As you can see from the below screenshot, this endpoint supports quite a few parameters:<\/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>When it comes to selecting records, DreamFactory supports everything you\u2019d typically do when querying a database. You can select specific fields, join tables, filter records, apply limits and offsets, and so forth. For this example let\u2019s just keep it simple and scroll down to the bottom of the parameter list and enter <code>travel-sample<\/code> into the <code>table_name<\/code> parameter. Press <code>Execute<\/code> and you\u2019ll see the following results:<\/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\">Generating a Restricted API Key<\/h2>\r\n\r\n\r\n\r\n<p>The API Docs interface is great for learning more about how an API works, however you\u2019ll inevitably want to begin querying the API from a web or mobile application. To do so, you\u2019ll want to first generate an <strong>API key<\/strong>. This is because DreamFactory doesn\u2019t support the concept of a public API; all APIs are protected by at minimum an API key. Further, each API key is mapped to a <strong>role<\/strong>. DreamFactory roles determine what it is a client in possession of an API key can do in conjunction with the API. For instance, you might create a role that is read-only, or which might only allow access to a specific database table, or which might only be able to insert records into one table but read records from another table.<\/p>\r\n\r\n\r\n\r\n<p>To create a role, navigate to the <code>Roles<\/code> tab, and press <code>Create<\/code>. You\u2019ll assign a role name and description, and then click the <code>Access<\/code> tab. It\u2019s here where the magic happens. In the following screenshot you\u2019ll see I\u2019ve selected the <code>couchbase<\/code> API (service), and set <code>Component<\/code> to <code>_table\/travel-sample\/*<\/code>, meaning the role can only access this particular data set. Further, I\u2019ve set <code>Access<\/code> to <code>GET<\/code>, meaning this will be a read-only role:<\/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>There are a few other interesting features here, however for the sake of brevity I suggest just pressing <code>Save<\/code> to generate the role.<\/p>\r\n\r\n\r\n\r\n<p>Next, click on the <code>Apps<\/code> tab to generate an API key. Press the <code>Create<\/code> button and you\u2019ll be presented with the following 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>Here you\u2019ll supply an application name and description. You\u2019ll also choose a role for this API key, and in this example I\u2019ve selected the newly generated <code>couchbase<\/code> role. Finally, for the <code>App Location<\/code> I\u2019ve selected <code>No storage required<\/code> because I\u2019ll be connecting to the API from a remote location such as a web application. Press <code>Save<\/code> and you\u2019ll be returned to the application key listing:<\/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>Congratulations, you\u2019ve just created a restricted read-only API key! Now let\u2019s use that key to talk to the Couchbase bucket.<\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\" id=\"_connecting_to_your_api\">Connecting to your API<\/h2>\r\n\r\n\r\n\r\n<p>With your API key in hand, it\u2019s time to interact with the API from outside of the DreamFactory interface. For the purposes of this example I\u2019ll use the <a href=\"https:\/\/insomnia.rest\/\">Insomnia REST client<\/a> however you\u2019re free to use <a href=\"https:\/\/www.getpostman.com\/\">Postman<\/a>, another API client, or certainly can build out a simple web or iPhone interface. In the following screenshot I\u2019ve queried the <code>\/api\/v2\/couchbase\/_table\/travel-sample<\/code> endpoint, and on the right-side of the interface you can see the results:<\/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>Of particular importance here is the <code>X-DreamFactory-Api-Key<\/code> header! It\u2019s here where the API key is supplied. Neglecting to supply the key will result in a <code>400<\/code> status code with an error message pertaining to a missing key. Additionally, if this key attempts to access a restricted table or perform an action (insert, update, etc) that hasn\u2019t been expressly allowed within the role definition, a <code>401<\/code> unauthorized status code will be returned.<\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\" id=\"_resources\">Resources<\/h2>\r\n\r\n\r\n\r\n<p>Hopefully this introduction to DreamFactory got your mind racing regarding how quickly you can begin building Couchbase-backed applications. If you\u2019re interested in learning more the following resources should be useful:<\/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\">The DreamFactory website<\/a>: The official DreamFactory website includes all kinds of information about the platform.<\/li>\r\n<li><a href=\"https:\/\/guide.dreamfactory.com\/?utm_source=couchbase&amp;utm_medium=blog&amp;utm_campaign=traffic\">Getting Started with DreamFactory<\/a>: This recently published guide to DreamFactory fundamentals walks you through key platform capabilities. In particular I suggest reading <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\">chapter 3<\/a>.<\/li>\r\n<li><a href=\"https:\/\/academy.dreamfactory.com\/?utm_source=couchbase&amp;utm_medium=blog&amp;utm_campaign=traffic\">DreamFactory Academy<\/a>: DreamFactory Academy includes several introductory videos. You might additionally want to check out the much more expansive <a href=\"https:\/\/www.youtube.com\/user\/dreamfactorysoftware\">Youtube channel<\/a>.<\/li>\r\n<li><a href=\"https:\/\/www.dreamfactory.com\/downloads-interstitial\/?utm_source=couchbase&amp;utm_medium=blog&amp;utm_campaign=traffic\">DreamFactory downloads<\/a>: DreamFactory is available in a wide variety of versions, and is supported on all major platforms. Head to this link to choose your desired version!<\/li>\r\n<li><a href=\"https:\/\/blog.dreamfactory.com\/?utm_source=couchbase&amp;utm_medium=blog&amp;utm_campaign=traffic\">DreamFactory blog<\/a>: You\u2019ll find a stream of regularly published posts about DreamFactory features here, including this recent post about <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\">creating a geofence API using the Haversine formula, PHP, and DreamFactory\u2019s scripted API services<\/a>.<\/li>\r\n<\/ul>\r\n","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>\n","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.7.1 (Yoast SEO v25.7) - 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\/generating-couchbase-api-dreamfactory\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\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\/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 minutes\" \/>\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\",\"inLanguage\":\"en-US\",\"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\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/generating-couchbase-api-dreamfactory\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@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\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@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\":\"en-US\",\"@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\/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\/generating-couchbase-api-dreamfactory\/","og_locale":"en_US","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\/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 minutes"},"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","inLanguage":"en-US","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":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/generating-couchbase-api-dreamfactory\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@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":"en-US"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"The Couchbase Blog","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@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":"en-US","@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\/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 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."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts\/6669","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/users\/71"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/comments?post=6669"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts\/6669\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/media\/6678"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/media?parent=6669"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/categories?post=6669"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/tags?post=6669"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/ppma_author?post=6669"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}