Refit für C# (.NET): Type-safe REST-Client
1. Was ist Refit und warum braucht man es?
Refit ist eine Open-Source-Bibliothek für die .NET-Plattform, die automatisch Implementierungen von HTTP-Clients auf Basis von vom Entwickler definierten Interfaces generiert. Sie verwandelt ein normales C#-Interface in einen vollwertigen REST-Client und erspart dir die manuelle Arbeit mit HTTP-Anfragen, JSON-Serialisierung/Deserialisierung und Fehlerbehandlung.
Das Hauptproblem, das Refit löst, ist die Vermeidung von Code-Duplikaten bei der Arbeit mit REST-APIs. Anstatt für jeden Endpunkt eine separate Methode mit HttpClient zu schreiben, Header zu setzen und Antworten zu verarbeiten, deklarierst du einfach ein Interface mit Methoden, die mit Refit-Attributen versehen sind. Die Bibliothek generiert die Implementierung automatisch – entweder mit HttpClientFactory (empfohlen) oder direkt mit HttpClient.
Refit ist besonders nützlich bei der Entwicklung von Microservices, der Integration von Drittanbieter-APIs (GitHub, Stripe, Telegram usw.) und in allen Projekten, die eine typsichere Kommunikation mit HTTP-Diensten erfordern. Es unterstützt alle wichtigen HTTP-Methoden (GET, POST, PUT, DELETE, PATCH), Header, Query-Parameter, Request-Body, Multipart-Formulare und Dateien.
2. Installation
Refit wird über NuGet verteilt. Verwende einen der folgenden Befehle zur Installation:
# Über die .NET CLI
dotnet add package Refit
# Über die Package Manager Console (Visual Studio)
Install-Package Refit
# Oder über den NuGet Package Manager in der IDE
Für asynchrone Methoden und die Integration mit ASP.NET Core wird außerdem das Paket Refit.HttpClientFactory empfohlen:
dotnet add package Refit.HttpClientFactory
Wenn du System.Text.Json verwendest (Standard in .NET Core 3.1+), sind keine weiteren Pakete nötig. Für Newtonsoft.Json installiere Refit.Newtonsoft.Json.
3. Schnellstart – Minimales Arbeitsbeispiel
Wir erstellen einen einfachen Client, um Daten von JSONPlaceholder (einer Test-REST-API) abzurufen.
Schritt 1: Definiere ein Datenmodell:
public class Todo
{
public int Id { get; set; }
public int UserId { get; set; }
public string Title { get; set; }
public bool Completed { get; set; }
}
Schritt 2: Erstelle ein Interface mit Refit-Attributen:
using Refit;
public interface ITodoApi
{
[Get("/todos/{id}")]
Task<Todo> GetTodoAsync(int id);
[Get("/todos")]
Task<List<Todo>> GetAllTodosAsync();
}
Schritt 3: Verwende Refit, um den Client zu erstellen:
using Refit;
class Program
{
static async Task Main(string[] args)
{
// Client direkt erstellen (ohne DI)
var todoApi = RestService.For<ITodoApi>("https://jsonplaceholder.typicode.com");
// Ein einzelnes Todo abrufen
var todo = await todoApi.GetTodoAsync(1);
Console.WriteLine($"Todo: {todo.Title}, Completed: {todo.Completed}");
// Alle Todos abrufen
var todos = await todoApi.GetAllTodosAsync();
Console.WriteLine($"Total todos: {todos.Count}");
}
}
Dieses Beispiel zeigt die grundlegende Funktionsweise: Du beschreibst ein Interface, und Refit generiert die Implementierung, die HTTP-Anfragen ausführt und Antworten deserialisiert.
4. Wichtige Methoden/Funktionen/Klassen
4.1. RestService.For<T>()
Signatur: public static T For<T>
Auch in der Bibliothek
GraphQL in C++: Die Bibliothek cppgraphqlgen für moderne APIs
Kryptographie in PHP: Verschlüsselung und Hashing (praktischer Leitfaden)
Überwachung von C# (.NET)-Anwendungen mit AppMetrics
Winston für JavaScript (Node.js): Vollständige Anleitung mit Beispielen
Behat PHP: Komplettleitfaden mit Beispielen & Tipps