Strapi Servis İsteklerinde Özelleştirme Yapılması

Özkan Şahan
inventiv
Published in
4 min readNov 13, 2020

Açık kaynak kodlu içerik yönetim sistemi olan Strapi’yi anlattığımız üçüncü yazıda Strapi’ye gelen servis isteklerinde sorgulama yapılmadan önce araya girip sorgulamada nasıl değişiklik yapılabileceğini inceleyeceğiz.

Yazıya başlamadan önce eğer Strapi projesi oluşturmadıysanız aşağıdaki linki takip ederek gerekli olan kurulumları yapabilir ve proje oluşturabilirsiniz.

Projeyi oluşturduktan sonra modelleme ve veri işlemlerinin nasıl yapıldığının anlatıldığı yazıyı da aşağıdaki linki takip ederek inceleyebilirsiniz. Burada oluşturulan veri yapısı üzerinden örneklerle konuyu anlatacağız.

Strapi üzerindeki controller yapısı

Strapi projesinde tanımladığımız her veri modeli için api altında bir yapı oluşturulur. Bu yapıda config, controller, models ve services bölümleri bulunmaktadır. Veri modeli oluşturulduğunda bu bölümler varsayılan olarak boş şekilde oluşturulmaktadır.

Bu bölümlerden controller yapısını Strapi’ye gelen servis isteklerinde araya girmek için kullanıyoruz. Controller üzerinde yazılan javascript kodu, istemciden gelen istek sunucuya iletilmeden yorumlama ve değişiklik yapmamızı sağlamaktadır. Aşağıda bulunan görseldeki gibi istek ilk olarak controller’da işlenip daha sonra sunucuya gönderilmektedir.

Aşağıdaki örneklerle iki farklı senaryo için servis isteklerinde özelleştirme yapmayı detaylandıracağız. Örnekler Visual Studio Code editörü üzerinden anlatılacaktır. İstemci olarak da Postman uygulaması kullanılacaktır.

İlk Senaryo

Bu senaryo için veri yapımızda farklı fiyatlarda satılan kitaplar olduğunu varsayalım. Mevcutta kullanıcı belirli bir fiyattan satılan kitapları görmek için istek oluşturduğunda sadece o fiyattaki kitapların listesi cevap olarak dönülür. Bununla ilgili örneği bir önceki yazıda bulabilirsiniz.

Kitap sitelerinde sadece yapılan isteğin sonucu yerine alternatif sonuçlar da gösterilmektedir. Biz de bu senaryo gereği sadece verilen fiyattaki kitapları değil, verilen fiyatın ±%10 aralığındaki tüm kitapları listeleyeceğiz. Bunun için aşağıda verilen kod bloğunu kitap controller’ı üzerine ekleyelim.

Controller kodunu değiştirdikten sonra editör üzerinde yeni terminal açarak aşağıdaki komutu çalıştırıp projeyi ayağa kaldıralım.

Proje ayağa kalktıktan sonra Postman uygulaması üzerinden aşağıdaki gibi bir servis isteğinde bulunalım.

Postman uygulaması üzerinden yapılan istek controller’a düştüğünde önce istekte fiyat bilgisinin bulunup bulunmadığı kontrol edilir. Eğer fiyat bilgisi varsa, bu bilgi bir değişkende tutularak yapılan servis isteğinden fiyat bilgisi kısmı çıkarılır. Verilen fiyat bilgisinin alt ve üst limitleri hesaplanır ve hesaplanan değerler sanki yapılan ilk istekte varmış gibi sunucuya gönderilir. Sunucudan dönen değer ise istemciye sonuç olarak iletilir.

İstemciden kitap üzerine yapılan her arama isteği bu controller’a düşeceği için fiyat dışında yapılan diğer sorguların da çalışması sağlanmalıdır. Bunu da koddaki fiyat bilgisinin olmadığı durum sağlamaktadır.

Sistemde fiyat bilgisi 7 ve 7.5 olan iki adet kitap bulunmaktadır. İstemciden yapılan ilk istek sunucuya gönderilmiş olsaydı sadece fiyat bilgisi 7 olan kitap sonuç olarak dönecekken servis isteğinin özelleştirilmesi sonucu her iki kitap da servis sonucu olarak dönmektedir.

İkinci Senaryo

Bu senaryo için veri yapımızda aynı yazara ait iki farklı kitabın olduğunu varsayalım. Mevcut yapıda kullanıcı kitap adı ile istek yaptığında sadece istekteki ad ile eşleşen kitap cevap olarak dönülür. Bununla ilgili örneği bir önceki yazıda bulabilirsiniz.

Bu senaryo gereği sadece eşleşen kitap değil, eşleşen kitabın yazarına ait tüm kitapları listeleyeceğiz. Bunun için daha önceden düzenlediğimiz kitap veri modeline ait controller sınıfını aşağıdaki şekilde düzenleyelim.

Projeyi tekrar ayağa kaldırdıktan sonra Postman uygulaması üzerinden aşağıdaki gibi bir servis isteğinde bulunalım.

Postman uygulaması üzerinden yapılan istek controller’a geldiğinde önce istekte ad bilgisinin bulunup bulunmadığı kontrol edilir. Eğer ad bilgisi varsa, bu bilgi ile sunucudan bu ada sahip kitap bilgisi istenir. Cevap döndükten sonra servis isteğinden ad bilgisi çıkarılarak, dönen cevaptaki kitabın yazarına ait isim ile istemciden bu yazara ait kitapları listeleme isteği yapılmış gibi sunucuya tekrar istekte bulunulur. Sunucudan dönen değerler ise istemciye sonuç olarak iletilir.

Sistemde adı “Kuyucaklı Yusuf” olan kitabın yazarı Sabahattin Ali’dir. Sistemde yazarın kaleme aldığı iki kitap bulunmaktadır. İstemciden yapılan ilk istek sunucuya gönderilmiş olsaydı sadece adı “Kuyucaklı Yusuf” olan kitap sonuç olarak dönecekken, servis isteğinin özelleştirilmesi sonucu her iki kitap da servis sonucu olarak dönmektedir.

Tebrikler!

Yazıyı bu bölüme kadar okuduysanız artık Strapi üzerinde dilediğiniz şekilde servis isteklerini özelleştirebilirsiniz. Sadece arama işlemlerinde değil oluşturma ve güncelleme işlemlerinde de benzer şekilde servis isteklerinde değişiklik yapabilirsiniz. Umarım faydalı olmuştur.

Bu içeriği arkadaşlarım Doğukan Kukul ve Emre savaş ile birlikte oluşturduk.

Okuduğunuz için teşekkür ederiz.

--

--