Apizr has been updated to v6.0, still getting all the things ready to use for web API client requests, with the more resilience we can, but without the boilerplate. It relies on Refit, pushing things further by adding a lot more capabilities like fault handling, connectivity check, cache management, authentication handling, log tracing, priority management, file transfer management and so on… This new v6.0 release brings many enhancements, new features and some fixes, so let’s take a look!
The Lab
The goal of Apizr v5.0 is still the same: getting all the things ready to use for web API client requests, with the more resiliency we can, but without the boilerplate. It’s still based on Refit, so what we can do with Refit could still be done with Apizr too. But Apizr push it further by adding more and more capabilities (retry, connectivity, cache, auth, log, priority, transfer…). All the slices of the cake I needed until now to make my projects tasty, well, resilient actually 🙂 Let’s take a look!
The goal of Apizr v4.0 is still to get all ready to use for web api requesting, with the more resiliency we can, but without the boilerplate. It’s based on Refit, so what we can do with Refit could be done with Apizr too. But Apizr has more to offer, with at least: Working offline with cache management Handling errors with retry pattern and global catching Handling request priority Checking connectivity Tracing http traffic Handling authentication Mapping model with DTO Using Mediator pattern Using Optional pattern Anyway, this post is about changes only, but we published a series about Apizr already which you can find here. If you want to know how to get started or how to configure it, please read the brand new documentation: Anytime, feel free to browse code and samples too: LIBRAIRIES Apizr features are still provided by several NuGet packages, depending on what you need,…
This article is part of a series called Apizr: Apizr – Part 1: A Refit based web api client, but resilient Apizr – Part 2: Resilient core features Apizr – Part 3: More advanced features Apizr – Part 4: Requesting with Mediator pattern Apizr – Part 5: Requesting with Optional pattern (this one) OPTIONAL PATTERN Apizr offers an integration with OptionalAsync, following the Optional pattern, for those of you guys using the extended approach with MediatR integration activated. OptionalAsync offers a strongly typed alternative to null values that lets you: Avoid those pesky null-reference exceptions Signal intent and model your data more explicitly Cut down on manual null checks and focus on your domain It allows you to chain Task<Option<T>> and Task<Option<T, TException>> without having to use await As there will be a dedicated Playground blog post about it, I won’t discuss further the what and why here. SETUP In order to…
This article is part of a series called Apizr: Apizr – Part 1: A Refit based web api client, but resilient Apizr – Part 2: Resilient core features Apizr – Part 3: More advanced features Apizr – Part 4: Requesting with Mediator pattern (this one) Apizr – Part 5: Requesting with Optional pattern MEDIATOR PATTERN Apizr offers an integration with MediatR, following the Mediator pattern, for those of you guys using the extended approach. Mediator pattern ensures to keep all the thing as loosely coupled as we can between our ViewModel/ViewControler and our Data Access Layer. As everything should be loosely coupled between you Views and your ViewModels (MVVM) or ViewControlers (MVC) thanks to data binding, MediatR offers you to keep it all loosely coupled between your VM/VC and your DAL to. Please read the official documentation to know more about MediatR. As there will be a dedicated Playground…
This article is part of a series called Apizr: Apizr – Part 1: A Refit based web api client, but resilient Apizr – Part 2: Resilient core features Apizr – Part 3: More advanced features (this one) Apizr – Part 4: Requesting with Mediator pattern Apizr – Part 5: Requesting with Optional pattern After Part 1 with general presentation and Part 2 with core features walk-through, this time we’ll go deeper into some advanced scenarios. ADVANCED CORE FEATURES The options builder provide you some advanced core features. BASE ADDRESS The WebApi attribute let you define the base address with a simple attribute decoration over your api interface. But sometime, we need to change the endpoint, targeting dev, test or production server uri. To deal with it, the builder expose a method called WithBaseAddress to let you set it by code, like: // For both ways options.WithBaseAddress(Constants.MyConfigurationAwareAddress) // Or for…
This article is part of a series called Apizr: Apizr – Part 1: A Refit based web api client, but resilient Apizr – Part 2: Resilient core features (this one) Apizr – Part 3: More advanced features Apizr – Part 4: Requesting with Mediator pattern Apizr – Part 5: Requesting with Optional pattern In Part 1, we’ve seen basic requesting features offered by Apizr. Some classic and well known request designs if you get some Refit skills, plus some built-in CRUD exclusive apis. In this Part 2, we’ll go through what exactly Apizr has to offer beyond its requesting main features, to reach our goal of something easily resilient. Here are some of its core features: Connectivity checking Authenticating Policing Prioritizing Caching Mapping Logging OPTIONSBUILDER While initializing, Apizr provides a fluent way to configure many things with something called OptionsBuilder. Each initialization approach comes with its OptionsBuilder optional parameter,…
This article is part of a series called Apizr: Apizr – Part 1: A Refit based web api client, but resilient (this one) Apizr – Part 2: Resilient core features Apizr – Part 3: More advanced features Apizr – Part 4: Requesting with Mediator pattern Apizr – Part 5: Requesting with Optional pattern Into this Apizr blog post series, I’ll try to demonstrate all features offered by the Apizr library, starting from core and going further with integration packages. Apizr project was motivated by this 2015 famous blog post about resilient networking with Xamarin. You should read it if you didn’t yet, because it’s old but still valid. My focus with Apizr was to address at least everything explained into this old article, which mean: Easy access to restful services Work offline with cache management Handle errors with retry pattern and global catching Handle request priority Check connectivity Fast…
This article is part of a series called Playground: Playground – Part 1: A Xamarin.Forms Microsoft.Extended journey Playground – Part 2: Settings with Options pattern Playground – Part 3: Catch it, trace it, log it and upload it (this one) In the previous article, we implemented our settings layer. In this one, we’ll add some logging capabilities to our Playground. As Shiny comes with its own logging system built in, I was wondering if official Microsoft.Extensions.Logging packages could add some more value or not. Actually, not so much as it adds a lot more package dependencies for almost the same job offered by Shiny.Core’s logging system. Also, if Shiny’s ILogger interface offers the opportunity to save some more key/value parameters while tracking events and exceptions, it’s not available into the extension one AFAIK. So, if we’ll use a built-in feature, why this article? Because I want more 🙂 First of…
This article is part of a series called Playground: Playground – Part 1: A Xamarin.Forms Microsoft.Extended journey Playground – Part 2: Settings with Options pattern (this one) Playground – Part 3: Catch it, trace it, log it and upload it In the previous article, I created an empty project with Xamarin.Forms, Prism, Shiny and ReactiveUI all wired together. Now, one of the first thing we do need is managing settings. As we get access to IServiceCollection in our Xamarin.Forms app thanks to Prism and Shiny, the door is wide open to use any extensions available for it. One of those are Microsoft.Extensions.Options and Microsoft.Extensions.Configuration. We’ll try to find out how it could be useful for settings management.