Refit for C# (.NET): Type-safe REST क्लाइंट
1. यह क्या है और क्यों ज़रूरी है
Refit एक ओपन-सोर्स लाइब्रेरी है जो .NET प्लेटफ़ॉर्म के लिए है। यह डेवलपर द्वारा बनाए गए इंटरफ़ेस के आधार पर स्वचालित रूप से HTTP क्लाइंट का कार्यान्वयन (implementation) जनरेट करती है। यह एक सामान्य C# इंटरफ़ेस को पूर्ण REST क्लाइंट में बदल देती है, जिससे HTTP अनुरोध, JSON सीरियलाइज़ेशन/डीसीरियलाइज़ेशन और एरर हैंडलिंग के लिए मैन्युअल रूप से कोड लिखने की ज़रूरत नहीं रहती।
Refit जिस मुख्य समस्या का समाधान करती है, वह है REST API के साथ काम करते समय कोड की पुनरावृत्ति (duplication) से बचना। हर एंडपॉइंट के लिए अलग-अलग HttpClient मेथड बनाने, हेडर सेट करने, रिस्पॉन्स और एक्सेप्शन को हैंडल करने के बजाय, डेवलपर सिर्फ़ Refit एट्रीब्यूट वाला एक इंटरफ़ेस घोषित करता है। लाइब्रेरी खुद ही HttpClientFactory (अनुशंसित तरीका) या सीधे HttpClient का उपयोग करके कार्यान्वयन जनरेट करती है।
Refit विशेष रूप से माइक्रोसर्विस आर्किटेक्चर, तीसरे पक्ष के API (GitHub, Stripe, Telegram आदि) के साथ एकीकरण, और ऐसे किसी भी प्रोजेक्ट में उपयोगी है जहाँ HTTP सेवाओं के साथ टाइप-सेफ (type-safe) इंटरैक्शन की आवश्यकता होती है। यह सभी मुख्य HTTP मेथड (GET, POST, PUT, DELETE, PATCH), हेडर, क्वेरी-पैरामीटर, अनुरोध बॉडी, मल्टीपार्ट फ़ॉर्म और फ़ाइलों के साथ काम करने का समर्थन करती है।
2. इंस्टॉलेशन
Refit NuGet के माध्यम से वितरित की जाती है। इंस्टॉल करने के लिए नीचे दिए गए कमांड में से किसी एक का उपयोग करें:
# .NET CLI के माध्यम से
dotnet add package Refit
# Package Manager Console (Visual Studio) के माध्यम से
Install-Package Refit
# या IDE में NuGet Package Manager के माध्यम से
एसिंक्रोनस मेथड और ASP.NET Core के साथ एकीकरण के लिए, Refit.HttpClientFactory पैकेज भी इंस्टॉल करने की अनुशंसा की जाती है:
dotnet add package Refit.HttpClientFactory
यदि आप System.Text.Json (डिफ़ॉल्ट रूप से .NET Core 3.1+ में) का उपयोग कर रहे हैं, तो किसी अतिरिक्त पैकेज की आवश्यकता नहीं है। Newtonsoft.Json के लिए Refit.Newtonsoft.Json इंस्टॉल करें।
3. त्वरित शुरुआत — न्यूनतम कार्यशील उदाहरण
JSONPlaceholder (टेस्ट REST API) से डेटा प्राप्त करने के लिए एक सरल क्लाइंट बनाते हैं।
चरण 1: डेटा मॉडल परिभाषित करें:
public class Todo
{
public int Id { get; set; }
public int UserId { get; set; }
public string Title { get; set; }
public bool Completed { get; set; }
}
चरण 2: Refit एट्रीब्यूट के साथ इंटरफ़ेस बनाएँ:
using Refit;
public interface ITodoApi
{
[Get("/todos/{id}")]
Task<Todo> GetTodoAsync(int id);
[Get("/todos")]
Task<List<Todo>> GetAllTodosAsync();
}
चरण 3: क्लाइंट बनाने के लिए Refit का उपयोग करें:
using Refit;
class Program
{
static async Task Main(string[] args)
{
// सीधे क्लाइंट बनाएँ (DI के बिना)
var todoApi = RestService.For<ITodoApi>("https://jsonplaceholder.typicode.com");
// एक Todo प्राप्त करें
var todo = await todoApi.GetTodoAsync(1);
Console.WriteLine($"Todo: {todo.Title}, Completed: {todo.Completed}");
// सभी Todos प्राप्त करें
var todos = await todoApi.GetAllTodosAsync();
Console.WriteLine($"कुल todos: {todos.Count}");
}
}
यह उदाहरण मूल तंत्र को दर्शाता है: आप इंटरफ़ेस का वर्णन करते हैं, और Refit एक कार्यान्वयन जनरेट करता है जो HTTP अनुरोध करता है और रिस्पॉन्स को डीसीरियलाइज़ करता है।
4. मुख्य तरीके/फ़ंक्शन/क्लास
4.1. RestService.For<T>()
सिग्नेचर: public static T For<T>