Alıştırma - OPENAPI belgelerinizi XML açıklamaları ve ek açıklamaları ile özelleştirme ve genişletme
Bu alıştırmada, kodunuz için açıklamalar ve ek açıklamalar ekleyerek bir geliştiricinin API'niz hakkında gördüğü belgeleri zenginleştireceksiniz. İlk olarak Swagger UI tarafından varsayılan olarak oluşturulan belgelere bakalım.
Swagger kullanıcı arabiriminde API'mizin uç noktasının OpenAPI tanımını incelemek için tarayıcınızda adresine
http://localhost:5000/swagger
gidin. Get yöntemini seçtiğinizde aşağıdakine benzer bir çıktı görmeniz gerekir.Swagger UI, API hakkında faydalı bilgiler sağlar. Çağırabileceğiniz yöntemleri gösterir (basit örneğinizde PriceFrame adlı bir yöntem). Bunun Height ve Width adlı iki gerekli parametreyi alan bir HTTP Get işlemi olduğunu görebilirsiniz. API Çağrısının nasıl çalıştığını görmek için Deneyin'i seçebilir, Yükseklik ve Genişlik değerlerini girebilir ve Yürüt'i seçebilirsiniz.
API kullanıcılarınız hala PriceFrame yönteminin sınırlamalarını bilmek için yeterli bilgiye sahip değil. Şimdi XML açıklamalarıyla daha ayrıntılı bilgi sağlayarak onlara yardımcı olalım.
API'nize XML açıklaması ekleme
Son alıştırmada kullandığınız Visual Studio Code örneğine geri dönün.
Web API'si son alıştırmada çalışmaya devam ediyorsa, durdurmak için Windows'ta ctrl+c veya Mac'te cmd+c tuşlarına basın.
Projenizde XML belgelerini etkinleştirmek için PrintFramerAPI.csproj proje dosyasını güncelleştirin
GenerateDocumentationFile
, etiketi var olan<PropertyGroup>
öğesine ekleyin ve olaraktrue
ayarlayın.<PropertyGroup> <TargetFramework>net7.0</TargetFramework> <GenerateDocumentationFile>true</GenerateDocumentationFile> <NoWarn>$(NoWarn);1591</NoWarn> </PropertyGroup>
Startup.cs dosyasına aşağıdaki using deyimlerini ekleyin.
using System.Reflection; using System.IO;
Startup.cs'de Swashbuckle'a içindeki çağrısının
AddSwaggerGen()
ConfigureServices
güncelleştirilerek XML belgelerini kullanmasını söyleyin.public void ConfigureServices(IServiceCollection services) { services.AddControllers(); // Register the Swagger generator, defining 1 or more Swagger documents services.AddSwaggerGen(c => { c.SwaggerDoc("v1", new OpenApiInfo { Version = "v1", Title = "PrintFramer API", Description = "Calculates the cost of a picture frame based on its dimensions.", TermsOfService = new Uri("https://go.microsoft.com/fwlink/?LinkID=206977"), Contact = new OpenApiContact { Name = "Your name", Email = string.Empty, Url = new Uri("https://learn.microsoft.com/training") } }); // Set the comments path for the Swagger JSON and UI. var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml"; var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile); c.IncludeXmlComments(xmlPath); }); }
Yukarıdaki kodda yansıma, XML açıklamalarını yüklenecek XML dosyasının adını belirler.
Denetleyiciler klasöründe PriceFrameController.cs dosyasını açın. Yönteminin HttpGet özniteliğinin üzerine aşağıdaki XML açıklama bloğunu
GetPrice
ekleyin. Bir eyleme üç eğik çizgiyle açıklama eklediğinizde bölüm üst bilgisine açıklama eklenir ve Swagger UI geliştirilir./// <summary> /// Returns the price of a frame based on its dimensions. /// </summary> /// <param name="Height">The height of the frame.</param> /// <param name="Width">The width of the frame.</param> /// <returns>The price, in dollars, of the picture frame.</returns> /// <remarks> The API returns 'not valid' if the total length of frame material needed (the perimeter of the frame) is less than 20 inches and greater than 1000 inches.</remarks> [HttpGet("{Height}/{Width}")] public string GetPrice(string Height, string Width) { string result; result = CalculatePrice(Double.Parse(Height), Double.Parse(Width)); return $"The cost of a {Height}x{Width} frame is ${result}"; }
Tüm değişiklikleri kaydetmek ve yerel olarak derlediğinden emin olmak için Visual Studio Code terminal penceresinde aşağıdaki komutu çalıştırın.
dotnet build
Değişikliklerinizi görmek için Visual Studio Code terminal penceresine aşağıdakileri girerek ASP.NET uygulamasını yerel olarak çalıştırın:
dotnet run
konumunda Swagger kullanıcı arabirimine yeniden
http://localhost:5000/swagger
bakın ve XML açıklamalarınızın OpenAPI belgelerine sağladığı ek bilgileri inceleyin.
API'nize veri açıklaması ekleme
Swagger'ın OpenAPI belgelerini geliştirmesini sağlamak için ad alanından Microsoft.AspNetCore.Mvc
öznitelikleri kullanırsınız.
Web API'si son alıştırmada çalışmaya devam ediyorsa, durdurmak için Windows'ta ctrl+c veya Mac'te cmd+c tuşlarına basın.
API'nizin
GetPrice
metin/düz için içerik türü yanıtını desteklediğini göstermek için, API denetleyicisi olan PriceFrameController.cs dosyasında tanımınGetPrice
üzerine bir[Produces("text/plain")]
öznitelik ekleyin.[HttpGet("{Height}/{Width}")] [Produces("text/plain")]
Yanıt İçerik Türü açılan menüsü, denetleyicinin GET eylemleri için varsayılan olarak bu içerik türünü seçer.
API'nize Swashbuckle ek açıklamaları ekleme
Şu ana kadar API'niz verilen çerçeve boyutları için bir fiyat hesapladığında 200 durum kodunu döndürür. Yöntemin açıklamasında GetPrice
, bir fiyatın hesaplanamama durumunu not edin.
Geliştiricilere yanıt türlerini ve hata kodlarını anlatmanın daha iyi bir yolu, aşağıdaki XML açıklamalarını ve veri açıklamalarını kullanmaktır. Swashbuckle ve Swagger araçları, beklenen HTTP yanıt kodlarının OpenAPI açıklamasını net bir şekilde oluşturmak için bu değerleri kullanır.
Ayrıca HTTP fiil filtresi oluşturucuyu özelliğini içerecek şekilde güncelleştirin Name
ve OpenAPI operationId
değerini ekleyin.
PriceFrameController.cs dosyasına aşağıdaki using deyimini ekleyin.
using Microsoft.AspNetCore.Http;
PriceFrameController.cs dosyasında değerini aşağıdaki kod ve açıklamayla değiştirin
GetPrice
./// <summary> /// Returns the price of a frame based on its dimensions. /// </summary> /// <param name="Height">The height of the frame.</param> /// <param name="Width">The width of the frame.</param> /// <returns>The price, in dollars, of the picture frame.</returns> /// <remarks> /// Sample request: /// /// Get /api/priceframe/5/10 /// /// </remarks> /// <response code="200">Returns the cost of the frame in dollars.</response> /// <response code="400">If the amount of frame material needed is less than 20 inches or greater than 1000 inches.</response> [HttpGet("{Height}/{Width}", Name=nameof(GetPrice))] [Produces("text/plain")] [ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status400BadRequest)] public ActionResult<string> GetPrice(string Height, string Width) { string result; result = CalculatePrice(Double.Parse(Height), Double.Parse(Width)); if (result == "not valid") { return BadRequest(result); } else { return Ok($"The cost of a {Height}x{Width} frame is ${result}"); } }
Bu kod güncelleştirmesi aşağıdaki değişiklikleri yapar:
- Yöntem,
BadRequest()
veOk()
yöntemlerini kullanarak bir BadRequest (400) ve Tamam durumu oluşturur ve dize sonucunu yanıta iletir. - XML açıklamaları, bu yöntemin döndürebileceği her durum kodunu açıklar.
- HttpGet özniteliği, OpenAPI
operationId
parametresini yaymak için birName
özellik içerir. - ProducesResponseType öznitelikleri, eylemin döndürebileceği farklı yanıtları listeler. Bu öznitelikler yukarıda anlatılan XML açıklamalarıyla birleştirilir ve oluşturulan Swagger belgesindeki yanıtlar için makul açıklamalar eklenir
- Yöntem,
Aşağıdaki komutla web API'sini yeniden derleyin:
dotnet build
ASP.NET uygulamasını aşağıdaki komutla çalıştırın:
dotnet run
konumunda Swagger kullanıcı arabirimine yeniden
http://localhost:5000/swagger
bakın ve bu ek açıklamalar tarafından sağlanan eklenen bilgileri inceleyin. API’nizin son Swagger UI’ı aşağıdaki resimde görüntülenir.
Bu alıştırmada, bir geliştiricinin API'niz hakkında aldığı bilgileri zenginleştirerek kullanımı çok daha kolay hale getirdiniz.