API en C# : REST, GraphQL et gRPC — comment choisir sans regretter

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Introduction : Les API, ce n'est pas effrayant, c'est très pratique

\n\n

Imaginez que vous commandez une pizza. Vous appelez le restaurant, dictez l'adresse et la composition — et 30 minutes plus tard, le livreur est à votre porte. Les API en programmation fonctionnent exactement de la même manière : c'est cet « appel téléphonique » grâce auquel un programme communique avec un autre. Sauf qu'au lieu de la voix, ce sont des requêtes HTTP, et au lieu de la pizza, ce sont des données.

\n\n

Dans le monde du développement C#, les API sont la base. Tout projet moderne, qu'il s'agisse d'une application web, d'un backend mobile ou d'un service d'entreprise, « sollicite » d'une manière ou d'une autre des services externes. Et là se pose la question principale : quel protocole choisir ? REST, GraphQL ou gRPC ? Chacun est bon à sa manière, mais chacun pour sa tâche spécifique.

\n\n

Dans cet article, nous allons analyser le travail avec les API en C# sur des exemples concrets. Vous apprendrez à envoyer des requêtes HTTP, à faire collaborer C# avec GraphQL et gRPC, et surtout — vous comprendrez quand utiliser quoi. C'est parti !

\n\n
\n\n

1. API REST en C# : un classique qui ne se démode pas

\n\n

REST (Representational State Transfer) est un style architectural qui reste la norme de facto depuis de nombreuses années. Simple, compréhensible, il fonctionne sur HTTP. Si vous avez déjà écrit du code qui envoie des requêtes GET ou POST — vous avez déjà travaillé avec REST.

\n\n

Comment envoyer des requêtes REST en C#

\n\n

En C#, pour travailler avec REST, on utilise le plus souvent la classe HttpClient. Elle est intégrée à .NET et sait tout faire : des simples requêtes GET aux requêtes POST complexes avec un corps JSON.

\n\n

Voici à quoi ressemble une requête typique vers une API REST en C# :

\n\n
using System;\nusing System.Net.Http;\nusing System.Threading.Tasks;\n\nclass Program\n{\n    static async Task Main(string[] args)\n    {\n        using HttpClient client = new HttpClient();\n        client.BaseAddress = new Uri("https://api.example.com/");\n        \n        HttpResponseMessage response = await client.GetAsync("users/1");\n        if (response.IsSuccessStatusCode)\n        {\n            string json = await response.Content.ReadAsStringAsync();\n            Console.WriteLine(json);\n        }\n    }\n}\n
\n\n

Court et clair. HttpClient vit longtemps, donc on le crée généralement une fois et on le réutilise (dans les projets réels — via un conteneur DI).

\n\n

Quand REST est votre choix

\n
    \n
  • Vous écrivez une API publique pour le web ou les applications mobiles.
  • \n
  • Les clients sont des navigateurs, des appareils mobiles, des IoT.
  • \n
  • Vous avez besoin de simplicité et de mise en cache au niveau HTTP.
  • \n
\n\n

Inconvénients de REST : redondance des données (souvent, plus de données arrivent que nécessaire) et le problème des requêtes N+1, où pour obtenir des données liées, vous devez effectuer plusieurs appels.

\n\n
\n\n

2. GraphQL en C# : ne demandez que ce dont vous avez besoin

\n\n

GraphQL est un langage de requête créé par Facebook. Sa principale caractéristique : le client décide lui-même des champs dont il a besoin. Pas d'informations superflues, pas de dizaines de points de terminaison — une seule requête, une seule réponse.

\n\n

Envoyer une requête GraphQL depuis C#

\n\n

Pour travailler avec GraphQL en C#, vous pouvez utiliser HttpClient directement, mais il est plus pratique d'utiliser la bibliothèque GraphQL.Client (package NuGet GraphQL.Client).

\n\n

Exemple de requête vers une API GraphQL :

\n\n
using System;\nusing System.Threading.Tasks;\nusing GraphQL;\nusing GraphQL.Client.Http;\nusing GraphQL.Client.Serializer.Newtonsoft;\n\nclass Program\n{\n    static async Task Main(string[] args)\n    {\n        using var client = new GraphQLHttpClient("https://api.example.com/graphql", new NewtonsoftJsonSerializer());\n\n        var request = new GraphQLRequest\n        {\n            Query = @"\n            {\n                user(id: 1) {\n                    name\n                    email\n                    posts {\n                        title\n                    }\n                }\n            }"\n        };\n\n        var response = await client.SendQueryAsync<dynamic                

Blogs

Book Recommendations