۳۰ شهریور ۱۴۰۳

Techboy

اخبار و اطلاعات روز تکنولوژی

از logging و DI در حداقل APIهای ASP.NET Core 6 استفاده کنید

نحوه پیاده سازی لاگ، خواندن از سیستم پیکربندی و استفاده از تزریق وابستگی در حداقل APIها در ASP.NET Core 6.

نحوه پیاده سازی لاگ، خواندن از سیستم پیکربندی و استفاده از تزریق وابستگی در حداقل APIها در ASP.NET Core 6.

ASP.NET Core 6 یک مدل میزبانی ساده را معرفی می کند که می تواند برای پیاده سازی API های سبک وزن با حداقل وابستگی ها استفاده شود. این حداقل APIها به طور چشمگیری کد دیگ بخاری را که باید بنویسید تا برنامه های ASP.NET Core 6 خود را راه اندازی و اجرا کنید، کاهش می دهند.

ما در مقاله قبلی درباره نحوه شروع با حداقل APIها بحث کردیم. در این مقاله، جنبه‌های پیشرفته‌تر APIهای حداقلی از جمله پیاده‌سازی گزارش‌گیری، خواندن از سیستم پیکربندی، و استفاده از تزریق وابستگی را بررسی خواهیم کرد.

برای کار با نمونه کدهای ارائه شده در این مقاله، باید Visual Studio 2022 را در سیستم خود نصب کنید. اگر قبلاً نسخه‌ای ندارید، می‌توانید Visual Studio 2022 را از اینجا بارگیری کنید.

یک پروژه ASP.NET Core minimal web API در Visual Studio 2022 ایجاد کنید

ابتدا، اجازه دهید یک پروژه ASP.NET Core در Visual Studio 2022 ایجاد کنیم. با دنبال کردن این مراحل، یک پروژه ASP.NET Core Web API 6 جدید در Visual Studio 2022 ایجاد می کنیم:

  1. Visual Studio 2022 IDE را راه اندازی کنید.
  2. روی “ایجاد پروژه جدید” کلیک کنید.
  3. در پنجره “ایجاد پروژه جدید”، “ASP.NET Core Web API” را از لیست الگوهای نمایش داده شده انتخاب کنید.
  4. بعدی را کلیک کنید.
  5. در پنجره “پیکربندی پروژه جدید خود”، نام و مکان پروژه جدید را مشخص کنید.
  6. به صورت اختیاری، بسته به تنظیمات برگزیده خود، کادر انتخاب «قرار دادن راه حل و پروژه در یک فهرست راهنمای» را علامت بزنید.
  7. بعدی را کلیک کنید.
  8. در پنجره «اطلاعات اضافی» که در ادامه نشان داده شده است، علامت کادری را که می‌گوید «استفاده از کنترل‌کننده‌ها…» را بردارید، زیرا در این مثال از حداقل API استفاده خواهیم کرد. “نوع احراز هویت” را به عنوان “هیچ” (پیش‌فرض) بگذارید.
  9. مطمئن شوید که چک باکس‌های «Enable Docker»، «Configure for HTTPS» و «Enable Open API Support» علامت نخورده باشند زیرا ما در اینجا از هیچ یک از این ویژگی‌ها استفاده نخواهیم کرد.
  10. روی ایجاد کلیک کنید.
Nutanix برنامه شریک هوش مصنوعی، GPT-in-a-Box 2.0 را معرفی کرد

این یک پروژه جدید ASP.NET Core 6 Web API در Visual Studio 2022 ایجاد می کند. ما از این پروژه برای کار با حداقل API در بخش های بعدی این مقاله استفاده خواهیم کرد.

یک API حداقل وب را اجرا کنید

می توانید حداقل API خود را فقط با چند خط کد کار کنید:

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
app.MapGet("/", () => "This is an example of a minimal API");
app.Run();

چند پورت را برای حداقل وب API پیکربندی کنید

قطعه کد زیر نشان می دهد که چگونه می توانید حداقل API خود را برای اجرا در یک پورت خاص پیکربندی کنید.

var app = WebApplication.Create(args);
app.MapGet("/", () => "Hello World!");
app.Run("http://localhost:5178");

هنگامی که برنامه را اجرا می‌کنید و به این URL می‌گردید، باید “Hello World!” را ببینید. پیام در مرورگر وب شما نمایش داده می شود.

می‌توانید با افزودن نشانی‌های اینترنتی همانطور که در قطعه کد زیر نشان داده شده است از چندین پورت استفاده کنید.

app.Urls.Add("http://localhost:5178");
app.Urls.Add("http://localhost:5179");

در این مورد، اگر به هر یک از این نقاط پایانی مراجعه کنید، همان “Hello World!” پیام نمایش داده خواهد شد.

حتی می‌توانید پورت را از محیط بخوانید همانطور که در قطعه کد زیر نشان داده شده است.

var app = WebApplication.Create(args);
var port = Environment.GetEnvironmentVariable("PORT") ?? "5155";
app.MapGet("/", () => "Hello World!");
app.Run($"http://localhost:{port}");

از ورود به سیستم در یک وب API حداقلی استفاده کنید

همچنین می‌توانید از لاگین کردن در حداقل APIهای خود استفاده کنید. در اینجا نحوه ثبت اطلاعات به کنسول با استفاده از Serilog آمده است:

