{"id":13147,"date":"2022-04-26T20:13:45","date_gmt":"2022-04-27T03:13:45","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=13147"},"modified":"2025-06-13T23:04:15","modified_gmt":"2025-06-14T06:04:15","slug":"build-a-python-microservice-with-couchbase-part-3","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/es\/build-a-python-microservice-with-couchbase-part-3\/","title":{"rendered":"Construir un microservicio Python con Couchbase - Parte 3"},"content":{"rendered":"<h2><span style=\"font-weight: 400;\">Recapitulemos<\/span><\/h2>\n<p><span style=\"font-weight: 400;\">En las dos entregas anteriores de <a href=\"https:\/\/www.couchbase.com\/blog\/es\/build-a-python-microservice-with-couchbase-part-1\/\" target=\"_blank\" rel=\"noopener\">esta serie<\/a>discutimos los drivers detr\u00e1s de la creaci\u00f3n de microservicios. Tambi\u00e9n vimos por qu\u00e9 Couchbase es el almac\u00e9n de datos perfecto para utilizar con una arquitectura de este tipo. Tambi\u00e9n vimos tres variantes de un microservicio de perfil de usuario de ejemplo. Dos fueron escritas en Python, y una fue escrita en Node.js para comparar. En esta \u00faltima parte de la serie, discutiremos un m\u00e9todo para generar datos de prueba para el esquema del microservicio. <\/span><\/p>\n<h2><span style=\"font-weight: 400;\">\u00bfPor qu\u00e9 utilizar datos de prueba?<\/span><\/h2>\n<p><span style=\"font-weight: 400;\">Unas pruebas rigurosas son fundamentales para lanzar un software estable. En una buena estrategia de pruebas intervienen muchos elementos. En la \u00faltima d\u00e9cada, el t\u00e9rmino \"DevOps\" se ha utilizado a menudo para referirse tanto a las herramientas utilizadas en el desarrollo y las pruebas de software como a la cultura, los procesos y los procedimientos que deben aplicarse para lograr un desarrollo r\u00e1pido y \u00e1gil. Independientemente de la terminolog\u00eda, hay un hilo com\u00fan: la automatizaci\u00f3n y la orquestaci\u00f3n. Estas dos cosas pueden ser f\u00e1cilmente su propia serie de blog, por lo que no nos detendremos demasiado en ellos, excepto para decir que la generaci\u00f3n de datos de prueba es un aspecto esencial de DevOps y el desarrollo \u00e1gil de software y pruebas.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Personalmente he ca\u00eddo en la trampa de no tener un buen conjunto de datos de desarrollo. Por conveniencia, cre\u00e9 manualmente algunos datos para que se ajustaran al esquema deseado y as\u00ed poder hacer pruebas unitarias sobre el c\u00f3digo. Pero al d\u00eda siguiente, me di cuenta de que el c\u00f3digo que funcionaba bien con mi peque\u00f1o conjunto de datos no funcionaba demasiado bien cuando se ejecutaba contra una base de datos de prueba con miles de registros y datos m\u00e1s realistas.<\/span><\/p>\n<h2><span style=\"font-weight: 400;\">Generaci\u00f3n de datos JSON para probar el microservicio Python<\/span><\/h2>\n<p><span style=\"font-weight: 400;\">Hay muchas formas de introducir datos de prueba en una base de datos de prueba o de desarrollo. Un m\u00e9todo consiste en copiar y desinfectar los datos de producci\u00f3n, si es posible. Puede que no sea factible disponer de copias de producci\u00f3n completas para m\u00faltiples entornos de desarrollo y prueba en funci\u00f3n de los recursos disponibles. Las plataformas de bases de datos deben tener el tama\u00f1o adecuado, y hay que tener cuidado de eliminar los datos sensibles por razones de cumplimiento y seguridad. Las copias de producci\u00f3n completas deben ser un requisito para los entornos de pruebas de regresi\u00f3n y de desarrollo previo. La generaci\u00f3n de datos sint\u00e9ticos y aleatorios con un conjunto de datos m\u00ednimo para las pruebas unitarias y el desarrollo suele ser adecuada.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Con una base de datos relacional, puede ser un reto crear una instancia de base de datos con un subconjunto de tablas porque los modelos relacionales normalmente requieren que todas las estructuras de datos est\u00e9n presentes. Sin embargo, con el formato de documento JSON de Couchbase, es mucho m\u00e1s f\u00e1cil hacerlo. Mirando el ejemplo del microservicio, el esquema se construy\u00f3 alrededor de Scopes y Collections de Couchbase. Estos podr\u00edan ser f\u00e1cilmente parte de un esquema m\u00e1s grande con m\u00e1s colecciones y \u00e1mbitos. Pero todo lo que necesitamos son las colecciones para acceder a las claves, los perfiles de usuario y las im\u00e1genes de usuario, ya que eso es todo lo que nuestro servicio de ejemplo necesita para funcionar.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">En la segunda parte de la serie de blogs, utilizamos JMeter para realizar pruebas de rendimiento. Para realizar pruebas de rendimiento, la base de datos debe tener al menos miles de registros para que JMeter disponga de un conjunto de datos razonable para la generaci\u00f3n de pruebas. El microservicio simplemente obtiene elementos de perfil y los devuelve a trav\u00e9s de la API REST. Se supone que otros componentes de la aplicaci\u00f3n consumen los datos y ejecutan la l\u00f3gica empresarial utilizando los resultados.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Volviendo a las tres colecciones de perfiles, a continuaci\u00f3n se muestra un ejemplo de un documento de la colecci\u00f3n <\/span><span style=\"font-weight: 400;\">datos_usuario<\/span><span style=\"font-weight: 400;\"> colecci\u00f3n. El servicio no comprueba si el campo de imagen tiene un ID que haga referencia a un registro de imagen. El servicio s\u00f3lo devuelve los datos del perfil o los datos de la imagen. Se supone que cualquiera que lo consuma manejar\u00e1 esa l\u00f3gica.<\/span><\/p>\n<pre class=\"decode-attributes:false lang:js decode:true\">{\r\n  \"record_id\": 1,\r\n  \"name\": \"Michael Jones\",\r\n  \"nickname\": \"mjones\",\r\n  \"foto\": \"\",\r\n  \"user_id\": \"michaeljones2104\",\r\n  \"email\": \"michael.jones@example.com\",\r\n  \"email_verified\": \"True\",\r\n  \"first_name\": \"Michael\",\r\n  \"last_name\": \"Jones\",\r\n  \"address\": \"0208 River Parkway\",\r\n  \"ciudad\": \"Strongdol\",\r\n  \"estado\": \"IL\",\r\n  \"zip_code\": \"29954\",\r\n  \"phone\": \"363-555-9036\",\r\n  \"fecha_de_nacimiento\": \"10\/27\/1958\"\r\n}<\/pre>\n<p>La colecci\u00f3n user_images es sencilla, con un ID de registro (que puede ser referenciado por un perfil de usuario), un campo de tipo de imagen para poder soportar m\u00faltiples codecs de imagen y la propia imagen codificada en Base64. Como se se\u00f1al\u00f3 en el primer post de la serie, Couchbase soporta documentos binarios, pero hemos utilizado JSON por su portabilidad y extensibilidad en la aplicaci\u00f3n de ejemplo. Esto viene a expensas de un poco de ancho de banda de red adicional para obtener los datos y ciclos de procesador para hacer la decodificaci\u00f3n.<\/p>\n<pre class=\"decode-attributes:false lang:js decode:true\">{\r\n  \"record_id\": 1,\r\n  \"type\": \"jpeg\",\r\n  \"image\": \"AAAAD...\"\r\n}<\/pre>\n<p><span style=\"font-weight: 400;\">La base <\/span><em><span style=\"font-weight: 400;\">servicio_aut<\/span><\/em><span style=\"font-weight: 400;\"> contiene el token de autenticaci\u00f3n, pero puede ampliarse f\u00e1cilmente para incluir otros campos de autenticaci\u00f3n.<\/span><\/p>\n<pre class=\"decode-attributes:false lang:js decode:true\">{\r\n  \"record_id\": 1,\r\n  \"token\": \"6j6nW3KD0ZXodBv1\"\r\n}<\/pre>\n<h3><span style=\"font-weight: 400;\">Generaci\u00f3n de datos JSON aleatorios de muestra<\/span><\/h3>\n<p><span style=\"font-weight: 400;\">Escrib\u00ed una utilidad llamada <\/span><span style=\"font-weight: 400;\">cb_perf<\/span><span style=\"font-weight: 400;\"> para generar datos aleatorios e insertarlos en Couchbase. La utilidad tambi\u00e9n realiza algunas pruebas de rendimiento para calibrar las capacidades de Python en una plataforma. Herramientas como YCSB utilizan un esquema poco realista ya que el \u00fanico objetivo es medir el rendimiento bruto. Yo quer\u00eda la capacidad de tomar JSON arbitrario e insertarlo con datos sint\u00e9ticos aleatorios.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Para probar el microservicio de ejemplo, a\u00f1ad\u00ed el esquema a <\/span><span style=\"font-weight: 400;\">cb_perf<\/span><span style=\"font-weight: 400;\"> para poder generar conjuntos de datos de prueba en cualquier cl\u00faster de Couchbase. El sitio <\/span><span style=\"font-weight: 400;\">cb_perf<\/span><span style=\"font-weight: 400;\"> utiliza un archivo de definici\u00f3n de esquema JSON. Para cada colecci\u00f3n, se define la estructura de datos JSON.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Puedes especificar expresiones Jinja2 con variables que mapeen a tipos de datos aleatorios para cada valor JSON. De esta forma, cada registro ser\u00e1 diferente. Tambi\u00e9n puedes definir qu\u00e9 \u00edndices crear. En este caso, creamos un \u00edndice primario e \u00edndices secundarios en algunos campos.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Especifica que <\/span><em><span style=\"font-weight: 400;\">record_id<\/span><\/em><span style=\"font-weight: 400;\"> es un campo ID y que el recuento global de registros solicitado no debe sobrescribirse (por lo que podemos crear tantos registros como queramos).<\/span><\/p>\n<pre class=\"decode-attributes:false lang:js decode:true\">{\r\n\"nombre\": \"datos_usuario\",\r\n\"schema\": {\r\n  \"record_id\": \"record_id\",\r\n  \"name\": \"{{ rand_first }} {{ rand_last }}\",\r\n  \"nickname\": \"{{ rand_nickname }}\",\r\n  \"picture\": \"\",\r\n  \"user_id\": \"{{ rand_username }}\",\r\n  \"email\": \"{{ rand_email }}\",\r\n  \"email_verified\": \"{{ rand_bool }}\",\r\n  \"first_name\": \"{{ rand_first }}\",\r\n  \"last_name\": \"{{ rand_last }}\",\r\n  \"address\": \"{{ rand_address }}\",\r\n  \"ciudad\": \"{{ rand_city }}\",\r\n  \"estado\": \"{{ rand_state }}\",\r\n  \"zip_code\": \"{{ rand_zip_code }}\",\r\n  \"phone\": \"{{ rand_phone }}\",\r\n  \"date_of_birth\": \"{{ rand_dob_1 }}\"\r\n  },\r\n\"idkey\": \"record_id\",\r\n\"primary_index\": true,\r\n\"override_count\": false,\r\n\"indexes\": [\r\n  \"record_id\",\r\n  \"nickname\",\r\n  \"user_id\"\r\n  ]\r\n},<\/pre>\n<p>Aprovechamos la <em>cb_perf<\/em> randomizer para la colecci\u00f3n de im\u00e1genes para crear una imagen JPEG aleatoria (crea un mapa aleatorio de valores RGB para hacer una imagen de colores aleatorios). Definimos lo siguiente:<\/p>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li><em>Establecer record_id<\/em> como ID de la imagen.<\/li>\n<li>Crear un \u00edndice primario y secundario en el campo ID.<\/li>\n<li>Utilice una cantidad de im\u00e1genes igual a la cantidad de registros solicitada.<\/li>\n<li>Anular la utilidad de <i>tama\u00f1o de lote por defecto <\/i>para operaciones as\u00edncronas (el valor por defecto es 100) para establecerlo en 10 ya que estos documentos son grandes (aproximadamente 70KiB por documento). No queremos crear un cuello de botella si cargamos datos a trav\u00e9s de una red de \u00e1rea amplia o Internet. El valor predeterminado se puede utilizar en una red privada de alto rendimiento, como una VPC en la nube o un centro de datos empresarial.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-13149\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2022\/04\/image1-3.png\" alt=\"Sample random image generated by cb_perf\" width=\"214\" height=\"214\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/04\/image1-3.png 128w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/04\/image1-3-65x65.png 65w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/04\/image1-3-50x50.png 50w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/04\/image1-3-20x20.png 20w\" sizes=\"auto, (max-width: 214px) 100vw, 214px\" \/><\/p>\n<pre class=\"decode-attributes:false lang:js decode:true\">{\r\n\"nombre\": \"user_images\",\r\n\"schema\": {\r\n  \"record_id\": \"record_id\",\r\n  \"type\": \"jpeg\",\r\n  \"image\": \"{{ rand_image }}\"\r\n  },\r\n\"idkey\": \"record_id\",\r\n\"primary_index\": true,\r\n\"override_count\": false,\r\n\"batch_size\": 10,\r\n\"indexes\": [\r\n  \"record_id\"\r\n]\r\n},<\/pre>\n<p><span style=\"font-weight: 400;\">Creamos un \u00fanico registro de autenticaci\u00f3n en la base de datos <\/span><span style=\"font-weight: 400;\">servicio_aut<\/span><span style=\"font-weight: 400;\"> ya que es lo \u00fanico que se necesita.<\/span><\/p>\n<pre class=\"decode-attributes:false lang:js decode:true\">{\r\n\"name\": \"service_auth\",\r\n\"schema\": {\r\n  \"record_id\": \"record_id\",\r\n  \"token\": \"{{ rand_hash }}\"\r\n  },\r\n\"idkey\": \"record_id\",\r\n\"primary_index\": true,\r\n\"override_count\": true,\r\n\"record_count\": 1,\r\n\"indexes\": [\r\n  \"record_id\"\r\n]\r\n}<\/pre>\n<p><span style=\"font-weight: 400;\">Por \u00faltimo, conectamos los registros de im\u00e1genes con los registros de perfiles. Para ello, utilizamos la regla \"enlace\" como parte de la definici\u00f3n del esquema. Las reglas del esquema se ejecutan despu\u00e9s de cargar los datos. Simplemente extraemos la lista de claves de registros de imagen y actualizamos el campo de imagen en los documentos de perfil para incluir una referencia a la clave de imagen.<\/span><\/p>\n<pre class=\"decode-attributes:false lang:js decode:true\">\"reglas\": [\r\n{\r\n  \"nombre\": \"rule0\",\r\n  \"type\": \"link\",\r\n  \"foreign_key\": \"sample_app:profiles:user_data:picture\",\r\n  \"primary_key\": \"sample_app:profiles:user_images:record_id\"\r\n}\r\n]<\/pre>\n<h3><span style=\"font-weight: 400;\">Carga de los datos generados<\/span><\/h3>\n<p><span style=\"font-weight: 400;\">Cb_perf tiene un modo de carga que crea el n\u00famero especificado de registros del esquema solicitado para cargar los datos.<\/span><\/p>\n<pre class=\"decode-attributes:false lang:sh decode:true\">% .\/cb_perf load --host db.ejemplo.com --schema profile_demo -u developer -p password --count 1000<\/pre>\n<p><span style=\"font-weight: 400;\">Una vez completado, se cargar\u00e1n los datos y se crear\u00e1n los \u00edndices. Ya est\u00e1s listo para ejecutar y probar los microservicios. La utilidad genera autom\u00e1ticamente los IDs de los documentos (el ID del documento de Couchbase en los metadatos del documento, en contraposici\u00f3n al ID del registro en el documento) para que sean el nombre de la colecci\u00f3n, m\u00e1s dos puntos y el ID del registro. Aqu\u00ed podemos ver un ejemplo de lo que se ha cargado en el UI de Couchbase.<\/span><\/p>\n<p><span style=\"font-weight: 400;\"> <img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-13148 size-full\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2022\/04\/image2-3.png\" alt=\"Python series - Viewing randomized JSON data document in Couchbase\" width=\"959\" height=\"588\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/04\/image2-3.png 959w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/04\/image2-3-300x184.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/04\/image2-3-768x471.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/04\/image2-3-20x12.png 20w\" sizes=\"auto, (max-width: 959px) 100vw, 959px\" \/><\/span><\/p>\n<h3><span style=\"font-weight: 400;\">Siguiente<\/span><\/h3>\n<p><span style=\"font-weight: 400;\">Esto completa la serie Construyendo un Microservicio Python con Couchbase. Sin embargo, estate atento a futuras actualizaciones sobre nuevas funcionalidades que se a\u00f1adan a <\/span><i><span style=\"font-weight: 400;\">cb_perf <\/span><\/i><span style=\"font-weight: 400;\">y otros temas. Gracias por leer esta serie. Espero que le haya resultado informativa.<\/span><\/p>\n<h3><span style=\"font-weight: 400;\">Recursos de Python y enlaces a series de blogs<\/span><\/h3>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><a href=\"https:\/\/github.com\/mminichino\/cbperf\" target=\"_blank\" rel=\"noopener\"><span style=\"font-weight: 400;\">Descarga la utilidad cb_perf de mi GitHub<\/span><\/a><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Lea las entradas anteriores de esta serie:<\/span>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"2\"><a href=\"https:\/\/www.couchbase.com\/blog\/es\/build-a-python-microservice-with-couchbase-part-1\/\" target=\"_blank\" rel=\"noopener\"><span style=\"font-weight: 400;\">Parte 1 - Construir un microservicio Python con Couchbase<\/span><\/a><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"2\"><a href=\"https:\/\/www.couchbase.com\/blog\/es\/build-a-python-microservice-with-couchbase-part-2\/\" target=\"_blank\" rel=\"noopener\"><span style=\"font-weight: 400;\">Parte 2<\/span><\/a> y\u00a0<a href=\"https:\/\/www.couchbase.com\/blog\/es\/build-a-python-microservice-with-couchbase-part-3\/\" target=\"_blank\" rel=\"noopener\"><span style=\"font-weight: 400;\">Parte 3<\/span><\/a> (final)<\/li>\n<\/ul>\n<\/li>\n<li aria-level=\"2\">Documentaci\u00f3n sobre Couchbase Python SDK - <a href=\"https:\/\/docs.couchbase.com\/python-sdk\/current\/hello-world\/start-using-sdk.html\" target=\"_blank\" rel=\"noopener\">Primeros pasos con el SDK de Python<\/a><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h3><span style=\"font-weight: 400;\">Dato curioso aleatorio<\/span><\/h3>\n<p><span style=\"font-weight: 400;\">En un universo muy, muy lejano, en una \u00e9poca tecnol\u00f3gica diferente, Perl era el lenguaje interpretado m\u00e1s popular. Pas\u00f3 de ser un lenguaje de procesamiento de textos (como el cl\u00e1sico AWK de UNIX) a convertirse en un lenguaje de prop\u00f3sito general omnipresente. Entre 1996 y 2000, la comunidad de Perl decidi\u00f3 tomar prestado el antiguo concurso de C ofuscado y organiz\u00f3 competiciones de Perl ofuscado. La sintaxis suelta y libre de Perl puede dar lugar a programas dif\u00edciles de descifrar, por lo que es natural que se celebrara un concurso de este tipo. Todos los programadores miran en alg\u00fan momento algo que han escrito, quiz\u00e1 alimentados por la cafe\u00edna y la falta de sue\u00f1o, y se preguntan qu\u00e9 hace.\u00a0<\/span><\/p>\n<pre class=\"decode-attributes:false lang:default decode:true\">python3 -c \"print(bytearray([ord(b'a')+b%26 for b in [19,7,0,13,10,18]]).decode('utf-8'))\"<\/pre>\n<p>&nbsp;<\/p>","protected":false},"excerpt":{"rendered":"<p>Recap In the previous two installments of this series, we discussed the drivers behind creating microservices. We also looked at why Couchbase is the perfect datastore to use with such an architecture. We also looked at three variants of a [&hellip;]<\/p>","protected":false},"author":81015,"featured_media":13151,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1814,1816,1819,9139,2201],"tags":[1261,2103,1877],"ppma_author":[9550],"class_list":["post-13147","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-application-design","category-couchbase-server","category-data-modeling","category-python","category-tools-sdks","tag-json","tag-microservices","tag-testing"],"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>Build A Python Microservice With Couchbase - Part 3<\/title>\n<meta name=\"description\" content=\"Python series - part 3 of building a microservice, in this post we create randomized JSON sample data for testing microservices in 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\/build-a-python-microservice-with-couchbase-part-3\/\" \/>\n<meta property=\"og:locale\" content=\"es_MX\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Build A Python Microservice With Couchbase - Part 3\" \/>\n<meta property=\"og:description\" content=\"Python series - part 3 of building a microservice, in this post we create randomized JSON sample data for testing microservices in Couchbase.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/es\/build-a-python-microservice-with-couchbase-part-3\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2022-04-27T03:13:45+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-14T06:04:15+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/04\/build-microservice-python-couchbase-scaled.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"2560\" \/>\n\t<meta property=\"og:image:height\" content=\"1341\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Michael Minichino\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Michael Minichino\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/build-a-python-microservice-with-couchbase-part-3\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/build-a-python-microservice-with-couchbase-part-3\/\"},\"author\":{\"name\":\"Michael Minichino\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/15ea6a51d53d4739913c98d25a8d7e77\"},\"headline\":\"Build A Python Microservice With Couchbase &#8211; Part 3\",\"datePublished\":\"2022-04-27T03:13:45+00:00\",\"dateModified\":\"2025-06-14T06:04:15+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/build-a-python-microservice-with-couchbase-part-3\/\"},\"wordCount\":1367,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/build-a-python-microservice-with-couchbase-part-3\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/04\/build-microservice-python-couchbase-scaled.jpg\",\"keywords\":[\"JSON\",\"microservices\",\"testing\"],\"articleSection\":[\"Application Design\",\"Couchbase Server\",\"Data Modeling\",\"Python\",\"Tools &amp; SDKs\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/build-a-python-microservice-with-couchbase-part-3\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/build-a-python-microservice-with-couchbase-part-3\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/build-a-python-microservice-with-couchbase-part-3\/\",\"name\":\"Build A Python Microservice With Couchbase - Part 3\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/build-a-python-microservice-with-couchbase-part-3\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/build-a-python-microservice-with-couchbase-part-3\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/04\/build-microservice-python-couchbase-scaled.jpg\",\"datePublished\":\"2022-04-27T03:13:45+00:00\",\"dateModified\":\"2025-06-14T06:04:15+00:00\",\"description\":\"Python series - part 3 of building a microservice, in this post we create randomized JSON sample data for testing microservices in Couchbase.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/build-a-python-microservice-with-couchbase-part-3\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/build-a-python-microservice-with-couchbase-part-3\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/build-a-python-microservice-with-couchbase-part-3\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/04\/build-microservice-python-couchbase-scaled.jpg\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/04\/build-microservice-python-couchbase-scaled.jpg\",\"width\":2560,\"height\":1341,\"caption\":\"Creating test data for Python microservices in Couchbase\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/build-a-python-microservice-with-couchbase-part-3\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Build A Python Microservice With Couchbase &#8211; Part 3\"}]},{\"@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\/15ea6a51d53d4739913c98d25a8d7e77\",\"name\":\"Michael Minichino\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/ed87fc8ff8aedc56f9872fbd77382f29\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/03\/Screen-Shot-2022-03-28-at-12.40.06-PM.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/03\/Screen-Shot-2022-03-28-at-12.40.06-PM.png\",\"caption\":\"Michael Minichino\"},\"url\":\"https:\/\/www.couchbase.com\/blog\/es\/author\/michael-minichino\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Build A Python Microservice With Couchbase - Part 3","description":"Serie Python - parte 3 de la construcci\u00f3n de un microservicio, en este post creamos datos de ejemplo JSON aleatorios para probar microservicios en 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\/build-a-python-microservice-with-couchbase-part-3\/","og_locale":"es_MX","og_type":"article","og_title":"Build A Python Microservice With Couchbase - Part 3","og_description":"Python series - part 3 of building a microservice, in this post we create randomized JSON sample data for testing microservices in Couchbase.","og_url":"https:\/\/www.couchbase.com\/blog\/es\/build-a-python-microservice-with-couchbase-part-3\/","og_site_name":"The Couchbase Blog","article_published_time":"2022-04-27T03:13:45+00:00","article_modified_time":"2025-06-14T06:04:15+00:00","og_image":[{"width":2560,"height":1341,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/04\/build-microservice-python-couchbase-scaled.jpg","type":"image\/jpeg"}],"author":"Michael Minichino","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Michael Minichino","Est. reading time":"8 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/build-a-python-microservice-with-couchbase-part-3\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/build-a-python-microservice-with-couchbase-part-3\/"},"author":{"name":"Michael Minichino","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/15ea6a51d53d4739913c98d25a8d7e77"},"headline":"Build A Python Microservice With Couchbase &#8211; Part 3","datePublished":"2022-04-27T03:13:45+00:00","dateModified":"2025-06-14T06:04:15+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/build-a-python-microservice-with-couchbase-part-3\/"},"wordCount":1367,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/build-a-python-microservice-with-couchbase-part-3\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/04\/build-microservice-python-couchbase-scaled.jpg","keywords":["JSON","microservices","testing"],"articleSection":["Application Design","Couchbase Server","Data Modeling","Python","Tools &amp; SDKs"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/build-a-python-microservice-with-couchbase-part-3\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/build-a-python-microservice-with-couchbase-part-3\/","url":"https:\/\/www.couchbase.com\/blog\/build-a-python-microservice-with-couchbase-part-3\/","name":"Build A Python Microservice With Couchbase - Part 3","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/build-a-python-microservice-with-couchbase-part-3\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/build-a-python-microservice-with-couchbase-part-3\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/04\/build-microservice-python-couchbase-scaled.jpg","datePublished":"2022-04-27T03:13:45+00:00","dateModified":"2025-06-14T06:04:15+00:00","description":"Serie Python - parte 3 de la construcci\u00f3n de un microservicio, en este post creamos datos de ejemplo JSON aleatorios para probar microservicios en Couchbase.","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/build-a-python-microservice-with-couchbase-part-3\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/build-a-python-microservice-with-couchbase-part-3\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/build-a-python-microservice-with-couchbase-part-3\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/04\/build-microservice-python-couchbase-scaled.jpg","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/04\/build-microservice-python-couchbase-scaled.jpg","width":2560,"height":1341,"caption":"Creating test data for Python microservices in Couchbase"},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/build-a-python-microservice-with-couchbase-part-3\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Build A Python Microservice With Couchbase &#8211; Part 3"}]},{"@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\/15ea6a51d53d4739913c98d25a8d7e77","name":"Michael Minichino","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/ed87fc8ff8aedc56f9872fbd77382f29","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/03\/Screen-Shot-2022-03-28-at-12.40.06-PM.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/03\/Screen-Shot-2022-03-28-at-12.40.06-PM.png","caption":"Michael Minichino"},"url":"https:\/\/www.couchbase.com\/blog\/es\/author\/michael-minichino\/"}]}},"authors":[{"term_id":9550,"user_id":81015,"is_guest":0,"slug":"michael-minichino","display_name":"Michael Minichino","avatar_url":{"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/03\/Screen-Shot-2022-03-28-at-12.40.06-PM.png","url2x":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/03\/Screen-Shot-2022-03-28-at-12.40.06-PM.png"},"author_category":"","last_name":"Minichino","first_name":"Michael","job_title":"","user_url":"","description":"Michael Minichino es Ingeniero Principal de Soluciones en Couchbase"}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/13147","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\/81015"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/comments?post=13147"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/13147\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media\/13151"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media?parent=13147"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/categories?post=13147"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/tags?post=13147"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/ppma_author?post=13147"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}