Yazılım

ASP.NET Core Web Api – Arama

Merhabalar, bu yazıda ASP.NET Core ile web api’de arama nasıl yapılır bunu öğreneceğiz.

Yani bizim apimize bir istek de bulunulduğunda bu istekte ki arama kelimesine göre sonuçlar döndermeye çalışacağız. Örnek olarak;

https://localhost:5001/api/owners?name=Ali UYSAL

Bu tarz bir istekte bizim tek bir sonuç döndermemiz gerekiyor “Ali UYSAL”

OwnerParametersarama sorgunuzu bir sorgu parametresi olarak göndereceğimizden önce sınıfımızı oluşturacağız.

public class OwnerParameters : QueryStringParameters
{
	public uint MinYearOfBirth { get; set; }
	public uint MaxYearOfBirth { get; set; } = (uint)DateTime.Now.Year;
 
	public bool ValidYearRange => MaxYearOfBirth > MinYearOfBirth;
 
	public string Name { get; set; }
}

Burada Name değişkenini oluşturduk, diğer minYearsOfBirth ve MaxYearsOfBirth daha sonraki makaleler de ele alacağımız filtreleme ve sayfalama işlemlerinde kullanacağımız için şimdilik göz ardı edebilirsiniz.

Yapmamız gereken bir sonraki şey, OwnerRepositoryadında ki class’ımız da arama işlevselliğini uygulamak :

public PagedList<Owner> GetOwners(OwnerParameters ownerParameters)
{
	var owners = FindByCondition(o => o.DateOfBirth.Year >= ownerParameters.MinYearOfBirth &&
								o.DateOfBirth.Year <= ownerParameters.MaxYearOfBirth);
 
	SearchByName(ref owners, ownerParameters.Name);
 
	return PagedList<Owner>.ToPagedList(owners.ToList().OrderBy(on => on.Name),
		ownerParameters.PageNumber,
		ownerParameters.PageSize);
}
 
private void SearchByName(ref IQueryable<Owner> owners, string ownerName)
{
	if (!owners.Any() || string.IsNullOrWhiteSpace(ownerName))
		return;
 
	owners = owners.Where(o => o.Name.ToLower().Contains(ownerName.Trim().ToLower()));
}

Öncelikle,IsNullOrWhiteSpaceüzerinde basit bir kontrol yaparak name parametresinin gerçekten gönderilip gönderilmediğini kontrol etmemiz gerekir Name eğer api isteğinde gönderilmemiş ise, bir şey aramanın bir anlamı yok.

Daha sonra, Namedizgenin yan tümcesini kullanıyoruz. Yine burada filtreleme ile ilgili kodlarda mevcut, bizi ilgilendiren kısım;

private void SearchByName(ref IQueryable<Owner> owners, string ownerName)
{
	if (!owners.Any() || string.IsNullOrWhiteSpace(ownerName))
		return;
 
	owners = owners.Where(o => o.Name.ToLower().Contains(ownerName.Trim().ToLower()));
}

Geri kalan her şey aynı.

Uygulamamız da arama kodları sadece bu kadar. Gördüğünüz gibi gerçekten basit ve çok az kod ile Api’mize arama ekleyebildik.

Şimdi Postman tarzı bir uygulama ile apimizde arama yapmak için istek de bulunduğumuz da;

https://localhost:5001/api/owners?name=Ali UYSAL

Sonuç;

tam ad girdiğimiz için tek sonuç geldi, biz içerisinde o geçenleri listelemeye çalışırsak bu durumda benim veritabanımda ki bilgilere göre 3 kayıt gelmeli.

https://localhost:5001/api/owner?name=o
[
  {
    "id": "261e1685-cf26-494c-b17c-3546e65f5620",
    "name": "Ahmet Barbaros",
    "dateOfBirth": "1974-11-14T00:00:00",
    "address": "Teşvikiye"
  },
  {
    "id": "24fd81f8-d58a-4bcc-9f35-dc6cd5641906",
    "name": "Oya Aydoğan",
    "dateOfBirth": "1980-12-05T00:00:00",
    "address": "Teşvikiye"
  },
  {
    "id": "66774006-2371-4d5b-8518-2177bcf3f73e",
    "name": "Hakan Somun",
    "dateOfBirth": "1998-12-15T00:00:00",
    "address": "Teşvikiye"
  }
]

Ali UYSAL

IT alanında 16 sene önce donanım ile başlayan tecrübem, network ve sonrasında iş analizi, yazılım geliştirme ve proje yöneticiliği alanlarında devam etmiştir. Endüstriyel yazılımlar, sahadan veri toplama ve analizleri, otomatik etiketleme ve barkod sistemleri, otomatik tartım ve robotik konularında tecrübe sahibiyim. Sanayi 4.0 kapsamında imalat sanayinin dijital dönüşümünde çok fazla projenin hayata geçmesini sağladım.Open Source projelerle uzun süre ilgilendim, analiz ve implementasyonu konularında tecrübe edindim. Bunlar dışında hobi amacıyla başlasam da sonradan ürüne dönüşen, geliştirme kartları ile farklı çalışmalarım olmuştur.Raspberry Pi üzerinde yaptığım donanımsal ve yazılımsal işler ile çok farklı ürünler ortaya çıkartarak tecrübe edindim.

İlgili Makaleler

2 Yorum

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Başa dön tuşu