<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Blogs on Ivaldo de Oliveira Batista Júnior</title><link>https://ivaldo.eti.br/blog/</link><description>Recent content in Blogs on Ivaldo de Oliveira Batista Júnior</description><generator>Hugo</generator><language>en</language><copyright>© 2026 Ivaldo de Oliveira Batista Júnior</copyright><lastBuildDate>Thu, 30 Jul 2026 09:00:00 -0300</lastBuildDate><atom:link href="https://ivaldo.eti.br/blog/index.xml" rel="self" type="application/rss+xml"/><item><title>Who Signs Off on AI Decisions?</title><link>https://ivaldo.eti.br/blog/who-signs-off-on-ai-decisions/</link><pubDate>Thu, 30 Jul 2026 09:00:00 -0300</pubDate><guid>https://ivaldo.eti.br/blog/who-signs-off-on-ai-decisions/</guid><description>&lt;h2 id="who-owns-the-decision"&gt;Who owns the decision?&lt;/h2&gt;
&lt;p&gt;When a system denies credit, prioritizes a patient, or recommends a course of treatment, it is not acting alone. Before an output ever exists, someone has decided which data matters, what kind of error is tolerable, and when the machine may act without human review.&lt;/p&gt;
&lt;p&gt;The ethical question, then, is not whether the model has morals. It is: &lt;strong&gt;who is willing to put their name to the decision?&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Being a Developer Is Not Just About Writing Code</title><link>https://ivaldo.eti.br/blog/being-a-developer-is-not-just-about-writing-code/</link><pubDate>Wed, 01 Jul 2026 10:45:14 -0300</pubDate><guid>https://ivaldo.eti.br/blog/being-a-developer-is-not-just-about-writing-code/</guid><description>&lt;h2 id="introduction"&gt;Introduction&lt;/h2&gt;
&lt;p&gt;For a long time, many people looked at software development as the act of writing code. A developer would receive a requirement, open the editor, write classes, functions, queries, screens, tests, and deliver something that runs.&lt;/p&gt;
&lt;p&gt;That view is understandable, but incomplete.&lt;/p&gt;
&lt;p&gt;Code is the most visible part of our work. It is the artifact that goes to the repository, passes through review, enters the pipeline, and reaches production. But before code exists, there is interpretation. There is context. There are tradeoffs, conversations, doubts, decisions, and responsibilities.&lt;/p&gt;</description></item><item><title>Spec Driven Design: Automating Software Generation with AI Agents and GitHub Templates</title><link>https://ivaldo.eti.br/blog/spec-driven-design-automating-software-generation-with-ai-agents-and-github-templates/</link><pubDate>Fri, 24 Oct 2025 10:01:04 -0300</pubDate><guid>https://ivaldo.eti.br/blog/spec-driven-design-automating-software-generation-with-ai-agents-and-github-templates/</guid><description>&lt;h2 id="the-end-of-boilerplate-ai-generating-projects-not-just-code"&gt;The End of &amp;ldquo;Boilerplate&amp;rdquo;: AI Generating Projects, Not Just Code&lt;/h2&gt;
&lt;p&gt;How much time does your team spend configuring a new project? Creating &lt;code&gt;Controllers&lt;/code&gt;, registering the &lt;code&gt;DbContext&lt;/code&gt;, defining the &lt;code&gt;csproj&lt;/code&gt;&amp;hellip; all before writing the first line of business logic?&lt;/p&gt;
&lt;p&gt;Tools like GitHub Co-pilot have changed how we &lt;em&gt;write&lt;/em&gt; code, but they are &lt;em&gt;assistants&lt;/em&gt;. The next leap is &lt;em&gt;generative automation&lt;/em&gt;: using AI to &lt;em&gt;create&lt;/em&gt; the entire structure of a project.&lt;/p&gt;
&lt;p&gt;The problem? Pure AI is &amp;ldquo;creative chaos.&amp;rdquo; It can &amp;ldquo;hallucinate&amp;rdquo; and deliver inconsistent results, breaking the architectural standards we fight so hard to establish.&lt;/p&gt;</description></item><item><title>Supercharging C# Logs with [CallerFilePath] and [CallerLineNumber]</title><link>https://ivaldo.eti.br/blog/supercharging-c%23-logs-with-callerfilepath-and-callerlinenumber/</link><pubDate>Tue, 07 Oct 2025 09:15:00 -0300</pubDate><guid>https://ivaldo.eti.br/blog/supercharging-c%23-logs-with-callerfilepath-and-callerlinenumber/</guid><description>&lt;h2 id="introduction"&gt;Introduction&lt;/h2&gt;
&lt;p&gt;It&amp;rsquo;s 3 AM. A critical alert wakes you up: a service in production is failing. You open the logs, desperately searching for a clue, only to find a sea of generic messages like &lt;code&gt;&amp;quot;An error occurred during processing&amp;quot;&lt;/code&gt;. Frustration mounts. Where in the thousands of lines of code did this happen? We&amp;rsquo;ve all been there. This moment is where the true value of well-structured logging becomes painfully clear.&lt;/p&gt;
&lt;p&gt;Writing good logs is an act of empathy—empathy for your future self and for the colleagues who will have to debug your code under pressure. Fortunately, the .NET platform provides powerful, yet simple, tools to turn our logs from ambiguous notes into precise, actionable information. In this article, we&amp;rsquo;ll explore how to use the &lt;code&gt;[CallerFilePath]&lt;/code&gt; and &lt;code&gt;[CallerLineNumber]&lt;/code&gt; attributes to enrich our logs, making debugging faster, more efficient, and much less stressful.&lt;/p&gt;</description></item><item><title>Unlocking the Saga Pattern with .NET 9, MassTransit, and RabbitMQ: Orchestrating Microservices with Confidence</title><link>https://ivaldo.eti.br/blog/unlocking-the-saga-pattern-with-dotnet9-masstransit-and-rabbitmq/</link><pubDate>Sat, 13 Sep 2025 14:00:00 -0300</pubDate><guid>https://ivaldo.eti.br/blog/unlocking-the-saga-pattern-with-dotnet9-masstransit-and-rabbitmq/</guid><description>&lt;h2 id="introduction-the-pain-of-inconsistency"&gt;Introduction: The Pain of Inconsistency&lt;/h2&gt;
&lt;p&gt;In the world of microservices, each service has its own database, its own source of truth. This autonomy is fantastic for scalability and decoupling, but it presents us with a monumental challenge: how do we ensure the consistency of a business process that spans multiple services?&lt;/p&gt;
&lt;p&gt;Imagine a simple e-commerce flow:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;The &lt;code&gt;Orders Service&lt;/code&gt; creates a new order.&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;Payments Service&lt;/code&gt; processes the credit card.&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;Inventory Service&lt;/code&gt; debits the product from the inventory.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;If the order is created and the payment is approved, but the &lt;code&gt;Inventory Service&lt;/code&gt; fails (perhaps the item went out of stock at the last second), what happens? The customer has been charged for a product they won&amp;rsquo;t receive. The overall state of the system has become inconsistent. Trying to solve this with direct HTTP calls and complex &lt;code&gt;try-catch&lt;/code&gt; blocks is a path to fragile code and a maintenance nightmare.&lt;/p&gt;</description></item><item><title>Hexagonal Architecture in .NET: From Controllers to Ports &amp; Adapters in a Real Project</title><link>https://ivaldo.eti.br/blog/hexagonal-architecture-in-dotnet-from-controllers-to-ports-and-adapters/</link><pubDate>Mon, 08 Sep 2025 15:15:00 -0300</pubDate><guid>https://ivaldo.eti.br/blog/hexagonal-architecture-in-dotnet-from-controllers-to-ports-and-adapters/</guid><description>&lt;h2 id="introduction-the-pain-of-coupling"&gt;Introduction: The Pain of Coupling&lt;/h2&gt;
&lt;p&gt;If you&amp;rsquo;ve been developing with .NET for a while, you&amp;rsquo;ve probably seen or written a &lt;code&gt;Controller&lt;/code&gt; like this: it receives an HTTP request, validates the data, handles business logic, talks directly to Entity Framework, maybe calls another API with &lt;code&gt;HttpClient&lt;/code&gt;, and finally, returns an &lt;code&gt;ActionResult&lt;/code&gt;. At first, it seems productive. But over time, this controller becomes a monster: fragile, difficult to test, and terribly coupled to technology.&lt;/p&gt;</description></item><item><title>Hangfire and Decentralized Queues: Practical Guide for .NET Developers | Hangfire e Filas Descentralizadas: Guia Prático para Desenvolvedores .NET</title><link>https://ivaldo.eti.br/blog/hangfire-and-decentralized-queues/</link><pubDate>Mon, 11 Aug 2025 00:00:00 +0000</pubDate><guid>https://ivaldo.eti.br/blog/hangfire-and-decentralized-queues/</guid><description>&lt;h2 id="hangfire-and-decentralized-queues-practical-guide-for-net-developers"&gt;Hangfire and Decentralized Queues: Practical Guide for .NET Developers&lt;/h2&gt;
&lt;p&gt;In modern software architecture, background job processing is a key element for scalability and user experience. &lt;strong&gt;Hangfire&lt;/strong&gt; is a powerful .NET library that enables you to manage and process jobs in a &lt;strong&gt;decentralized queue&lt;/strong&gt; without needing external services. This article will guide you through its concepts, benefits, real-world use cases, and a complete example you can run today.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="what-is-hangfire"&gt;What is Hangfire?&lt;/h2&gt;
&lt;p&gt;Hangfire was created to simplify background processing in .NET applications. It allows developers to schedule and execute jobs asynchronously without manually managing threads, timers, or message queues.&lt;/p&gt;</description></item><item><title>Optimizing PostgreSQL for .NET Apps | Otimizando PostgreSQL para Aplicações .NET</title><link>https://ivaldo.eti.br/blog/optimizing-postgresql-forapps/</link><pubDate>Mon, 11 Aug 2025 00:00:00 +0000</pubDate><guid>https://ivaldo.eti.br/blog/optimizing-postgresql-forapps/</guid><description>&lt;h2 id="optimizing-postgresql-for-net-apps"&gt;Optimizing PostgreSQL for .NET Apps&lt;/h2&gt;
&lt;p&gt;When building high-performance applications with &lt;strong&gt;.NET&lt;/strong&gt; and &lt;strong&gt;PostgreSQL&lt;/strong&gt;, database tuning can make the difference between a smooth, scalable product and a bottleneck-prone system. In this article, we’ll explore performance best practices, PostgreSQL configuration tweaks, and .NET-side optimizations for faster queries and better resource utilization.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="why-postgresql-for-net"&gt;Why PostgreSQL for .NET?&lt;/h2&gt;
&lt;p&gt;PostgreSQL is one of the most reliable, powerful, and extensible relational databases. Combined with the &lt;strong&gt;Npgsql&lt;/strong&gt; driver, it offers native .NET support, strong ACID compliance, and advanced features like JSONB, full-text search, and partitioning.&lt;/p&gt;</description></item><item><title>The Complete Guide to Logging in Blazor WASM: From Basics to Advanced with a Custom Provider</title><link>https://ivaldo.eti.br/blog/complete-guide-custom-logging-blazor-wasm/</link><pubDate>Tue, 08 Jul 2025 11:55:00 -0300</pubDate><guid>https://ivaldo.eti.br/blog/complete-guide-custom-logging-blazor-wasm/</guid><description>&lt;p&gt;If you&amp;rsquo;ve ever developed for the web, you know the feeling: a user reports an error you can&amp;rsquo;t reproduce. &amp;ldquo;Something went wrong when I tried to save,&amp;rdquo; they say. No further details. If the problem happened on the server, you likely have logs to investigate. But what if the error occurred entirely in the user&amp;rsquo;s browser? The console logs, if they ever existed, were lost forever the moment the tab was closed.&lt;/p&gt;</description></item><item><title>Security Isn't About Pentesting: How to Prevent Vulnerabilities Before the First Commit</title><link>https://ivaldo.eti.br/blog/security-isnt-about-pentesting-how-to-prevent-vulnerabilities-before-the-first-commit/</link><pubDate>Sat, 14 Jun 2025 19:50:00 -0300</pubDate><guid>https://ivaldo.eti.br/blog/security-isnt-about-pentesting-how-to-prevent-vulnerabilities-before-the-first-commit/</guid><description>&lt;h2 id="introduction-the-illusion-of-the-security-wall"&gt;Introduction: The Illusion of the &amp;ldquo;Security Wall&amp;rdquo;&lt;/h2&gt;
&lt;p&gt;In the world of software development, there&amp;rsquo;s an old and dangerous practice: treating security as a final step. Teams spend months developing and, just before launch, they &amp;ldquo;throw the code over the wall&amp;rdquo; for a security team or a penetration test (pentest) to find the flaws. This model isn&amp;rsquo;t just inefficient; it&amp;rsquo;s expensive and risky.&lt;/p&gt;
&lt;p&gt;The truth is, the most effective security is born with the code. In this article, we&amp;rsquo;ll explore the concept of &lt;strong&gt;Shift-Left Security&lt;/strong&gt;: the practice of moving security to the beginning of the software development lifecycle (SDLC).&lt;/p&gt;</description></item><item><title>Practical Guide to Implement Cybersecurity in Small Businesses</title><link>https://ivaldo.eti.br/blog/practical-guide-to-implement-cybersecurity-in-small-businesses/</link><pubDate>Mon, 14 Oct 2024 09:47:54 -0300</pubDate><guid>https://ivaldo.eti.br/blog/practical-guide-to-implement-cybersecurity-in-small-businesses/</guid><description>&lt;h2 id="1-introduction"&gt;1. Introduction&lt;/h2&gt;
&lt;p&gt;In the digital age, cybersecurity is no longer a luxury reserved only for large corporations. For small and medium-sized enterprises (SMEs), implementing cybersecurity measures has become a critical necessity. According to a 2023 Verizon report, 43% of cyber attacks target small businesses. This is because cybercriminals view SMEs as easy targets, often with inadequate defenses and valuable data.&lt;/p&gt;
&lt;p&gt;This guide will offer practical and accessible steps for small businesses to significantly strengthen their cybersecurity posture.&lt;/p&gt;</description></item><item><title>Challenges and Solutions in Migrating Applications to Microservices</title><link>https://ivaldo.eti.br/blog/challenges-and-solutions-in-migrating-applications-to-microservices/</link><pubDate>Wed, 04 Sep 2024 06:36:23 -0300</pubDate><guid>https://ivaldo.eti.br/blog/challenges-and-solutions-in-migrating-applications-to-microservices/</guid><description>&lt;h2 id="challenges-and-solutions-in-migrating-applications-to-microservices"&gt;Challenges and Solutions in Migrating Applications to Microservices&lt;/h2&gt;
&lt;h3 id="introduction"&gt;Introduction&lt;/h3&gt;
&lt;p&gt;In recent years, the microservices architecture has become a widely adopted approach for companies looking to scale their applications more efficiently and flexibly. This architecture allows large applications to be divided into small, independent services, where each service is responsible for a specific part of the business logic. Unlike the monolithic architecture, where all components are interdependent and run in a single environment, microservices offer greater flexibility for development, deployment, and scalability.&lt;/p&gt;</description></item><item><title>Generating PDFs in Blazor WebAssembly with jsPDF and html2canvas</title><link>https://ivaldo.eti.br/blog/generating-pdf-in-blazor-webassembly-with-jspdf-and-html2canvas/</link><pubDate>Mon, 26 Aug 2024 11:07:09 -0300</pubDate><guid>https://ivaldo.eti.br/blog/generating-pdf-in-blazor-webassembly-with-jspdf-and-html2canvas/</guid><description>&lt;h2 id="introduction"&gt;Introduction&lt;/h2&gt;
&lt;p&gt;When designing and developing modern web applications, we often encounter the need to generate PDF documents from HTML content. Whether to provide reports, receipts, or simply to allow users to save information in a portable and widely accepted format, PDFs are an indispensable resource.&lt;/p&gt;
&lt;p&gt;However, when developing applications with Blazor WebAssembly, an emerging framework that offers a client/server-like programming experience in the browser, implementing this functionality can present challenges. The interaction between the C# language used in Blazor and the JavaScript libraries commonly used for PDF generation, such as jsPDF and html2canvas, can be complicated.&lt;/p&gt;</description></item><item><title>Implementing Hosted Services in ASP.NET Core</title><link>https://ivaldo.eti.br/blog/implementing-hosted-services-aspnet-core/</link><pubDate>Sun, 25 Aug 2024 07:56:16 -0300</pubDate><guid>https://ivaldo.eti.br/blog/implementing-hosted-services-aspnet-core/</guid><description>&lt;h2 id="introduction"&gt;Introduction&lt;/h2&gt;
&lt;p&gt;In the dynamic world of programming, learning to work effectively with various frameworks is crucial. This article explores an important feature in the .NET universe – Hosted Services in ASP.NET Core.&lt;/p&gt;
&lt;p&gt;Hosted services are fundamental components that allow long-running tasks to be executed in the background, providing an elegant way to free up resources and enable applications to continue functioning without interruption. In a world where speed is essential, the ability to perform background tasks is invaluable. For ASP.NET Core applications, hosted services are the perfect solution for effectively managing tasks that would otherwise consume valuable resources.&lt;/p&gt;</description></item><item><title>The Importance of Developing Empathy for Your Future Self and Future Developers: Writing Clear and Readable Code</title><link>https://ivaldo.eti.br/blog/the-importance-of-developing-empathy-for-your-future-self-and-future-developers-writing-clear-and-readable-code/</link><pubDate>Wed, 06 Dec 2023 14:35:51 -0300</pubDate><guid>https://ivaldo.eti.br/blog/the-importance-of-developing-empathy-for-your-future-self-and-future-developers-writing-clear-and-readable-code/</guid><description>&lt;h2 id="introduction"&gt;Introduction&lt;/h2&gt;
&lt;p&gt;In the world of software development, the code we write today will be read, maintained, and expanded by others, including our future selves. A lack of clarity and readability in code can lead to difficulties, wasted time, and increased errors. Developing empathy for our future selves and future developers is essential to creating sustainable and efficient code. This article will discuss the importance of this empathy and present practices for writing clear and readable code.&lt;/p&gt;</description></item><item><title>Software Design Patterns Not Always the Best Solution</title><link>https://ivaldo.eti.br/blog/software-design-patterns-not-always-the-best-solution/</link><pubDate>Mon, 25 Sep 2023 14:35:51 -0300</pubDate><guid>https://ivaldo.eti.br/blog/software-design-patterns-not-always-the-best-solution/</guid><description>&lt;h2 id="introduction"&gt;Introduction&lt;/h2&gt;
&lt;p&gt;Software design patterns are often hailed as the holy grail of best practices in software engineering. They provide pre-defined solutions to common problems, promoting efficiency and readability. However, every tool has its limitations, and design patterns are no exception. This article aims to dive into the nuances of when design patterns can be more of a hindrance than a help.&lt;/p&gt;
&lt;h2 id="overview-of-design-patterns"&gt;Overview of Design Patterns&lt;/h2&gt;
&lt;p&gt;Design patterns are not just technical solutions to common problems; they also serve as a common language that can enhance communication among developers. Concepts like Singleton, Observer, and Strategy have become part of the standard lexicon in software engineering. However, it is crucial to understand that these patterns are not universal remedies, and applying them indiscriminately can have consequences.&lt;/p&gt;</description></item><item><title>_An Unexpected Error Was Encountered While Executing a Wsl Command</title><link>https://ivaldo.eti.br/blog/_an-unexpected-error-was-encountered-while-executing-a-wsl-command/</link><pubDate>Wed, 16 Aug 2023 14:58:47 -0300</pubDate><guid>https://ivaldo.eti.br/blog/_an-unexpected-error-was-encountered-while-executing-a-wsl-command/</guid><description>&lt;h2 id="introduction"&gt;Introduction&lt;/h2&gt;
&lt;p&gt;If you&amp;rsquo;ve ever delved into the world of software development on a Windows machine, it&amp;rsquo;s likely you&amp;rsquo;ve encountered the promising combination of Docker and WSL2. This duo, when operating in harmony, promises a smooth and effective experience, bringing the Windows development environment closer to the Linux universe. However, as many of us have discovered, things don&amp;rsquo;t always go as expected.&lt;/p&gt;
&lt;p&gt;Imagine starting your day, ready to dive into your project, only to be greeted with the following error message:&lt;/p&gt;</description></item><item><title>Managing Authentication in Web Applications Case Study Blazor WebAssembly</title><link>https://ivaldo.eti.br/blog/managing-authentication-in-web-applications-case-study-blazor-webassembly/</link><pubDate>Tue, 08 Aug 2023 14:35:51 -0300</pubDate><guid>https://ivaldo.eti.br/blog/managing-authentication-in-web-applications-case-study-blazor-webassembly/</guid><description>&lt;h2 id="introduction"&gt;Introduction&lt;/h2&gt;
&lt;h2 id="overview-of-the-challenge"&gt;Overview of the Challenge&lt;/h2&gt;
&lt;p&gt;In modern web applications, securely storing authentication tokens and associated information is essential to protect the integrity and confidentiality of user data. The issue becomes even more complex when considering the need to persist this information across browsing sessions without compromising security.&lt;/p&gt;
&lt;p&gt;The challenge is how to balance the need for accessibility and security in these cases.&lt;/p&gt;
&lt;h2 id="article-objective"&gt;Article Objective&lt;/h2&gt;
&lt;p&gt;The purpose of this article is to explore a specific approach to this challenge using in-memory storage with Blazor WebAssembly on the .NET platform.&lt;/p&gt;</description></item><item><title>Mediator Design Pattern: Simplifying Interactions in Distributed Systems</title><link>https://ivaldo.eti.br/blog/mediator-design-pattern-simplifying-interactions-in-distributed-systems/</link><pubDate>Sun, 09 Jul 2023 14:35:51 -0300</pubDate><guid>https://ivaldo.eti.br/blog/mediator-design-pattern-simplifying-interactions-in-distributed-systems/</guid><description>&lt;h2 id="introduction"&gt;Introduction&lt;/h2&gt;
&lt;p&gt;In recent years, computing has witnessed a significant shift toward distributed systems. The need for scalability, availability, and flexibility has driven the development of complex architectures where different software components interact to provide comprehensive functionalities. However, as distributed systems evolve, an inherent challenge arises: the complexity of interactions between these components.&lt;/p&gt;
&lt;p&gt;Communication between distinct parts of a distributed system is essential but often results in increased coupling between components. As new modules are added or modified, direct interactions can lead to a web of dependencies, making system maintenance and expansion an arduous task. This is where the Mediator Design Pattern comes into play.&lt;/p&gt;</description></item><item><title>The Art of Problem Solving Methodology Learning</title><link>https://ivaldo.eti.br/blog/the-art-of-problem-solving-methodology-learning/</link><pubDate>Sun, 01 Jan 2023 14:35:51 -0300</pubDate><guid>https://ivaldo.eti.br/blog/the-art-of-problem-solving-methodology-learning/</guid><description>&lt;h2 id="introduction"&gt;Introduction&lt;/h2&gt;
&lt;p&gt;In our journey through life, we face a multitude of problems, ranging from daily small obstacles to complex challenges that require deep reflection and collaboration. Whether in the realm of technology, sciences, arts, or everyday life, the ability to approach and solve problems is universally valuable.&lt;/p&gt;
&lt;p&gt;However, while problems are a constant, solutions are not. And the key to finding these solutions often lies not in the answer itself but in the approach we take. Methodology—or the structure and processes we apply in the search for solutions—plays a crucial role in determining not only whether we solve a problem but also how efficiently and effectively we do so.&lt;/p&gt;</description></item><item><title>Automating API Client Generation: An Efficient Approach with GitHub Actions and OpenAPI</title><link>https://ivaldo.eti.br/blog/api-client-automation-an-efficient-approach-with-github-actions-and-openapi/</link><pubDate>Wed, 26 Oct 2022 16:36:23 -0300</pubDate><guid>https://ivaldo.eti.br/blog/api-client-automation-an-efficient-approach-with-github-actions-and-openapi/</guid><description>&lt;h2 id="automating-api-client-generation-improve-your-productivity-with-github-actions"&gt;Automating API Client Generation: Improve Your Productivity with GitHub Actions&lt;/h2&gt;
&lt;p&gt;In software development, continuous integration and continuous delivery (CI/CD) are essential for increasing productivity and minimizing errors. A common challenge is ensuring that API clients (components that consume APIs) are always up-to-date with API changes. Lack of synchronization can lead to failures and inconsistencies in the system. To address this problem, an effective strategy is to automate the generation of API clients whenever a new version of the API is released. This article discusses how you can use GitHub Actions to automatically generate and update API clients, focusing on tools like NSwag and Kiota, to ensure that API clients are always in sync with the latest version of the API.&lt;/p&gt;</description></item><item><title>Simplifying the API Gateway: From Swagger to Ocelot in One Step</title><link>https://ivaldo.eti.br/blog/simplifying-the-api-gateway-from-swagger-to-ocelot-in-one-step/</link><pubDate>Fri, 26 Aug 2022 16:36:23 -0300</pubDate><guid>https://ivaldo.eti.br/blog/simplifying-the-api-gateway-from-swagger-to-ocelot-in-one-step/</guid><description>&lt;h2 id="introduction"&gt;Introduction&lt;/h2&gt;
&lt;p&gt;In a scenario where microservices are increasingly adopted, managing APIs becomes a critical task. In this context, solutions like Ocelot emerge as powerful options to serve as API gateways. However, manually configuring &lt;code&gt;ocelot.json&lt;/code&gt; files can be cumbersome and error-prone. This is where our project comes in: the Swagger to Ocelot Converter.&lt;/p&gt;
&lt;h2 id="the-problem"&gt;The Problem&lt;/h2&gt;
&lt;p&gt;Anyone who has worked with Ocelot knows that the API gateway configuration is done through an &lt;code&gt;ocelot.json&lt;/code&gt; file. While flexible and powerful, manually filling out this file can be time-consuming, especially in projects with multiple APIs and routes.&lt;/p&gt;</description></item></channel></rss>