var logger = new LoggerConfiguration()
    .WriteTo.Console()
    .CreateLogger();

می‌توانید از Serilog برای ایجاد گزارش‌هایی استفاده کنید که همچنان برنامه را راه‌اندازی مجدد می‌کند. Serilog از ورود به پایگاه داده، فایل، ذخیره سازی ابری و سایر اهداف پشتیبانی می کند. قطعه کد زیر نحوه استفاده از Serilog را در حداقل API ها نشان می دهد.

var builder = WebApplication.CreateBuilder(args);
Log.Logger = new LoggerConfiguration()
    .MinimumLevel.Debug()
    .WriteTo.File("logs.txt", rollingInterval: RollingInterval.Day)
    .CreateLogger();

قطعه کد زیر نشان می دهد که چگونه می توانید از ورود به سیستم در حداقل API خود استفاده کنید.

app.MapGet("/", (ILoggerFactory loggerFactory) => {
    var logger = loggerFactory.CreateLogger("Start");
    logger.LogInformation("Starting...");
    return "Logging at work!";
});

خواندن از سیستم پیکربندی در حداقل API

همچنین می‌توانید از سیستم پیکربندی در حداقل API خود بخوانید. قطعه کد زیر نشان می دهد که چگونه می توان به این امر دست یافت.

var app = WebApplication.Create(args);
var message = app.Configuration["TextMessage"] ?? "This is a default message.";
app.MapGet("/", () => message);
app.Run();

از تزریق وابستگی در حداقل وب API استفاده کنید

اگر می‌خواهید از یک نمونه HttpClient برای اتصال به یک منبع راه دور استفاده کنید، می‌توانید از تزریق وابستگی همانطور که در قطعه کد زیر نشان داده شده است استفاده کنید.

app.MapGet("/", (IHttpClientFactory httpClientFactory) => "Inside HttpGet method");

به یاد داشته باشید که HttpClient را با استفاده از کد زیر به ظرف اضافه کنید.

builder.Services.AddHttpClient();

شما همچنین می توانید از مزایای تزریق وابستگی در روش HttpPost استفاده کنید. قطعه کد زیر نشان می دهد که چگونه می توانید یک نمونه از IHttpClientFactory را به عنوان پارامتر به روش HttpPost خود منتقل کنید.

app.MapPost("/", (IHttpClientFactory httpClientFactory) =>
{
    var client = httpClientFactory.CreateClient();
    return Results.Ok();
});

یک کلاس سفارشی را در یک API حداقل وب تزریق کنید

همچنین می‌توانید نمونه‌ای از یک کلاس سفارشی را در حداقل API خود تزریق کنید. برای نشان دادن این موضوع، اجازه دهید دو نوع را پیاده سازی کنیم: رابط IAuthorRepository و کلاس AuthorRepository. ما از این انواع برای اجرای تزریق وابستگی در حداقل API خود استفاده خواهیم کرد.

نحوه کار با فیلترهای نقطه پایانی در ASP.NET Core 7

یک فایل جدید به نام IAuthorRepository.cs ایجاد کنید و کد زیر را وارد کنید:

    public interface IAuthorRepository
    {
        public List<Author> GetAuthors();
        public Author GetAuthor(int id);
    }

کلاس AuthorRepository رابط IAuthorRepository را مطابق شکل زیر پیاده سازی می کند.

 public class AuthorRepository: IAuthorRepository
    {
        private readonly List<Author> _authors;
        public AuthorRepository()
        {
            _authors = new List<Author>
            {
                new Author
                {
                    Id = 1,
                    FirstName = "Joydip",
                    LastName = "Kanjilal"
                },
                new Author
                {
                    Id = 2,
                    FirstName = "Steve",
                    LastName = "Smith"
                },
                new Author
                {
                    Id = 3,
                    FirstName = "Julie",
                    LastName = "Lerman"
                },
                new Author
                {
                    Id = 4,
                    FirstName = "Simon",
                    LastName = "Bisson"
                }
            };
        }
        public List<Author> GetAuthors()
        {
            return _authors;
        }
        public Author GetAuthor(int id)
        {
            return _authors.Find(x=> x.Id == id);
        }
    }

یک رابط سفارشی را در یک API حداقل وب تزریق کنید

قطعه کد زیر نشان می دهد که چگونه می توانید نمونه ای از رابط IAuthorRepository را تزریق کنید.

app.MapGet("api/author/{id:int}", async (IAuthorRepository authorRepository, HttpContext httpContext) =>
{
    var id = int.Parse((string)httpContext.Request.RouteValues["id"]);
    var author = authorRepository.GetAuthor(id);
    if (author == null)
    {
        return Results.NotFound();
    }
    return Results.Ok(author);
});

در نهایت، NET 6 دارای یک ویژگی جدید عالی است، جهانی با استفاده از دستورالعمل ها. برای استفاده از کاربردهای جهانی، یک فایل جدید به نام Usings.cs ایجاد کنید و تمام دستورات استفاده خود را به آنجا منتقل کنید. می‌توانید از این ویژگی با ASP.NET Core 6 یا حداقل APIهای خود استفاده کنید.

به گفته تحلیلگران، اوراکل استراتژی هوش مصنوعی مولد بهتری دارد

در پست آینده در اینجا در مورد حداقل APIها (مانند کار با امنیت و میان افزار) چیزهای بیشتری برای گفتن خواهم داشت.