Bu yazımızda ASP .Net Core 2.2 ile Restfull bir API oluşturacağız.Moduler, Kolay az kod gerektiren ve en önemlisi cross-platform çalışabilecek bir API ve .Net Core 2.2 ile artık API Analizi de yapabiliyoruz.
İlk olarak .Net Core 'u ilk defa kullanacaklar için ön hazırlık yapalım: Core'da geliştirme yapabilmeniz için ilk olarak VS 2015 P3 ya da VS 2017 'ye ihtiyacımız var Visual Studio Code 'da da yazmak mümkün. Ben VS 2017'yi community edition olarak bu linkten edindim. VS kurulumunu tamamladıktan sonra .Net Core SDK 'i indirmek için bu linke tıklayalım. Kurulum oldukça basit adımları takip ederek diyerek kurulumu tamamlayalım.
Okurken ne dinlemeli ?
Ortam kurulumlarını tamamladıktan sonra gelelim projemizi oluşturmaya . VS 2017' den Core sekmesinden Web Applications' u seçerek API template'si ile projemizi oluşturacağız.
Projeyi create ettiğimizde şablon bize tüm kolaylıkları sağlıyor. Örnek bir controller bile oluşturuyor . Biz ValuesController'i silip kendi Controller'imizi oluşturmak üzere Projeye sağ tıklayıp Add-> New-> Empty Controller ekliyoruz.
API' yi genel hatları ile anlatacak olursak , bir stok API 'ı ve bazı malzemeleri ekleyebiliyoruz. Eklediğimiz malzemelerin hepsini ilgili endpoint çağrımı ile listeleyebiliyoruz. Teknik açıdan sınıflarda kullanacağımız modellerimiz Models klasörü altında , Data sağlayıcılarımız Repository ,API controller'i Controllers altında ve uygulama ilklendircimiz StartUp.cs olmak üzere ana dizinde yer almaktadır.Aşağıdaki gibi model sınıfımızı oluşturarak işe başlayalım:
namespace AvengersAPI.Models
{
public class InventoryItem
{
public int Id { get; set; }
public string ItemName
{ get; set; }
}
}
namespace AvengersAPI.Business
{
public interface IInventoryRepository
{
InventoryItem
AddInventoryItem(InventoryItem item);
List<InventoryItem>
GetInventoryItems();
InventoryItem GetInventoryItem(int Id);
}
}
public class InventoryRepository:IInventoryRepository
{
private readonly List<InventoryItem> _inventoryItems;
public InventoryRepository()
{
_inventoryItems = new List<InventoryItem>();
}
public InventoryItem AddInventoryItem(InventoryItem item)
{
_inventoryItems.Add(item);
return item;
}
public List<InventoryItem> GetInventoryItems()
{
return _inventoryItems;
}
public InventoryItem GetInventoryItem(int Id)
{
return _inventoryItems.Where(x=>x.Id==Id).FirstOrDefault();
}
}
namespace AvengersAPI.Controllers
{
[Route("v1/")]
[ApiController]
public class InventoryController :
ControllerBase
{
private readonly IInventoryRepository _repository;
public InventoryController(IInventoryRepository repository)
{
_repository = repository;
}
[HttpPost]
[Route("AddInventoryItem")]
public ActionResult<InventoryItem> AddInventoryItem(InventoryItem
item)
{
var inventoryItems = _repository.AddInventoryItem(item);
if (inventoryItems==null)
{
return NotFound();
}
return inventoryItems;
}
...
public void
ConfigureServices(IServiceCollection services)
{
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
services.AddSingleton<IInventoryRepository, InventoryRepository>();
}
[HttpGet]
[Route("GetInventoryItems")]
public ActionResult<List<InventoryItem>>
GetInventoryItems()
[HttpGet]
[Route("GetInventoryItem/{Id}")]
public ActionResult<InventoryItem> GetInventoryItem(int Id)
"profiles": {
"IIS
Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"launchUrl": "v1/GetInventoryItems",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
Hiç yorum yok:
Yorum Gönder