4 min read

Entity Framework Core 5 ile API yazımı

Bu yazıda .NET 5 ve Entity Framework Core 5 ile bir API yazacak ve Postman ile test edeceğiz.
Entity Framework Core 5 ile API yazımı

Bu yazıda .NET 5 ve Entity Framework Core 5 ile bir API yazacak ve ardından test edeceğiz.

Projenin tamamını aşağıdaki bağlantıdan indirip çalıştırabilirsiniz.

gulangurman/PlacesAPI_InMemory
Developing an API using .NET 5 and Entity Framework Core 5 - gulangurman/PlacesAPI_InMemory

Proje içerisinde onu test edebileceğiniz bir de Postman collection'ı bulunuyor.

Postman collection görünümü

Bu json dosyasını Postman içinde import ederek koleksiyonun içindeki HTTP isteklerini bir bütün halinde kullanabilirsiniz.

Not: Postman koleksiyonunda ortam değişkeni olarak api_url=http://localhost:5000 adresi mevcut. Eğer sizin api url adresiniz farklıysa Edit->Variables alanından bunu değiştirebilirsiniz.

1.Model

Modeli tanımlayarak Entity Framework için context oluşturalım.

public class Place
    {
        public long Id { get; set; }
        public string Name { get; set; }
        public string Tags { get; set; }
        public bool IsOpen { get; set; }
        public string Details { get; set; }
    }
public class PlaceContext : DbContext
    {
        public PlaceContext(DbContextOptions<PlaceContext> options)
            : base(options)
        {
        }

        public DbSet<Place> Places { get; set; }
    }

2.Veri erişimi

Model belirlendiğine göre artık Startup->ConfigureServices() metodu içerisinde veritabanı bağlantısını ekleyebiliriz.

Ben bu projede InMemory database kullandım. Yani kayıtlar sadece bellekte yaşıyor ve uygulama kapandığı anda siliniyor. Siz başka bir veritabanına da bağlantı kurabilirsiniz.

 public void ConfigureServices(IServiceCollection services)
 {

            services.AddControllers();
            services.AddDbContext<PlaceContext>(opt => opt.UseInMemoryDatabase("PlacesDB"));
}
Not: In-memory veritabanını çalıştırmak için Nuget'ten Microsoft.EntityFrameworkCore paketini indirmemiz gerekiyor.

3.REST API metotları

Controller ile tipik REST API metotlarını yazalım. Bunu scaffolding ile otomatik yazdırarak zaman kazanabiliyoruz.

Sonuçta aşağıdaki controller dosyasını elde ediyoruz.

Not: Eğer projeniz derlenmiyorsa scaffolding yapamazsınız. Projeyi derlenebilir hale getirip varsa hataları düzeltmeniz gerekir.
[Route("api/[controller]")]
    [ApiController]
    public class PlacesController : ControllerBase
    {
        private readonly PlaceContext _context;

        public PlacesController(PlaceContext context)
        {
            _context = context;
        }

        // GET: api/Places
        [HttpGet]
        public async Task<ActionResult<IEnumerable<Place>>> GetPlaces()
        {
            return await _context.Places.ToListAsync();
        }

        // GET: api/Places/5
        [HttpGet("{id}")]
        public async Task<ActionResult<Place>> GetPlace(long id)
        {
            var place = await _context.Places.FindAsync(id);

            if (place == null)
            {
                return NotFound();
            }

            return place;
        }

        // PUT: api/Places/5
        // To protect from overposting attacks, see https://go.microsoft.com/fwlink/?linkid=2123754
        [HttpPut("{id}")]
        public async Task<IActionResult> PutPlace(long id, Place place)
        {
            if (id != place.Id)
            {
                return BadRequest();
            }

            _context.Entry(place).State = EntityState.Modified;

            try
            {
                await _context.SaveChangesAsync();
            }
            catch (DbUpdateConcurrencyException)
            {
                if (!PlaceExists(id))
                {
                    return NotFound();
                }
                else
                {
                    throw;
                }
            }

            return NoContent();
        }

        // POST: api/Places
        // To protect from overposting attacks, see https://go.microsoft.com/fwlink/?linkid=2123754
        [HttpPost]
        public async Task<ActionResult<Place>> PostPlace(Place place)
        {
            _context.Places.Add(place);
            await _context.SaveChangesAsync();

            return CreatedAtAction("GetPlace", new { id = place.Id }, place);
        }

        // DELETE: api/Places/5
        [HttpDelete("{id}")]
        public async Task<IActionResult> DeletePlace(long id)
        {
            var place = await _context.Places.FindAsync(id);
            if (place == null)
            {
                return NotFound();
            }

            _context.Places.Remove(place);
            await _context.SaveChangesAsync();

            return NoContent();
        }

        private bool PlaceExists(long id)
        {
            return _context.Places.Any(e => e.Id == id);
        }
    }

4.Çalıştır

Uygulamayı çalıştırdığınızda Places API http://localhost:5000/api/Places/ adresinden erişilebilir olacaktır. Şimdilik veritabanı boş olduğundan boş bir dizi döndürecektir.

Not: Bunu değiştirmek için Properties -> launchSettings.json dosyasındaki launchUrl ve applicationUrl alanlarını düzenleyebilirsiniz.

5.Postman

Postman ile bir koleksiyon oluşturarak yeni istekler hazırlayalım. İsteğimizi GET, POST, PUT ve DELETE yaparak okuma, yeni oluşturma, güncelleme ve silme yani CRUD işlemlerini kolayca test edebiliyoruz.

Proje ile gelen Postman koleksiyonunu import ederseniz tipik HTTP isteklerini tanımladığını görebilirsiniz:

Bu isteklerin ilkiyle POST isteği göndererek veritabanına yeni bir mekan ekleyebiliyoruz:

Bu şekilde istekleri tek tek test etmek son derece kolay ve hızlı oluyor.

Bir ekleme daha yapalım:

Bütün mekanları listeleyelim.

2 numaralı mekanı isteyelim.

Bu mekanın bilgilerini güncelleyelim.

Aynı mekanı bu defa veritabanından silelim.

Not: In-memory veritabanı kullandığımızdan uygulamayı yeniden başlattığınızda bütün veriler kaybolmuş olacak. Bu tarz bellekte yaşayan veritabanlarını test amaçlı kullanmak gerçekten de büyük kolaylık sağlıyor.

Son söz.

Bu yazıda .NET 5 ve EF Core 5 ile bir API yazarak Postman ile test ettik. Siz de kaynak kodu indirip çalıştırabilir, soru veya isteklerinizi iletebilirsiniz. Şimdiden kolay gelsin diyorum. Bir sonraki yazıda görüşmek üzere, hoşçakalın.