0Pricing
C# Academy · درس

دمج التحقق مع واجهات API

أعيدوا استجابات واضحة لأخطاء التحقق

دمج التحقق مع واجهات API درس مجاني في C# Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في C# Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة C# Academy 4 دروس في المجموع.

ربط FluentValidation بـ ASP.NET Core

للتحقق من صحة الطلبات تلقائيًا، سجّل المدققات باستخدام حقن الاعتماديات. تفحص الأداة المساعدة AddValidatorsFromAssembly التجميعة وتسجّل كل مدقق تجده.

using FluentValidation;

builder.Services
    .AddValidatorsFromAssemblyContaining<CustomerValidator>();

البرمجيات الوسيطة للتحقق التلقائي

تفضّل FluentValidation الحديثة التحقق الصريح، لكن يمكنك تفعيل التحقق التلقائي الذي يرتبط بربط النموذج، بحيث تُرفض الطلبات غير الصالحة قبل تشغيل الإجراء الخاص بك.

dotnet add package FluentValidation.AspNetCore

builder.Services.AddFluentValidationAutoValidation();

حلّ المدققات من خلال DI

بما أن المدققات مسجّلة باستخدام DI، يمكنها حقن خدمات مثل المستودعات، مما يتيح لقواعد التحقق غير المتزامنة المعتمدة على قاعدة البيانات العمل بسلاسة في واجهة API الخاصة بك.

public class UserValidator : AbstractValidator<UserRequest>
{
    public UserValidator(IUserRepository repo)
    {
        RuleFor(u => u.Email)
            .MustAsync(async (e, ct) => !await repo.ExistsAsync(e));
    }
}

التحقق الصريح في نقطة نهاية

تفضّل فرق كثيرة التحقق الصريح لوضوحه. احقن IValidator<T> واستدعِه في بداية المعالج.

app.MapPost("/users", async (
    UserRequest request,
    IValidator<UserRequest> validator) =>
{
    var result = await validator.ValidateAsync(request);
    if (!result.IsValid)
        return Results.ValidationProblem(result.ToDictionary());
    return Results.Ok();
});

ما المقصود بـ ProblemDetails؟

إن ProblemDetails (وفق RFC 7807) تنسيق JSON قياسي لاستجابات أخطاء HTTP. ويضم حقولًا مثل type وtitle وstatus وdetail، مما يمنح العملاء بنية أخطاء متوقعة.

{
  "type": "https://tools.ietf.org/html/rfc7231",
  "title": "One or more validation errors occurred.",
  "status": 400,
  "errors": { "Email": ["Email is required."] }
}

ValidationProblemDetails

بالنسبة إلى حالات فشل التحقق، يستخدم ASP.NET Core ValidationProblemDetails، الذي يوسّع ProblemDetails بقاموس errors يربط كل حقل برسائله.

return Results.ValidationProblem(result.ToDictionary());
// Produces a 400 ValidationProblemDetails response

تحويل نتائج FluentValidation

يحوّل امتداد ToDictionary() كائن ValidationResult إلى قاموس field -> messages الذي تتوقعه ValidationProblem.

var result = await validator.ValidateAsync(request);
if (!result.IsValid)
{
    IDictionary<string, string[]> errors = result.ToDictionary();
    return Results.ValidationProblem(errors);
}

تخصيص مخرجات ProblemDetails

استخدم AddProblemDetails ومخصّصًا مخصصًا لإثراء كل استجابة خطأ، مثل إضافة معرّف تتبّع لأغراض تصحيح الأخطاء.

builder.Services.AddProblemDetails(options =>
{
    options.CustomizeProblemDetails = ctx =>
        ctx.ProblemDetails.Extensions["traceId"] =
            ctx.HttpContext.TraceIdentifier;
});

التحقق من الصحة في وحدات تحكم MVC

عند تفعيل التحقق التلقائي واستخدام [ApiController]، تُرجع إجراءات وحدة التحكم أيضًا ValidationProblemDetails تلقائيًا عندما يكون الطلب غير صالح، مما يحافظ على اتساق التنسيق عبر نقاط النهاية.

[ApiController]
[Route("api/[controller]")]
public class UsersController : ControllerBase
{
    [HttpPost]
    public IActionResult Create(UserRequest request) => Ok();
}

مرشح للتحقق من الصحة في Minimal APIs

يمكنكم توحيد التحقق الصريح باستخدام مرشح نقطة النهاية، بحيث يظل كل معالج نظيفًا.

app.MapPost("/users", (UserRequest r) => Results.Ok())
   .AddEndpointFilter<ValidationFilter<UserRequest>>();

اختيار التحقق التلقائي أم الصريح

التحقق التلقائي مريح، لكنه يخفي خطوة التحقق؛ أما التحقق الصريح فأكثر تفصيلًا، لكنه واضح وأسهل في الاختبار. تختار فرق كثيرة التحقق الصريح مع مرشح مشترك للاستفادة من مزايا الخيارين.

تحقق سريع

اختبر تكامل التحقق من صحة واجهة API.

مراجعة

يعني دمج التحقق من الصحة تسجيل أدوات التحقق باستخدام AddValidatorsFromAssembly، وتفعيل التحقق التلقائي اختياريًا، وإرجاع الأخطاء كـ ValidationProblemDetails عبر Results.ValidationProblem(result.ToDictionary()). يتيح DI لأدوات التحقق استخدام المستودعات للقواعد غير المتزامنة، ويمكنكم تخصيص ProblemDetails أو استخدام مرشحات نقاط النهاية للحفاظ على نظافة المعالجات.

الأسئلة الشائعة

هل درس «دمج التحقق مع واجهات API» مجاني؟

نعم — نص درس «دمج التحقق مع واجهات API» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة C# Academy، انتقل إلى CoddyKit PRO. تتضمن دورة C# Academy 4 دروس في المجموع.

ماذا ستتعلم في «دمج التحقق مع واجهات API»؟

أعيدوا استجابات واضحة لأخطاء التحقق تتمرن على C# Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ C# Academy؟

لا تُشترط خبرة سابقة. C# Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.

كم من الوقت يستغرق درس «دمج التحقق مع واجهات API»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس C# Academy هذا؟

نعم. كل درس في C# Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. التحقق باستخدام Data Annotations
  2. قواعد FluentValidation
  3. القواعد المخصّصة والمشروطة
  4. دمج التحقق مع واجهات API
← العودة إلى C# Academy