We replaced Redis with Valkey with no production downtime and no application changes, just a few lines of Terraform. Here is why an uneventful infrastructure migration is often the best possible outcome.
At Wehkamp Tech Hub, we replaced a physical planning wall with a digital roadmap tool. Here’s how we built a read-only Jira-powered SPA that generates HD slides, visualizes team bottlenecks, and keeps leadership informed – without giving everyone access to Jira.
Ever since I wrote about the “Is One Of” and “Is Not One Of” validation attributes, I’ve wondered if there is anything better for class validation. I mean: validating individual properties is fine, but usually the more interesting stuff is the validation of a combination of members.
What I love about data annotations and validation attributes, is that the validation rules are defined very close to the class: when you open it up, you can view all the rules. The ApiController will even automatically do model validation. This is great, but I like some defense in depth; I want to be able to use those validations in my business service as well. I should not have to trust input. Let’s explore how we can make that happen.
After implementing Kiota clients with resilience, I felt the need to spend some time on unit testing them. The Kiota docs on unit testing uses NSubstitute to override the response of the adapter. After some testing (pun intended), I did not feel satisfied with the results; we should be able to use the “normal” way of testing an HttpClient, right? In this blog, I’ll show how to use the RichardSzalay.MockHttp package together with Kiota.
My new years resolution is to generate HTTP clients for services with an Open API spec. Microsoft released Kiota, a tool that generates C# classes from specs. In this blog, I’ll be looking at dependency injection and resilience.
I was working on a project that needed to call multiple webservices, so I wanted to add resilience. Luckily, Microsoft has created a HTTP Resilience package as a wrapper for Polly, adding sensible defaults. In this blog I’ll explore how easy it is to add the new package to our services, including deferring to configuration.