{"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\/es\/generating-couchbase-api-dreamfactory\/","title":{"rendered":"Generaci\u00f3n de APIs Couchbase con DreamFactory"},"content":{"rendered":"<p><em>Este es un art\u00edculo escrito por W. Jason Gilmore (<a href=\"https:\/\/www.wjgilmore.com\">https:\/\/www.wjgilmore.com<\/a>) es el Director T\u00e9cnico de DreamFactory, Inc, una plataforma de c\u00f3digo abierto de automatizaci\u00f3n y gesti\u00f3n de API. Antes de unirse a DreamFactory, pas\u00f3 gran parte de su carrera como consultor y desarrollador, ayudando a equipos de todo el mundo a crear soluciones de software incre\u00edbles. Jason es un prol\u00edfico escritor sobre tecnolog\u00edas web, con casi una docena de libros y m\u00e1s de 300 art\u00edculos en su haber. Es asesor t\u00e9cnico especial de varias empresas emergentes con sede en Ohio y Nueva 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>Las organizaciones modernas est\u00e1n sometidas a una enorme presi\u00f3n para procesar e incorporar datos de forma eficaz a todas sus iniciativas. De hecho, el \u00e9nfasis que se pone en extraer, recopilar, analizar y difundir informaci\u00f3n es tal que se ha creado un campo de estudio completamente nuevo conocido como <strong>ciencia de datos<\/strong> para dar sentido a todo esto (para los que piensen que esto suena sospechosamente acad\u00e9mico, tomen nota de que Harvard Business Review llam\u00f3 a la ciencia de datos <a href=\"https:\/\/hbr.org\/2012\/10\/data-scientist-the-sexiest-job-of-the-21st-century\">El trabajo m\u00e1s sexy del siglo XXI<\/a>.<\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\" id=\"_the_need_for_apis\">La necesidad de API<\/h2>\r\n\r\n\r\n\r\n<p>Adem\u00e1s de formalizar el proceso de gesti\u00f3n de datos, los equipos de TI han adoptado cada vez m\u00e1s los entornos de bases de datos heterog\u00e9neas y el desarrollo impulsado por API en un esfuerzo por garantizar que los datos se puedan ingerir, procesar y distribuir con la m\u00ednima fricci\u00f3n. Atr\u00e1s han quedado los d\u00edas en los que toda una organizaci\u00f3n se estandarizaba con un proveedor de bases de datos concreto; en su lugar, ahora es habitual que las empresas adopten una mezcla de soluciones SQL y NoSQL comerciales y de c\u00f3digo abierto.<\/p>\r\n\r\n\r\n\r\n<p>Por supuesto, debe haber alguna forma sensata de gestionar los datos a medida que fluyen a trav\u00e9s de estas bases de datos, y ah\u00ed es donde entran en juego las API. Dado que las bases de datos suelen consultarse desde distintas aplicaciones (iOS, web, etc.), en los \u00faltimos a\u00f1os los desarrolladores han preferido las API a las bibliotecas espec\u00edficas de las aplicaciones. Al crear una API uniforme y conectarse a ella, los desarrolladores pueden centrarse en la propia aplicaci\u00f3n en lugar de en la fontaner\u00eda relacionada con las bases de datos.<\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\" id=\"_enter_dreamfactory\">Entra en DreamFactory<\/h2>\r\n\r\n\r\n\r\n<p>O al menos esa es la idea. La realidad es que crear y mantener una API de base de datos es una tarea extraordinariamente larga y costosa. Aunque un equipo experimentado puede crear una interfaz CRUD API en unas pocas semanas, a menudo no tiene en cuenta las numerosas funciones adicionales necesarias para la gesti\u00f3n de la API. Capacidades como la autenticaci\u00f3n y la autorizaci\u00f3n, la limitaci\u00f3n del volumen de solicitudes, el almacenamiento en cach\u00e9 y el registro no suelen tenerse en cuenta a la hora de planificar una API, y averiguar c\u00f3mo implementar estas capacidades de forma fragmentada puede resultar extraordinariamente dif\u00edcil y costoso.<\/p>\r\n\r\n\r\n\r\n<p>Muchas organizaciones evitan estos quebraderos de cabeza adoptando un <strong>Plataforma de gesti\u00f3n de API<\/strong>. Una soluci\u00f3n especialmente popular es <a href=\"https:\/\/www.dreamfactory.com\">DreamFactory<\/a>. No s\u00f3lo es de c\u00f3digo abierto (tambi\u00e9n hay disponibles versiones comerciales que ofrecen capacidades avanzadas), sino que tambi\u00e9n incluye soporte nativo para Couchbase. En este post aprender\u00e1s c\u00f3mo generar una API REST de Couchbase utilizando DreamFactory en cuesti\u00f3n de minutos, y luego bloquear el acceso a la API utilizando la funci\u00f3n de gesti\u00f3n de roles de DreamFactory.<\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\" id=\"_introducing_dreamfactory\">Presentamos DreamFactory<\/h2>\r\n\r\n\r\n\r\n<p><a href=\"https:\/\/www.dreamfactory.com\/\">DreamFactory<\/a> es un marco de automatizaci\u00f3n y gesti\u00f3n de API utilizado por decenas de miles de organizaciones de todo el mundo. Aunque su popularidad se debe en gran medida a la capacidad de generar API completas, documentadas y seguras para una gran variedad de bases de datos SQL y NoSQL sin necesidad de codificaci\u00f3n, DreamFactory admite en realidad miles de fuentes de datos y servicios de terceros, incluidos proveedores de entrega de correo electr\u00f3nico, servicios de notificaci\u00f3n m\u00f3vil como AWS SNS, Apple y GCM Push, y para convertir servicios SOAP a REST.<\/p>\r\n\r\n\r\n\r\n<p>DreamFactory soporta un total de 18 bases de datos, incluyendo MySQL, Oracle, Microsoft SQL Server, y... \u00a1Couchbase! Generar una API es muy sencillo, s\u00f3lo requiere proporcionar el nombre de API deseado y las credenciales del servidor Couchbase. Para crear una API, usted comenzar\u00e1 ingresando a la interfaz de administraci\u00f3n web de DreamFactory. Podr\u00e1 acceder a las caracter\u00edsticas clave de DreamFactory a trav\u00e9s de la barra de navegaci\u00f3n:<\/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>Cree el servicio haciendo clic en <code>Servicios<\/code> entonces <code>Cree<\/code>seleccione <code>Couchbase<\/code> del <code>Base de datos<\/code> categor\u00eda:<\/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>A continuaci\u00f3n elegir\u00e1s un nombre para la API y establecer\u00e1s una etiqueta y una descripci\u00f3n. El nombre es especialmente importante porque, como ver\u00e1s, servir\u00e1 como espacio de nombres para la API generada. La etiqueta y la descripci\u00f3n son s\u00f3lo para fines de referencia dentro de la interfaz de administraci\u00f3n:<\/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>Despu\u00e9s de rellenar estos campos, haga clic en el bot\u00f3n <code>Configurar<\/code> e introduzca sus credenciales de 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>Adem\u00e1s del <code>Anfitri\u00f3n<\/code>, <code>Puerto<\/code>, <code>Nombre de usuario<\/code> y <code>Contrase\u00f1a<\/code> puede limitar opcionalmente el n\u00famero de registros devueltos por un campo <code>GET<\/code> y habilitar el almacenamiento de datos en cach\u00e9 durante un periodo de tiempo determinado. Para los prop\u00f3sitos de este tutorial voy a dejar esas opciones sin tocar y s\u00f3lo generar la API pulsando el bot\u00f3n <code>Guardar<\/code> bot\u00f3n.<\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\" id=\"_interacting_with_the_api\">Interacci\u00f3n con la API<\/h2>\r\n\r\n\r\n\r\n<p>Una vez generada la API, puede navegar a la p\u00e1gina <code>Documentos API<\/code> para experimentar con ella. DreamFactory genera documentaci\u00f3n Swagger para cada API, y los administradores pueden proporcionar a los usuarios acceso restringido a esta documentaci\u00f3n. Seleccione la nueva API, y se le presentar\u00e1 una lista de todos los puntos finales disponibles:<\/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>Elija el <code>GET \/_esquema<\/code> y pulse la tecla <code>Pru\u00e9balo<\/code> bot\u00f3n. Dado que la documentaci\u00f3n de Swagger es interactiva, puedes aprender c\u00f3mo funciona la API sin tener que saltar directamente al c\u00f3digo, lo que puede disminuir enormemente la frustraci\u00f3n. Pulsando <code>Pru\u00e9balo<\/code> habilitar\u00e1 los distintos campos de par\u00e1metros asociados a este 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>NOTA: Debido a la amplitud de bases de datos soportadas, y la importancia de proveer una interfaz API de base de datos uniforme sin importar el tipo de base de datos subyacente, DreamFactory utiliza t\u00e9rminos gen\u00e9ricos para referirse a estructuras relacionadas con bases de datos. L\u00f3gicamente, estos t\u00e9rminos no siempre se corresponden exactamente con la terminolog\u00eda espec\u00edfica de la base de datos. Por ejemplo, Couchbase utiliza el t\u00e9rmino <strong>cubo<\/strong> para representar una base de datos, mientras que DreamFactory utiliza el t\u00e9rmino gen\u00e9rico <strong>esquema<\/strong> para esta representaci\u00f3n.<\/em><\/p>\r\n\r\n\r\n\r\n<p>Pulse el bot\u00f3n <code>Ejecute<\/code> y se consultar\u00e1 el punto final de la API, devolviendo todos los buckets disponibles. Los usuarios de Couchbase estar\u00e1n familiarizados con la funci\u00f3n <code>viaje-muestra<\/code> devuelto en la siguiente respuesta:<\/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\">Acceso a los datos de la API<\/h2>\r\n\r\n\r\n\r\n<p>A continuaci\u00f3n, despl\u00e1cese hasta <code>GET \/_tabla\/{nombre_tabla}<\/code> para recuperar registros (documentos) de la base de datos <code>viaje-muestra<\/code> cubo. El proceso para hacerlo es similar al utilizado para recuperar los buckets; seleccionar\u00e1s el endpoint, pulsar\u00e1s <code>Pru\u00e9balo<\/code>y, a continuaci\u00f3n, introduzca los par\u00e1metros del punto final de la API que desee. Como puede ver en la siguiente captura de pantalla, este punto final admite bastantes par\u00e1metros:<\/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>Cuando se trata de seleccionar registros, DreamFactory soporta todo lo que usted har\u00eda t\u00edpicamente al consultar una base de datos. Puede seleccionar campos espec\u00edficos, unir tablas, filtrar registros, aplicar l\u00edmites y desplazamientos, etc. Para este ejemplo, manteng\u00e1moslo simple y despl\u00e1cese hasta la parte inferior de la lista de par\u00e1metros e ingrese <code>viaje-muestra<\/code> en el <code>nombre_tabla<\/code> par\u00e1metro. Pulse <code>Ejecute<\/code> y ver\u00e1s los siguientes 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\">Generaci\u00f3n de una clave de API restringida<\/h2>\r\n\r\n\r\n\r\n<p>La interfaz API Docs es estupenda para aprender m\u00e1s sobre el funcionamiento de una API, aunque inevitablemente querr\u00e1 empezar a consultar la API desde una aplicaci\u00f3n web o m\u00f3vil. Para ello, primero tendr\u00e1 que generar un archivo <strong>Clave API<\/strong>. Esto se debe a que DreamFactory no admite el concepto de API p\u00fablica; todas las API est\u00e1n protegidas por una clave de API como m\u00ednimo. Adem\u00e1s, cada clave de API se asigna a un <strong>papel<\/strong>. Los roles de DreamFactory determinan lo que un cliente en posesi\u00f3n de una clave API puede hacer en conjunci\u00f3n con la API. Por ejemplo, puede crear un rol que sea de s\u00f3lo lectura, o que s\u00f3lo permita el acceso a una tabla espec\u00edfica de la base de datos, o que s\u00f3lo pueda insertar registros en una tabla pero leer registros de otra tabla.<\/p>\r\n\r\n\r\n\r\n<p>Para crear una funci\u00f3n, vaya a la secci\u00f3n <code>Funciones<\/code> y pulse <code>Cree<\/code>. Asignar\u00e1 un nombre y una descripci\u00f3n a la funci\u00f3n y, a continuaci\u00f3n, har\u00e1 clic en el bot\u00f3n <code>Acceda a<\/code> pesta\u00f1a. Es aqu\u00ed donde ocurre la magia. En la siguiente captura de pantalla ver\u00e1s que he seleccionado la opci\u00f3n <code>couchbase<\/code> API (servicio), y establezca <code>Componente<\/code> a <code>_table\/travel-sample\/*<\/code>lo que significa que el rol s\u00f3lo puede acceder a este conjunto de datos en particular. Adem\u00e1s, he establecido <code>Acceda a<\/code> a <code>GET<\/code>lo que significa que ser\u00e1 un rol de s\u00f3lo lectura:<\/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>Hay algunas otras caracter\u00edsticas interesantes aqu\u00ed, sin embargo en aras de la brevedad le sugiero s\u00f3lo pulsando <code>Guardar<\/code> para generar el rol.<\/p>\r\n\r\n\r\n\r\n<p>A continuaci\u00f3n, haga clic en el bot\u00f3n <code>Aplicaciones<\/code> para generar una clave API. Pulse el bot\u00f3n <code>Cree<\/code> y aparecer\u00e1 la siguiente interfaz:<\/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>Aqu\u00ed tendr\u00e1s que introducir el nombre y la descripci\u00f3n de la aplicaci\u00f3n. Tambi\u00e9n elegir\u00e1s una funci\u00f3n para esta clave API, y en este ejemplo he seleccionado la reci\u00e9n generada <code>couchbase<\/code> papel. Por \u00faltimo, para el <code>Ubicaci\u00f3n de la aplicaci\u00f3n<\/code> He seleccionado <code>No requiere almacenamiento<\/code> porque me conectar\u00e9 a la API desde una ubicaci\u00f3n remota, como una aplicaci\u00f3n web. Pulse <code>Guardar<\/code> y volver\u00e1s al listado de claves de la aplicaci\u00f3n:<\/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>Enhorabuena, acabas de crear una clave API restringida de s\u00f3lo lectura. Ahora vamos a usar esa clave para hablar con el bucket de Couchbase.<\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\" id=\"_connecting_to_your_api\">Conexi\u00f3n a su API<\/h2>\r\n\r\n\r\n\r\n<p>Con su clave de API en la mano, es hora de interactuar con la API desde fuera de la interfaz de DreamFactory. Para los prop\u00f3sitos de este ejemplo voy a utilizar el comando <a href=\"https:\/\/insomnia.rest\/\">Cliente REST de Insomnia<\/a> no obstante, puede utilizar <a href=\"https:\/\/www.getpostman.com\/\">Cartero<\/a>o con otro cliente API, o tambi\u00e9n puedes crear una sencilla interfaz web o para iPhone. En la siguiente captura de pantalla he consultado la <code>\/api\/v2\/couchbase\/_table\/viaje-muestra<\/code> y en la parte derecha de la interfaz podr\u00e1 ver los 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 importancia es la <code>X-DreamFactory-Api-Key<\/code> \u00a1cabecera! Es aqu\u00ed donde se proporciona la clave API. Si no se proporciona la clave, se producir\u00e1 un error del tipo <code>400<\/code> con un mensaje de error relativo a una clave que falta. Adem\u00e1s, si esta clave intenta acceder a una tabla restringida o realizar una acci\u00f3n (insertar, actualizar, etc.) que no se ha permitido expresamente en la definici\u00f3n de la funci\u00f3n, aparecer\u00e1 un mensaje de error del tipo <code>401<\/code> se devolver\u00e1 un c\u00f3digo de estado no autorizado.<\/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>Esperemos que esta introducci\u00f3n a DreamFactory te haya hecho pensar en lo r\u00e1pido que puedes empezar a crear aplicaciones basadas en Couchbase. Si est\u00e1s interesado en aprender m\u00e1s, los siguientes recursos te ser\u00e1n de utilidad:<\/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\">Sitio web de DreamFactory<\/a>: La web oficial de DreamFactory incluye todo tipo de informaci\u00f3n sobre la plataforma.<\/li>\r\n<li><a href=\"https:\/\/guide.dreamfactory.com\/?utm_source=couchbase&amp;utm_medium=blog&amp;utm_campaign=traffic\">Primeros pasos con DreamFactory<\/a>: Esta gu\u00eda recientemente publicada sobre los fundamentos de DreamFactory te gu\u00eda a trav\u00e9s de las capacidades clave de la plataforma. En particular, sugiero leer <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>: DreamFactory Academy incluye varios v\u00eddeos introductorios. Tambi\u00e9n puede consultar la p\u00e1gina mucho m\u00e1s amplia <a href=\"https:\/\/www.youtube.com\/user\/dreamfactorysoftware\">Canal 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\">Descargas de DreamFactory<\/a>: DreamFactory est\u00e1 disponible en una amplia variedad de versiones y es compatible con las principales plataformas. Vaya a este enlace para elegir la versi\u00f3n que desee.<\/li>\r\n<li><a href=\"https:\/\/blog.dreamfactory.com\/?utm_source=couchbase&amp;utm_medium=blog&amp;utm_campaign=traffic\">Blog de DreamFactory<\/a>: Aqu\u00ed encontrar\u00e1 un flujo de publicaciones peri\u00f3dicas sobre las caracter\u00edsticas de DreamFactory, incluida esta publicaci\u00f3n reciente 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\">creaci\u00f3n de una API de geovalla utilizando la f\u00f3rmula Haversine, PHP y los servicios de API con scripts de 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 v26.2 (Yoast SEO v26.2) - 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\/es\/generating-couchbase-api-dreamfactory\/\" \/>\n<meta property=\"og:locale\" content=\"es_MX\" \/>\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\/es\/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\":\"es\",\"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\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/generating-couchbase-api-dreamfactory\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@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\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"width\":218,\"height\":34,\"caption\":\"The Couchbase Blog\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/3929663e372020321b0152dc4fa65a58\",\"name\":\"Matthew Groves\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@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\/es\/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\/es\/generating-couchbase-api-dreamfactory\/","og_locale":"es_MX","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\/es\/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":"es","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":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/generating-couchbase-api-dreamfactory\/"]}]},{"@type":"ImageObject","inLanguage":"es","@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":"El blog de Couchbase","description":"Couchbase, la base de datos NoSQL","publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"El blog de Couchbase","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","width":218,"height":34,"caption":"The Couchbase Blog"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/3929663e372020321b0152dc4fa65a58","name":"Matthew Groves","image":{"@type":"ImageObject","inLanguage":"es","@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":"A Matthew D. Groves le encanta programar. No importa si se trata de C#, jQuery o PHP: enviar\u00e1 pull requests para cualquier cosa. Lleva codificando profesionalmente desde que escribi\u00f3 una aplicaci\u00f3n de punto de venta en QuickBASIC para la pizzer\u00eda de sus padres, all\u00e1 por los a\u00f1os noventa. Actualmente trabaja como Director de Marketing de Producto para Couchbase. Su tiempo libre lo pasa con su familia, viendo a los Reds y participando en la comunidad de desarrolladores. Es autor de AOP in .NET, Pro Microservices in .NET, autor de Pluralsight y MVP de Microsoft.","sameAs":["https:\/\/crosscuttingconcerns.com","https:\/\/x.com\/mgroves"],"url":"https:\/\/www.couchbase.com\/blog\/es\/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":"A Matthew D. Groves le encanta programar.  No importa si se trata de C#, jQuery o PHP: enviar\u00e1 pull requests para cualquier cosa.  Lleva codificando profesionalmente desde que escribi\u00f3 una aplicaci\u00f3n de punto de venta en QuickBASIC para la pizzer\u00eda de sus padres, all\u00e1 por los a\u00f1os noventa.  Actualmente trabaja como Director de Marketing de Producto para Couchbase. Su tiempo libre lo pasa con su familia, viendo a los Reds y participando en la comunidad de desarrolladores.  Es autor de AOP in .NET, Pro Microservices in .NET, autor de Pluralsight y MVP de Microsoft."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/6669","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/users\/71"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/comments?post=6669"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/6669\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media\/6678"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media?parent=6669"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/categories?post=6669"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/tags?post=6669"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/ppma_author?post=6669"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}