هانتكلم ازاي تحسّن Swagger Documentation بتاعت API بتاعتك بطريقة مفصلة.


1. استخدام OpenAPI Specification

  • اتأكد إن الـ API Documentation بتاعك معمول باستخدام OpenAPI Specification (OAS).
  • اتأكد إن كل الـ Endpoints موضحة كويس بمعلومات زي HTTP Method (GET, POST…).
  • حط الـ Response Models والـ Request Models علشان اللي بيستخدم الـ API يفهم بالظبط البيانات المطلوبة واللي بيرجعها النظام.

Response Type

الـProducesResponseType هي Attribute في ASP.NET Core بتوضح نوع وربما الـ HTTP status code اللي الـ API method هترجعه. يعني بتحدد لأي Response Code إيه نوع البيانات اللي بيرجعه الميثود.

ده بيساعد الـ Swagger Documentation والمستهلكين للـ API إنهم يعرفوا إجابات الـ API بشكل واضح.

مثال:

[HttpGet("{id}")]
[ProducesResponseType(StatusCodes.Status200OK, Type = typeof(Customer))]
[ProducesResponseType(StatusCodes.Status404NotFound)]
public IActionResult GetCustomer(int id)
{
    var customer = _customerService.GetById(id);
    if (customer == null)
        return NotFound();
        
    return Ok(customer);
}

في المثال ده، بتوضح الـ Attributes إن لو العملية نجحت هترجع Status 200 مع Object من نوع Customer، ولو ما لقيتش العميل هترجع Status 404.

باختصار، ProducesResponseType بيساعد على توثيق الـ API بشكل دقيق وتحديد أنواع الردود الممكنة.

2. إضافة Summary و Description

  • في كل Endpoint، استخدم الـ summary والـ description علشان توضح وظيفة الـ API.
  • مثال:
    /// <summary>
    /// Get list of all customers.
    /// </summary>
    /// <remarks>
    /// This endpoint returns a list of customers with pagination.
    /// </remarks>
    [HttpGet]
    public IActionResult GetCustomers() { … }
  • ده بيساعد المطورين يفهموا بسرعة وظيفة كل Endpoint.

3. توثيق الـ Models

  • استخدم XML comments مع Classes والـ Properties في الـ Models.
  • مثال:
    /// <summary>
    /// Represents a Customer entity.
    /// </summary>
    public class Customer {
        /// <summary>
        /// Unique identifier for the Customer.
        /// </summary>
        public int Id { get; set; }
        
        /// <summary>
        /// Name of the Customer.
        /// </summary>
        public string Name { get; set; }
    }
  • اتأكد إن كل خاصية ليها توضيح واضح يشرح منها وظيفتها.

4. استخدام Annotations لتعزيز التوثيق

  • استعمل Data Annotations زي [Required]، [StringLength]، [Range] وغيرها عشان توضح القيود على البيانات.
  • ده مش بس بيساعد في التحقق من الداتا (validation) لكن كمان بيظهر في Swagger Documentation.
  • مثال:
    public class Product {
        [Required]
        public int Id { get; set; }
        
        [Required]
        [StringLength(100, MinimumLength = 3)]
        public string Name { get; set; }
    }

5. تحسين إعداد Swagger UI

  • اتأكد إن إعدادات Swagger UI محدثة وتدعم الإصدارات المختلفة للـ API.
  • زود Features زي:
    • الـAuthentication: اشتغل على إضافة Bearer Token authentication لو الـ API بتطلب Token.
    • الـVersioning: وضح الـ API Version في Swagger، عن طريق إضافة ApiVersionDescription و ApiVersioning في Startup.
  • مثال بسيط في Startup:
    services.AddSwaggerGen(c =>
    {
        c.SwaggerDoc("v1", new OpenApiInfo {
            Title = "My API",
            Version = "v1",
            Description = "API Documentation for My Application"
        });
        
        // إضافة support لل Bearer Authentication
        c.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme
        {
            Name = "Authorization",
            Type = SecuritySchemeType.ApiKey,
            Scheme = "Bearer",
            BearerFormat = "JWT",
            In = ParameterLocation.Header,
            Description = "Enter 'Bearer' [space] and then your valid token."
        });
        
        c.AddSecurityRequirement(new OpenApiSecurityRequirement
        {
            {
                new OpenApiSecurityScheme
                {
                    Reference = new OpenApiReference { Type = ReferenceType.SecurityScheme, Id = "Bearer" }
                },
                Array.Empty<string>()
            }
        });
    });

6. استخدام Examples في الـ Documentation

  • ضيف مثال (Example) لكل Endpoint عشان توضح شكل Request والـ Response.
  • ممكن تستخدم Attributes زي [SwaggerRequestExample] و[SwaggerResponseExample] لو احتجت.
  • مثال:
    إضافة ملفات Example JSON للـ Models.

7. تنظيم وترتيب الـ Documentation

  • قسم الـ Endpoints في مجموعات (Tags) حسب الوظيفة.
  • استخدم قسم الـ “Tags” لتجميع الـ Endpoints المهتمة بنفس الموضوع، زي “Customers”, “Products”, وغيره.
  • ده بيسهل على المستخدم التنقل في الـ API.

Conclusion

تحسين Swagger Documentation بيعتمد على توضيح الـ Endpoints والـ Models بشكل دقيق باستخدام Summary, Description, XML Comments، و Data Annotations. كمان لازم تنظم الـ API Versioning وتضيف Authentication features لو مطلوب. مع شوية Examples وتنظيم الـ Tags، هتدي Developers ثقة وسهولة في فهم الـ API والتعامل معاه.

بالخطوات دي بتكون وحّدت توثيق الـ API بتاعتك، ومكنّت المطورين من فهم ووصول البيانات المطلوبة بسهولة.