Apprenez à utiliser Ocelot dans ASP.NET Core API comme passerelle API.
Un Passerelle API est un serveur de frontend pour les API, gérant les demandes d’API entrantes et les acheminant vers les services backend appropriés. Il joue un rôle crucial dans l’architecture microservice en offrant un seul point d’entrée au système.
Certaines fonctionnalités principales d’une passerelle API sont:
- Routage
- Authentification
- Autorisation
- Demander la composition
- Mise en cache
- Équilibrage de charge
- Tolérance aux défauts
- Découverte de service
Il existe de nombreux choix populaires pour la passerelle API dans les microservices basés sur ASP.NET, tels que Ocelot, Yarp et autres.
Ce billet de blog explique Comment Ocelot peut être une passerelle API dans ASP.NET Core API.
Configuration des API
Il y a deux API. La première API a un ProductController
avec deux points de terminaison.
[Route("api/products")]
[ApiController]
public class ProductController : ControllerBase
{
static List<Product> Products = new List<Product>()
{
new Product { Id = 1, Name = "Product 1", Price = 10.0m },
new Product { Id = 2, Name = "Product 2", Price = 20.0m },
new Product { Id = 3, Name = "Product 3", Price = 30.0m }
};
[HttpGet]
public async Task<ActionResult<IEnumerable<Product>>> Get()
{
var products = await GetProductsAsync();
await Task.Delay(500);
return Ok(products);
}
[HttpPost]
public async Task<ActionResult<Product>> Post(Product product)
{
Products.Add(product);
await Task.Delay(500);
return CreatedAtAction(nameof(Get), new { id = product.Id }, product);
}
private Task<List<Product>> GetProductsAsync()
{
return Task.FromResult(Products);
}
}
Ces points de terminaison sont disponibles à http: // localhost: 5047 / api / produits Pour les opérations Get et Post.
La deuxième API a InvoiceController
avec un seul point final.
[Route("api/invoice")]
[ApiController]
public class InvoiceController : ControllerBase
{
[HttpGet]
public async Task<ActionResult<IEnumerable<string>>> Get()
{
await Task.Delay(100);
return new string[] { "Dhananjay", "Nidhish", "Vijay","Nazim","Alpesh" };
}
}
Le point de terminaison est disponible à http: // localhost: 5162 / api / facture pour l’opération Get.
Configuration de la passerelle API
Nous allons configurer la passerelle API à l’aide d’Ocelot. Pour cela, suivons ces étapes:
- Créez un projet API.
- N’ajoutez aucun contrôleur à cela.
Tout d’abord, ajoutez le package Ocelot de Nuget au projet.
Après avoir ajouté le package Ocelot, ajoutez un fichier nommé ocelot.json au projet API Gateway.
ocelot.json
{
"GlobalConfiguration": {
"BaseUrl": "http://localhost:5001"
},
"Routes": [
{
"UpstreamPathTemplate": "/gateway/products",
"UpstreamHttpMethod": [ "GET" ],
"DownstreamPathTemplate": "/api/products",
"DownstreamScheme": "http",
"DownstreamHostAndPorts": [
{
"Host": "localhost",
"Port": 5047
}
]
},
{
"UpstreamPathTemplate": "/gateway/invoice",
"UpstreamHttpMethod": [ "GET" ],
"DownstreamPathTemplate": "/api/invoice",
"DownstreamScheme": "http",
"DownstreamHostAndPorts": [
{
"Host": "localhost",
"Port": 5162
}
]
}
]
}
Explorons chaque configuration dans le fichier ci-dessus.
- Dans le
GlobalConfiguration
Section, laBaseUrl
est l’URL de la passerelle API. Les clients API interagiront avec cette URL. Lors de l’exécution du projet API Gateway, il devrait fonctionner sur cette URL de base. - La section Routes contient diverses routes dans le tableau.
- Les routes ont des sections en amont et en aval.
- La section en amont représente la passerelle API.
- La section en aval représente les API.
La configuration ci-dessus peut être représentée avec ce diagramme:
Par la configuration ci-dessus, lorsque vous appuyez sur le point de terminaison, il sera redirigé vers l’API Endpoint http: // localhost: 5047 / api / produits.
Suivant dans le programme.cs, au démarrage de l’application Gateway, ajoutez la configuration ci-dessous:
builder.Configuration.AddJsonFile("ocelot.json", optional: false, reloadOnChange: true);
builder.Services.AddOcelot(builder.Configuration);
app.UseOcelot();
Maintenant, exécutez l’application API Gateway et vous devriez pouvoir naviguer dans les API privées. Ocelot prend en charge d’autres verbes HTTP en plus de Get. Un itinéraire pour les opérations de poste peut être ajouté, comme indiqué ci-dessous.
{
"UpstreamPathTemplate": "/gateway/products",
"UpstreamHttpMethod": [ "POST" ],
"DownstreamPathTemplate": "/api/products",
"DownstreamScheme": "http",
"DownstreamHostAndPorts": [
{
"Host": "localhost",
"Port": 5047
}
]
},
À l’aide de configurations de base, vous devriez être en mesure de lire l’objet HttpContext, les en-têtes et les objets de demande dans l’API privé.
J’espère que vous trouverez cet article de blog utile. Merci de l’avoir lu.
Source link