{"id":12959,"date":"2022-03-29T08:00:05","date_gmt":"2022-03-29T15:00:05","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=12959"},"modified":"2025-06-13T21:25:02","modified_gmt":"2025-06-14T04:25:02","slug":"build-a-python-microservice-with-couchbase-part-1","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/pt\/build-a-python-microservice-with-couchbase-part-1\/","title":{"rendered":"Crie um microsservi\u00e7o Python com o Couchbase - Parte 1"},"content":{"rendered":"<p><span style=\"font-weight: 400\">Os microsservi\u00e7os exigem um conjunto de componentes escal\u00e1vel e sustent\u00e1vel. Esta postagem apresenta como criar microsservi\u00e7os usando Python e Couchbase para fornecer uma solu\u00e7\u00e3o totalmente escal\u00e1vel.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Os aplicativos monol\u00edticos apresentam muitos desafios. Eles nasceram em uma \u00e9poca em que tudo era executado em um \u00fanico sistema, geralmente um mainframe ou minicomputador. <\/span><a href=\"https:\/\/en.wikipedia.org\/wiki\/Service-oriented_architecture\"><span style=\"font-weight: 400\">Arquitetura orientada a servi\u00e7os<\/span><\/a><span style=\"font-weight: 400\"> liberou os aplicativos, permitindo que eles usassem cole\u00e7\u00f5es de servidores de commodities compartilhados e sem escala. Isso permitiu que partes de um cen\u00e1rio de aplicativos fossem dimensionadas discretamente, conforme necess\u00e1rio. Hoje, temos padr\u00f5es semelhantes, exceto pelo fato de os servidores terem sido substitu\u00eddos por m\u00e1quinas virtuais ou inst\u00e2ncias de nuvem.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400\">Algumas arquiteturas orientadas a servi\u00e7os s\u00e3o cole\u00e7\u00f5es de aplicativos de pequeno a grande porte que precisam interoperar. Isso permite alguma desagrega\u00e7\u00e3o e dimensionamento horizontal, mas n\u00e3o resolve todos os desafios de alcan\u00e7ar a escalabilidade global da nuvem, pois cada servi\u00e7o costuma ser um aplicativo monol\u00edtico. Aplicativos grandes n\u00e3o s\u00e3o apenas dif\u00edceis de dimensionar, mas tamb\u00e9m um desafio para desenvolver. Eles exigem muita codifica\u00e7\u00e3o e manuten\u00e7\u00e3o. Atualiza\u00e7\u00f5es simples de c\u00f3digo podem exigir testes de regress\u00e3o completos, o que requer um esfor\u00e7o consider\u00e1vel.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400\">Digite o <\/span><a href=\"https:\/\/en.wikipedia.org\/wiki\/Microservices\"><span style=\"font-weight: 400\">Arquitetura de microsservi\u00e7os<\/span><\/a><span style=\"font-weight: 400\">. Esse padr\u00e3o arquitet\u00f4nico divide cada componente do aplicativo em pequenas partes que podem ser dimensionadas de forma independente. Geralmente, eles n\u00e3o t\u00eam estado, de modo que podem ser ativados e desativados conforme necess\u00e1rio. O principal desafio \u00e9 a lat\u00eancia da rede, mas isso geralmente n\u00e3o \u00e9 um problema, pois as redes de alta velocidade s\u00e3o onipresentes atualmente.<\/span><\/p>\n<h2><span style=\"font-weight: 400\">Projeto de microsservi\u00e7o<\/span><\/h2>\n<p><span style=\"font-weight: 400\">Um bom microsservi\u00e7o deve ser leve e sem estado. O objetivo de um <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/microservices-architecture-in-couchbase\/\">Arquitetura de microsservi\u00e7os<\/a> \u00e9 dividir a funcionalidade do aplicativo em componentes discretos e de opera\u00e7\u00e3o independente. Cada microsservi\u00e7o deve atender a uma \u00e1rea funcional do aplicativo geral. O mais importante \u00e9 que cada microsservi\u00e7o seja capaz de evoluir independentemente do restante do cen\u00e1rio do aplicativo. Isso funciona bem com um <\/span><a href=\"https:\/\/en.wikipedia.org\/wiki\/Agile_software_development\"><span style=\"font-weight: 400\">Metodologia de desenvolvimento \u00e1gil<\/span><\/a><span style=\"font-weight: 400\">permitindo que as equipes forne\u00e7am rapidamente novas funcionalidades sem afetar o aplicativo geral.<\/span><\/p>\n<p><span style=\"font-weight: 400\">J\u00e1 foi dito que os microsservi\u00e7os devem ser projetados para falhas. Isso pode parecer estranho a princ\u00edpio, mas faz todo o sentido se voc\u00ea considerar a natureza e o ciclo de vida de um microsservi\u00e7o. Um bom microsservi\u00e7o deve ser ef\u00eamero. Como eles n\u00e3o t\u00eam estado, voc\u00ea deve ser capaz de adicionar e remover inst\u00e2ncias de microsservi\u00e7os sem afetar o aplicativo.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Como os microsservi\u00e7os estar\u00e3o em fluxo perp\u00e9tuo, toda a intera\u00e7\u00e3o com eles deve ser feita por meio de um estilo de API que funcione bem nesse ambiente. Assim sendo, <\/span><a href=\"https:\/\/en.wikipedia.org\/wiki\/Representational_state_transfer#Architectural_constraints\"><span style=\"font-weight: 400\">Interfaces RESTful<\/span><\/a><span style=\"font-weight: 400\"> s\u00e3o uma boa op\u00e7\u00e3o para o design da API. As chamadas REST s\u00e3o ef\u00eameras e funcionam bem por tr\u00e1s de um balanceador de carga de rede (que \u00e9 um m\u00e9todo para tornar os microsservi\u00e7os baseados em REST altamente dispon\u00edveis e dimension\u00e1veis).<\/span><\/p>\n<p><span style=\"font-weight: 400\">Por fim, eles devem ser f\u00e1ceis de implantar e automatizar com as ferramentas populares de DevOps. Cada servi\u00e7o deve ser capaz de ser executado em um sistema com outros servi\u00e7os ou em um cont\u00eainer. O Kubernetes, uma tecnologia de orquestra\u00e7\u00e3o de cont\u00eaineres, foi essencialmente criado para microsservi\u00e7os.<\/span><\/p>\n<h2><span style=\"font-weight: 400\">Cria\u00e7\u00e3o de um microsservi\u00e7o de perfil de usu\u00e1rio<\/span><\/h2>\n<p><span style=\"font-weight: 400\">\u00c9 dif\u00edcil criar um aplicativo inteiro a partir de microsservi\u00e7os. A l\u00f3gica comercial principal geralmente precisa ser fornecida por algum aplicativo que simplesmente n\u00e3o pode ser reescrito com microsservi\u00e7os. Por exemplo, talvez voc\u00ea precise interagir com uma pilha de aplicativos ERP ou CRM prontos para uso. Mas para aplicativos da Web e m\u00f3veis, \u00e9 um padr\u00e3o comum fazer o front-end desses grandes sistemas com microsservi\u00e7os para controlar a experi\u00eancia do usu\u00e1rio final.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Os consumidores de tecnologia querem uma experi\u00eancia r\u00e1pida e personalizada quando interagem com um aplicativo da Web ou m\u00f3vel. Com os microsservi\u00e7os, \u00e9 poss\u00edvel distribuir globalmente os elementos da camada de apresenta\u00e7\u00e3o usados com mais frequ\u00eancia para que fiquem geograficamente pr\u00f3ximos do usu\u00e1rio final. Voc\u00ea tamb\u00e9m pode dimensionar esses componentes de forma independente com base nos padr\u00f5es de uso.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Um componente frequente de um aplicativo m\u00f3vel ou da Web \u00e9 o conceito de perfis de usu\u00e1rio. Geralmente, esse \u00e9 o \u00edcone da \"silhueta de uma pessoa\" na parte superior direita de uma interface de usu\u00e1rio. Os perfis de usu\u00e1rio podem ser simplistas, com informa\u00e7\u00f5es demogr\u00e1ficas b\u00e1sicas, ou altamente detalhados, com informa\u00e7\u00f5es ricas sobre prefer\u00eancias e hist\u00f3rico, para promover altera\u00e7\u00f5es personalizadas na experi\u00eancia do usu\u00e1rio.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Esta s\u00e9rie de postagens de blog discute o uso do Python para fornecer uma interface RESTful para dados de perfil de usu\u00e1rio hospedados em um banco de dados Couchbase. Usaremos um exemplo simples com um esquema b\u00e1sico para fins ilustrativos. No entanto, voc\u00ea pode aprimorar esse exemplo o quanto for necess\u00e1rio para um aplicativo do \"mundo real\".<\/span><\/p>\n<h2><span style=\"font-weight: 400\">Por que usar o Couchbase para microsservi\u00e7os?<\/span><\/h2>\n<p><span style=\"font-weight: 400\">O Couchbase combina v\u00e1rios elementos de processamento de dados em uma plataforma de dados unificada. O Couchbase inclui um mecanismo de valor-chave, suporte a esquemas relacionais, um mecanismo de consulta SQL completo, um mecanismo de pesquisa de texto completo, um mecanismo de eventos e um mecanismo de an\u00e1lise. Ele oferece tempos de resposta de microssegundos e elimina a necessidade de as organiza\u00e7\u00f5es escolherem sistemas diferentes para cargas de trabalho diferentes.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Um servi\u00e7o de perfil de usu\u00e1rio \u00e9 normalmente um servi\u00e7o acessado com frequ\u00eancia. No m\u00ednimo, junto com a autoriza\u00e7\u00e3o e a autentica\u00e7\u00e3o, ele \u00e9 acessado sempre que um usu\u00e1rio faz login em um aplicativo. No entanto, o cen\u00e1rio mais prov\u00e1vel \u00e9 que ele precise ser acessado muitas vezes enquanto algu\u00e9m interage com um aplicativo. Dessa forma, o desempenho e a lat\u00eancia ser\u00e3o caracter\u00edsticas essenciais do projeto.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400\">A arquitetura memory-first do Couchbase permite que ele ofere\u00e7a um desempenho incrivelmente r\u00e1pido. O desempenho do Couchbase \u00e9 quase linear com sua arquitetura scale-out e shared-nothing, que permite manter a taxa de transfer\u00eancia e as lat\u00eancias \u00e0 medida que o cluster \u00e9 dimensionado. O Couchbase pode ser dimensionado em conjunto com os elementos de microsservi\u00e7o porque a arquitetura de microsservi\u00e7o tamb\u00e9m \u00e9 dimensionada para fora e n\u00e3o compartilhada.<\/span><\/p>\n<p><span style=\"font-weight: 400\">O Couchbase foi projetado para eliminar muitas tarefas administrativas tradicionais. O Couchbase aproveita um modelo din\u00e2mico de conten\u00e7\u00e3o de dados com armazenamento e rebalanceamento autom\u00e1ticos de dados e separa o gerenciamento de \u00edndices do gerenciamento de dados. Com o <\/span><a href=\"https:\/\/cloud.couchbase.com\/\"><span style=\"font-weight: 400\">Oferta do Capella Couchbase Cloud<\/span><\/a><span style=\"font-weight: 400\">ou no local com ferramentas como Terraform ou Kubernetes e o <\/span><a href=\"https:\/\/www.couchbase.com\/blog\/pt\/products\/cloud\/kubernetes\/\"><span style=\"font-weight: 400\">Operador aut\u00f4nomo do Couchbase<\/span><\/a><span style=\"font-weight: 400\">Com o uso da tecnologia de nuvem, as altera\u00e7\u00f5es no banco de dados e no microsservi\u00e7o podem ser automatizadas e orquestradas em nuvens p\u00fablicas e privadas.<\/span><\/p>\n<h2><span style=\"font-weight: 400\">Por que Python?<\/span><\/h2>\n<p><span style=\"font-weight: 400\">Essa pode ser a maior d\u00favida em sua mente ao ler este post. Algo como Node.js pode ser a primeira linguagem que lhe vem \u00e0 mente. De fato, por <\/span><a href=\"https:\/\/bootcamp.berkeley.edu\/blog\/most-in-demand-programming-languages\/\"><span style=\"font-weight: 400\">Berkeley<\/span><\/a><span style=\"font-weight: 400\"> JavaScript \u00e9 a linguagem mais procurada, mas Python \u00e9 a segunda. O Python \u00e9 muito acess\u00edvel, pois faz parte da distribui\u00e7\u00e3o de software para Linux e macOS, e voc\u00ea pode instal\u00e1-lo facilmente no Windows. Voc\u00ea pode ter v\u00e1rias vers\u00f5es da linguagem instaladas, e o recurso de ambiente virtual facilita a cria\u00e7\u00e3o de v\u00e1rios ambientes personalizados usando diferentes vers\u00f5es da linguagem. Embora o Python ofere\u00e7a suporte a multithreading, seus threads n\u00e3o s\u00e3o t\u00e3o eficientes quanto os de uma linguagem como Java. Ainda assim, o Python \u00e9 leve e, por isso, \u00e9 bem dimensionado para o multiprocessamento e tem pacotes que facilitam o envio de threads ou processos. A melhor parte do Python \u00e9 que ele \u00e9 f\u00e1cil de aprender e de codificar.<\/span><\/p>\n<h2><span style=\"font-weight: 400\">Exemplo de passo a passo do aplicativo<\/span><\/h2>\n<p><span style=\"font-weight: 400\">Para demonstrar o conceito, criei um exemplo de microsservi\u00e7o Python (<\/span><a href=\"https:\/\/github.com\/mminichino\/user-profile-demo\"><span style=\"font-weight: 400\">O c\u00f3digo est\u00e1 no GitHub<\/span><\/a><span style=\"font-weight: 400\">) que fornece uma interface RESTful muito simples para acessar as informa\u00e7\u00f5es do perfil do usu\u00e1rio. O Couchbase \u00e9 compat\u00edvel com os tipos de documento JSON, UTF-8 (string) ou bin\u00e1rio (raw). O formato JSON \u00e9 considerado o formato nativo e permite muitos recursos avan\u00e7ados na plataforma, portanto, esse \u00e9 o formato de documento que usaremos.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Nosso perfil de usu\u00e1rio muito simples cont\u00e9m o nome do usu\u00e1rio e outros detalhes b\u00e1sicos relacionados \u00e0 sua conta. O perfil inclui uma imagem que faz refer\u00eancia a um registro separado que cont\u00e9m o arquivo de imagem codificado em Base64. Poder\u00edamos ter usado o tipo de documento RAW, mas colocamos a imagem em um valor JSON para este exemplo.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400\">Tamb\u00e9m aproveitamos o recurso de escopos e cole\u00e7\u00f5es que foi introduzido no Couchbase Server 7. Os documentos de perfil de usu\u00e1rio s\u00e3o armazenados no <\/span><i><span style=\"font-weight: 400\">dados_do_usu\u00e1rio <\/span><\/i><span style=\"font-weight: 400\">e as imagens s\u00e3o armazenadas no <\/span><i><span style=\"font-weight: 400\">user_images <\/span><\/i><span style=\"font-weight: 400\">como ilustrado aqui:<\/span><\/p>\n<p><a href=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2022\/03\/image_2022-03-25_142409.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-12960\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2022\/03\/image_2022-03-25_142409.png\" alt=\"User profile sample data model\" width=\"547\" height=\"798\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/03\/image_2022-03-25_142409.png 547w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/03\/image_2022-03-25_142409-206x300.png 206w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/03\/image_2022-03-25_142409-300x438.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/03\/image_2022-03-25_142409-14x20.png 14w\" sizes=\"auto, (max-width: 547px) 100vw, 547px\" \/><\/a><\/p>\n<p><span style=\"font-weight: 400\">Formato de documento de perfil de usu\u00e1rio:<\/span><\/p>\n<pre class=\"decode-attributes:false lang:js decode:true\">{\r\n\u00a0\u00a0\"record_id\": \"1\",\r\n\u00a0\u00a0\"name\": \"Jessica Lopez\",\r\n\u00a0\u00a0\"nickname\": \"jlopez\",\r\n\u00a0\u00a0\"picture\": \"1\",\r\n\u00a0\u00a0\"user_id\": \"jessicalopez9483\",\r\n\u00a0\u00a0\"email\": \"jessica.lopez@example.com\",\r\n\u00a0\u00a0\"email_verified\": \"False\",\r\n\u00a0\u00a0\"first_name\": \"Jessica\",\r\n\u00a0\u00a0\"last_name\": \"Lopez\",\r\n\u00a0\u00a0\"address\": \"6699 West Road\",\r\n\u00a0\u00a0\"city\": \"Weirton\",\r\n\u00a0\u00a0\"state\": \"OR\",\r\n\u00a0\u00a0\"zip_code\": \"21243\",\r\n\u00a0\u00a0\"phone\": \"306-402-6984\",\r\n\u00a0\u00a0\"date_of_birth\": \"03\/05\/1961\"\r\n}<\/pre>\n<p><span style=\"font-weight: 400\">Formato de documento de imagem do usu\u00e1rio:<\/span><\/p>\n<pre class=\"decode-attributes:false lang:js decode:true\">{\r\n\u00a0\u00a0\"record_id\": \"1\",\r\n\u00a0\u00a0\"type\": \"jpeg\",\r\n\u00a0\u00a0\"image\": \" AAAADGpQICANC\u2026=\"\r\n}<\/pre>\n<p><span style=\"font-weight: 400\">O microsservi\u00e7o Python tem a op\u00e7\u00e3o de ser executado em primeiro plano, onde a sa\u00edda \u00e9 ecoada na tela (terminal), ou em segundo plano como um \"daemon\", onde a sa\u00edda \u00e9 enviada para um arquivo de registro. O c\u00f3digo usa o recurso de classe orientada a objetos do Python para fazer a maior parte do trabalho.<\/span><\/p>\n<p><span style=\"font-weight: 400\">O <\/span><em><span style=\"font-weight: 400\">dbConnection<\/span><\/em><span style=\"font-weight: 400\"> foi projetada para manter ponteiros para objetos relacionados \u00e0 conex\u00e3o com o banco de dados Couchbase. Isso facilita a transmiss\u00e3o desses objetos para outras classes e fun\u00e7\u00f5es.<\/span><\/p>\n<p><span style=\"font-weight: 400\">O <\/span><em><span style=\"font-weight: 400\">couchbaseDriver<\/span><\/em><span style=\"font-weight: 400\"> trata da intera\u00e7\u00e3o com o banco de dados. A classe <em>conectar<\/em> inicia uma conex\u00e3o com o cluster do Couchbase. Ela cria objetos para acessar o bucket, o escopo e as cole\u00e7\u00f5es passadas para a fun\u00e7\u00e3o. Ela armazena esses objetos em um <\/span><em><span style=\"font-weight: 400\">dbConnection<\/span><\/em><span style=\"font-weight: 400\"> que est\u00e1 armazenado na classe. O objeto <\/span><em><span style=\"font-weight: 400\">obter<\/span><\/em><span style=\"font-weight: 400\"> faz uma recupera\u00e7\u00e3o de valor-chave da chave passada para a fun\u00e7\u00e3o a partir da cole\u00e7\u00e3o referenciada, aproveitando a conex\u00e3o estabelecida. A fun\u00e7\u00e3o <\/span><em><span style=\"font-weight: 400\">consulta<\/span><\/em><span style=\"font-weight: 400\"> faz uma fun\u00e7\u00e3o <em>SQL <\/em><\/span><em><span style=\"font-weight: 400\">SELECIONAR<\/span><\/em><span style=\"font-weight: 400\"> no campo JSON da cole\u00e7\u00e3o referenciada, procurando uma chave JSON que seja igual ao valor especificado.<\/span><\/p>\n<p><span style=\"font-weight: 400\">O <\/span><em><span style=\"font-weight: 400\">restServer<\/span><\/em><span style=\"font-weight: 400\"> \u00e9 uma classe de manipulador projetada para ser passada para a classe Python <\/span><em><span style=\"font-weight: 400\">http.server<\/span><\/em><span style=\"font-weight: 400\"> m\u00f3dulo. Ele implementa a interface RESTful. Existem <\/span><span style=\"font-weight: 400\"><em>OBTER<\/em> <\/span><span style=\"font-weight: 400\">para localizar dados de perfil de usu\u00e1rio com base no apelido, nome de usu\u00e1rio ou ID. Ele tamb\u00e9m tem pontos de extremidade para obter imagens de perfil, seja recuperando o documento JSON ou retornando a pr\u00f3pria imagem. Isso \u00e9 vantajoso em rela\u00e7\u00e3o a outras estruturas de desenvolvimento REST que geralmente s\u00f3 suportam a resposta a pontos de extremidade REST com conte\u00fado JSON.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Por fim, o <\/span><em><span style=\"font-weight: 400\">microServi\u00e7o<\/span><\/em><span style=\"font-weight: 400\"> inicia e interrompe o servidor HTTP. Ela \u00e9 chamada a partir de <\/span><em><span style=\"font-weight: 400\">principal<\/span><\/em><span style=\"font-weight: 400\"> que usa o <\/span><em><span style=\"font-weight: 400\">couchbaseDriver<\/span><\/em><span style=\"font-weight: 400\"> para se conectar ao banco de dados e iniciar o microsservi\u00e7o. O microsservi\u00e7o inteiro tem apenas algumas centenas de linhas de c\u00f3digo e pode ser facilmente implantado em qualquer lugar e anexado a qualquer cluster do Couchbase.<\/span><\/p>\n<h3><b>A seguir<\/b><\/h3>\n<p><span style=\"font-weight: 400\">Na pr\u00f3xima parte desta s\u00e9rie, falaremos sobre a gera\u00e7\u00e3o de dados de teste aleat\u00f3rios para o esquema de microsservi\u00e7o e o teste de desempenho.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Consulte esses recursos \u00e0 medida que voc\u00ea pesquisar mais sobre esses t\u00f3picos:<\/span><\/p>\n<ul>\n<li style=\"list-style-type: none\">\n<ul>\n<li style=\"font-weight: 400\"><a href=\"https:\/\/github.com\/mminichino\/user-profile-demo\"><span style=\"font-weight: 400\">Exemplo de c\u00f3digo de aplicativo de perfil de usu\u00e1rio (GitHub)<\/span><\/a><\/li>\n<li style=\"font-weight: 400\"><a href=\"https:\/\/en.wikipedia.org\/wiki\/Microservices\"><span style=\"font-weight: 400\">Arquitetura de microsservi\u00e7os<\/span><\/a><span style=\"font-weight: 400\"> (Wikipedia)<\/span><\/li>\n<li style=\"font-weight: 400\"><a href=\"https:\/\/cloud.couchbase.com\/\"><span style=\"font-weight: 400\">Oferta do Capella Couchbase Cloud<\/span><\/a><\/li>\n<li style=\"font-weight: 400\"><a href=\"https:\/\/www.couchbase.com\/blog\/pt\/products\/cloud\/kubernetes\/\"><span style=\"font-weight: 400\">Operador aut\u00f4nomo do Couchbase<\/span><\/a><span style=\"font-weight: 400\">\u00a0<\/span><\/li>\n<\/ul>\n<\/li>\n<\/ul>","protected":false},"excerpt":{"rendered":"<p>Microservices require a scalable and sustainable set of components. This post introduces how to build microservices using Python and Couchbase to provide a fully-scalable solution. Monolithic applications present many challenges. They were born in an age when everything ran on [&hellip;]<\/p>\n","protected":false},"author":81015,"featured_media":12286,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1816,9139,2201],"tags":[2103,9548],"ppma_author":[9550],"class_list":["post-12959","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-couchbase-server","category-python","category-tools-sdks","tag-microservices","tag-service-oriented-architecture"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.3 (Yoast SEO v27.3) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Build A Python Microservice With Couchbase - Part 1 - The Couchbase Blog<\/title>\n<meta name=\"description\" content=\"Interested in learning how to build fully-scalabe microservices using Python and Couchbase? Then this blog is for you\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.couchbase.com\/blog\/pt\/build-a-python-microservice-with-couchbase-part-1\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Build A Python Microservice With Couchbase - Part 1\" \/>\n<meta property=\"og:description\" content=\"Interested in learning how to build fully-scalabe microservices using Python and Couchbase? Then this blog is for you\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/pt\/build-a-python-microservice-with-couchbase-part-1\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2022-03-29T15:00:05+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-14T04:25:02+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/10\/database-migration-erwin-data-modeler-couchbase.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"628\" \/>\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-1\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/build-a-python-microservice-with-couchbase-part-1\\\/\"},\"author\":{\"name\":\"Michael Minichino\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#\\\/schema\\\/person\\\/15ea6a51d53d4739913c98d25a8d7e77\"},\"headline\":\"Build A Python Microservice With Couchbase &#8211; Part 1\",\"datePublished\":\"2022-03-29T15:00:05+00:00\",\"dateModified\":\"2025-06-14T04:25:02+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/build-a-python-microservice-with-couchbase-part-1\\\/\"},\"wordCount\":1599,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/build-a-python-microservice-with-couchbase-part-1\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/1\\\/2021\\\/10\\\/database-migration-erwin-data-modeler-couchbase.jpg\",\"keywords\":[\"microservices\",\"service-oriented architecture\"],\"articleSection\":[\"Couchbase Server\",\"Python\",\"Tools &amp; SDKs\"],\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/build-a-python-microservice-with-couchbase-part-1\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/build-a-python-microservice-with-couchbase-part-1\\\/\",\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/build-a-python-microservice-with-couchbase-part-1\\\/\",\"name\":\"Build A Python Microservice With Couchbase - Part 1 - The Couchbase Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/build-a-python-microservice-with-couchbase-part-1\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/build-a-python-microservice-with-couchbase-part-1\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/1\\\/2021\\\/10\\\/database-migration-erwin-data-modeler-couchbase.jpg\",\"datePublished\":\"2022-03-29T15:00:05+00:00\",\"dateModified\":\"2025-06-14T04:25:02+00:00\",\"description\":\"Interested in learning how to build fully-scalabe microservices using Python and Couchbase? Then this blog is for you\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/build-a-python-microservice-with-couchbase-part-1\\\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/build-a-python-microservice-with-couchbase-part-1\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/build-a-python-microservice-with-couchbase-part-1\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/1\\\/2021\\\/10\\\/database-migration-erwin-data-modeler-couchbase.jpg\",\"contentUrl\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/1\\\/2021\\\/10\\\/database-migration-erwin-data-modeler-couchbase.jpg\",\"width\":1200,\"height\":628,\"caption\":\"Learn how the erwin Data Modeler helps your database migration from legacy RDBMS to Couchbase\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/build-a-python-microservice-with-couchbase-part-1\\\/#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 1\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/\",\"name\":\"The Couchbase Blog\",\"description\":\"Couchbase, the NoSQL Database\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-BR\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/2023\\\/04\\\/admin-logo.png\",\"contentUrl\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/2023\\\/04\\\/admin-logo.png\",\"width\":218,\"height\":34,\"caption\":\"The Couchbase Blog\"},\"image\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#\\\/schema\\\/person\\\/15ea6a51d53d4739913c98d25a8d7e77\",\"name\":\"Michael Minichino\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/1\\\/2022\\\/03\\\/Screen-Shot-2022-03-28-at-12.40.06-PM.pnged87fc8ff8aedc56f9872fbd77382f29\",\"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\\\/pt\\\/author\\\/michael-minichino\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Build A Python Microservice With Couchbase - Part 1 - The Couchbase Blog","description":"Interessado em aprender a criar microsservi\u00e7os totalmente escalon\u00e1veis usando Python e Couchbase? Ent\u00e3o este blog \u00e9 para voc\u00ea","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.couchbase.com\/blog\/pt\/build-a-python-microservice-with-couchbase-part-1\/","og_locale":"pt_BR","og_type":"article","og_title":"Build A Python Microservice With Couchbase - Part 1","og_description":"Interested in learning how to build fully-scalabe microservices using Python and Couchbase? Then this blog is for you","og_url":"https:\/\/www.couchbase.com\/blog\/pt\/build-a-python-microservice-with-couchbase-part-1\/","og_site_name":"The Couchbase Blog","article_published_time":"2022-03-29T15:00:05+00:00","article_modified_time":"2025-06-14T04:25:02+00:00","og_image":[{"width":1200,"height":628,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/10\/database-migration-erwin-data-modeler-couchbase.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-1\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/build-a-python-microservice-with-couchbase-part-1\/"},"author":{"name":"Michael Minichino","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/15ea6a51d53d4739913c98d25a8d7e77"},"headline":"Build A Python Microservice With Couchbase &#8211; Part 1","datePublished":"2022-03-29T15:00:05+00:00","dateModified":"2025-06-14T04:25:02+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/build-a-python-microservice-with-couchbase-part-1\/"},"wordCount":1599,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/build-a-python-microservice-with-couchbase-part-1\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/10\/database-migration-erwin-data-modeler-couchbase.jpg","keywords":["microservices","service-oriented architecture"],"articleSection":["Couchbase Server","Python","Tools &amp; SDKs"],"inLanguage":"pt-BR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/build-a-python-microservice-with-couchbase-part-1\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/build-a-python-microservice-with-couchbase-part-1\/","url":"https:\/\/www.couchbase.com\/blog\/build-a-python-microservice-with-couchbase-part-1\/","name":"Build A Python Microservice With Couchbase - Part 1 - The Couchbase Blog","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/build-a-python-microservice-with-couchbase-part-1\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/build-a-python-microservice-with-couchbase-part-1\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/10\/database-migration-erwin-data-modeler-couchbase.jpg","datePublished":"2022-03-29T15:00:05+00:00","dateModified":"2025-06-14T04:25:02+00:00","description":"Interessado em aprender a criar microsservi\u00e7os totalmente escalon\u00e1veis usando Python e Couchbase? Ent\u00e3o este blog \u00e9 para voc\u00ea","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/build-a-python-microservice-with-couchbase-part-1\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/build-a-python-microservice-with-couchbase-part-1\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/build-a-python-microservice-with-couchbase-part-1\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/10\/database-migration-erwin-data-modeler-couchbase.jpg","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/10\/database-migration-erwin-data-modeler-couchbase.jpg","width":1200,"height":628,"caption":"Learn how the erwin Data Modeler helps your database migration from legacy RDBMS to Couchbase"},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/build-a-python-microservice-with-couchbase-part-1\/#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 1"}]},{"@type":"WebSite","@id":"https:\/\/www.couchbase.com\/blog\/#website","url":"https:\/\/www.couchbase.com\/blog\/","name":"Blog do Couchbase","description":"Couchbase, o banco de dados NoSQL","publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-BR"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"Blog do Couchbase","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","width":218,"height":34,"caption":"The Couchbase Blog"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/15ea6a51d53d4739913c98d25a8d7e77","name":"Michael Minichino","image":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/03\/Screen-Shot-2022-03-28-at-12.40.06-PM.pnged87fc8ff8aedc56f9872fbd77382f29","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\/pt\/author\/michael-minichino\/"}]}},"acf":[],"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"},"0":null,"1":"","2":"","3":"","4":"","5":"","6":"","7":"","8":""}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/12959","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/users\/81015"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/comments?post=12959"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/12959\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media\/12286"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media?parent=12959"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/categories?post=12959"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/tags?post=12959"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/ppma_author?post=12959"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}