ABP Framework ile Ad?m Ad?m Yaz?l?m Geli?tirme ? B?l?m?6: API Katman? Geli?tirme
Modern uygulamalarda API (Application Programming Interface) katman?, hem istemci uygulamalar (mobil, web) hem de di?er servislerle ileti?im kurmak i?in kritik ?neme sahiptir. ABP Framework, g??l? ve kolay yap?land?r?labilir bir API katman? olu?turman?z? sa?lar. Bu b?l?mde, ABP’nin API geli?tirme ?zelliklerini ve en iyi pratikleri inceleyece?iz.
Auto API Controller ?zellikleri
ABP Framework’?n en kullan??l? ?zelliklerinden biri Auto API Controllers‘d?r. E?er bir uygulama servisi IApplicationService aray?z?n? implemente ediyorsa ve uygun kurallara uyuyorsa, ABP otomatik olarak bu servis i?in bir ASP.NET Core API denetleyicisi olu?turur. Bu, manuel olarak denetleyici (controller) yazma ihtiyac?n? ortadan kald?r?r ve geli?tirme h?z?n? art?r?r.
BookAppService(Bkz. B?l?m 5) gibi bir servis, otomatik olarak birBooksAPI denetleyicisine d?n??t?r?l?r ve/api/app/booksgibi endpoint’ler olu?turulur.- CRUD operasyonlar? (Get, GetList, Create, Update, Delete) i?in HTTP metotlar? (GET, POST, PUT, DELETE) otomatik olarak e?le?tirilir.
API Endpoint’lerin ?zelle?tirilmesi
Otomatik API denetleyicileri b?y?k kolayl?k sa?lasa da, bazen endpoint’leri veya HTTP metotlar?n? ?zelle?tirmek isteyebilirsiniz. Bunu ?e?itli yollarla yapabilirsiniz:
[RemoteService(IsEnabled = false)]: Uygulama servisinin otomatik API endpoint’leri olu?turmas?n? engeller.[Route("api/my-custom-path/books")]: Otomatik olarak olu?turulan rota (route) yolunu ?zelle?tirir.[HttpMethod(HttpVerb.Get)]veya[HttpGet]: Uygulama servis metotlar?na do?rudan HTTP metot nitelikleri ekleyerek HTTP fiilini ve hatta ?zel rotalar? belirleyebilirsiniz.
?rnek:
C#
using Volo.Abp.AspNetCore.Mvc;
using Volo.Abp.Application.Services;
using Volo.Abp.AspNetCore.Mvc.Annotations; // [HttpMethod] i?in
public class BookAppService : ApplicationService, IBookAppService
{
// ...
[HttpGet] // GET metodu olarak ayarlar
[Route("api/app/books/by-type/{type}")] // ?zel rota belirleme
public async Task<List<BookDto>> GetBooksByTypeAsync(BookType type)
{
var books = await _bookRepository.GetListAsync(b => b.Type == type);
return ObjectMapper.Map<List<Book>, List<BookDto>>(books);
}
}
Swagger Entegrasyonu ve API Dok?mantasyonu
ABP Framework, API’leriniz i?in otomatik olarak Swagger (OpenAPI) dok?mantasyonu olu?turur ve bunu yay?nlar. Bu, API’lerinizi kolayca test etmenizi ve anla??l?r bir ?ekilde belgelendirmenizi sa?lar.
YourProjectName.WebveyaYourProjectName.HttpApiprojesindeSwaggerModuleveya benzeri bir yap?land?rma ile Swagger UI etkinle?tirilir.- Uygulaman?z? ?al??t?rd???n?zda
/swaggeradresine giderek API dok?mantasyonunu ve test aray?z?n? g?rebilirsiniz. - XML dok?mantasyonu aktif edilerek, uygulama servis metotlar?n?za ve DTO’lar?n?za ekledi?iniz yorumlar Swagger UI’da g?r?nt?lenebilir.
API Versiyonlama
Uygulaman?z b?y?d?k?e veya harici t?keticilerle payla?t?k?a API versiyonlama ?nemli hale gelir. ABP Framework, ASP.NET Core’un yerle?ik API versiyonlama mekanizmalar?n? destekler (URI, sorgu dizesi, ba?l?k).
- URI Versiyonlama (?nerilen):
[ApiVersion("1.0")]niteli?i ve rota tan?mlamalar?nda{version:apiVersion}placeholder’? kullan?l?r. YourProjectNameHttpApiHostModuleveya benzeri bir mod?lde versiyonlama se?enekleri yap?land?r?l?r.
C#
// Controller'da versiyonlama
[ApiVersion("1.0")]
[Route("api/v{version:apiVersion}/app/books")]
public class BookAppService : ApplicationService, IBookAppService
{
// ...
}
Request ve Response Formatlar?
ABP Framework, JSON format?n? varsay?lan olarak destekler. HTTP POST/PUT isteklerinde JSON payload’lar?n? otomatik olarak DTO’lara ba?lar ve API yan?tlar?n? JSON olarak d?nd?r?r. ?htiya? halinde XML veya di?er formatlar da yap?land?r?labilir.
API G?venlik Ayarlar? (CORS, Authentication)
API katman?, uygulaman?z?n g?venli?ini sa?lamak i?in kritik ?neme sahiptir.
- CORS (Cross-Origin Resource Sharing): Farkl? bir alan ad?ndan gelen JavaScript isteklerinin API’nize eri?mesine izin vermek i?in kullan?l?r.
appsettings.jsonveyaYourProjectNameWebModule/YourProjectNameHttpApiHostModulei?inde CORS politikalar? tan?mlan?r. C#// YourProjectNameWebModule.cs'de veya HttpApiHostModule.cs'de public override void ConfigureServices(ServiceConfigurationContext context) { // ... context.Services.AddCors(options => { options.AddDefaultPolicy(builder => { builder .WithOrigins( configuration["App:CorsOrigins"] .Split(",", StringSplitOptions.RemoveEmptyEntries) .ToArray() ) .WithAbpExposedHeaders() .SetIsOriginAllowedToAllowWildcardSubdomains() .AllowAnyHeader() .AllowAnyMethod() .AllowCredentials(); }); }); // ... } - Authentication (Kimlik Do?rulama): Kullan?c?n?n kimli?ini do?rulamak i?in kullan?l?r. ABP, Identity Server (OpenIddict) ile tam entegrasyon sunar (Bkz. B?l?m 8). API’ler genellikle JWT (JSON Web Token) tabanl? kimlik do?rulama kullan?r.
- Authorization (Yetkilendirme): Kimli?i do?rulanm?? bir kullan?c?n?n belirli bir kayna?a eri?im veya bir i?lemi yapma yetkisine sahip olup olmad???n? kontrol eder.
[Authorize]niteli?i veya politika tabanl? yetkilendirme kullan?l?r. C#using Microsoft.AspNetCore.Authorization; public class BookAppService : ApplicationService, IBookAppService { [Authorize(MyProjectPermissions.Books.Create)] // Sadece belirli bir izni olan kullan?c?lar eri?ebilir public async Task<BookDto> CreateAsync(CreateUpdateBookDto input) { // ... } }
API Testleri ve Postman Koleksiyonu Olu?turma
API katman?n? geli?tirdikten sonra, do?ru ?al??t???ndan emin olmak i?in test etmek ?nemlidir.
- Unit/Integration Testler: ABP’nin test altyap?s?n? kullanarak uygulama servislerinizi veya API denetleyicilerinizi test edebilirsiniz (Bkz. B?l?m 14).
- Postman/Insomnia: Pop?ler API test ara?lar? olan Postman veya Insomnia ile API endpoint’lerinize manuel istekler g?nderebilir ve yan?tlar? inceleyebilirsiniz.
- Postman Koleksiyonlar?: Tekrarlayan testler i?in Postman koleksiyonlar? olu?turarak, API testlerinizi d?zenli ve otomatize edebilirsiniz. Otomatik olarak olu?turulan API endpoint’leri sayesinde Swagger UI’dan do?rudan Postman koleksiyonu d??a aktarabilirsiniz.
API katman?, uygulaman?z?n d?? d?nyaya a??lan y?z?d?r ve do?ru bir ?ekilde tasarlanmas? ve g?venli?inin sa?lanmas? b?y?k ?nem ta??r.