Konuyu Oyla:
  • Derecelendirme: 5/5 - 1 oy
  • 1
  • 2
  • 3
  • 4
  • 5
WebBroker ve TMS Web Core ile REST WEB API Yaklaşımı
#1
REST, en basit anlamda bir web api geliştirme yaklaşımıdır. Temel prensip, bir uç kaynaktaki ve bu aynı zamanda URI olarak ifade edilmektedir; HTTP metotları ile veri manipülasyonu yapmak ve ardından yapılan manipülasyon neticesini HTTP status kodları ile geri döndürmektedir. Bu yaklaşımı uygulayan servisler ise RESTfull olarak adlandırılmaktadır.
HTTP 'nin çoğu yerde stateless yani durumsuz bir protokol olduğunu okumuşsunuzdur. Bunun anlamı, protokol peşi sıra yapılan istekleri ilişkilendirmez ve her http isteği birbirinden bağımsız olarak değerlendirilir. REST mimarisinin temel prensiblerinden biri de budur. Kısacası istemci, sunucu için gerekli olan tüm bilgileri sağlayabilir. Sunucu taraf bunları istemci yerine kendi üzerinde tutmak durumunda olmamalıdır. Burada ilk akla gelebilecek Session kavramıdır. REST yaklaşımında ise bu durum, http headerlarında taşınan TOKEN anahtarları ile gerçekleştirilmektedir. Bu, Authorization ve Authentication gibi kavramları içerebilen bir yapıdır.
Fakat şu an için biz, REST yaklaşımının temel manipülasyon yöntemlerini basit ve yalın bir şekilde irdelemeye çalışacağız.

İstemci tarafında TMS firmasının geliştirdiği Web Core ürününü kullanacağım. Onunla işlevi, kişi ekleme, silme, güncelleme ve listeleme olan basit bir web uygulama arabirimi hazırladım. REST yaklaşımına temel olarak değinmek için yeterli.
Sunucu tarafında ise Delphi 'nin web sunucu yazılımları geliştirmek için bir çatısı olan WebBroker'ı kullanacağım.
WebBroker, Web API isteklerinin karşılanması ve TMS Web Core ile oluşturulan html, js gibi dosyaların sunulmasını sağlayacak. Böylece iki yapıyı yerelde birleştirmiş olacağız.
Elbette TMS Web Core ürünü istemci tarafı hedefler. Dolaysıyla sunucu tarafında seçim yapmakta özgürsünüz. Ve yine TMS 'in XData gibi kendi REST sunucu çözümleride Web Core ile tam entegre çalışmaktadır. Diğer yandan NodeJS bile iyi seçim olabilir.
Veri tabanı olarak ise SQLite kullanacağım. FireDAC 'ın statik kütüphane desteği ile ek olarak sqlite.dll kütüphanesine ihtiyacımız olmayacak. Uygulamamız customers tablosunu kullanıyor ve onu olabilecek en minimal yapıda oluşturdum. Şu an ki örneğimiz için bize yeterli olacaktır.

n0Wa8tl.png

Web formumuza işlevlere ait genel görünümler

Kişi Ekleme

tNbLdx8.gif


Kişi Bilgisi Güncelleme

BhqQmua.gif


Kişi Silme

FdTiFdN.gif


Hazırladığımız basit web arabiriminin arka planda hangi HTTP metodlarını hangi durumlarda icra ettiğini açıklamaya çalışacağım.
Bunlar aynı zamanda bizim Back-End servislerimiz olarak ifade edilmektedir. TMS Web Core kaynak kodlarında bu servislerin uygulamasını göreceksiniz. Fakat yine de REST yaklaşımını temel olarak kavrayabilmek adına HTTP çağrımlarını irdelemek faydalı olacaktır. Back-End servis testlerini yaparken Postman uygulamasını kullandım. Eğer isterseniz Delphi 'nin Tools > REST Debugger aracınıda kullanabilirsiniz.

HTTP POST METODU

Yeni bir kişi oluşturmak için POST metodunu kullanıyorum. Bunun anlamı veri tabanı tarafında bir INSERT işleminin söz konusu olduğudur. Görüleceği üzere "firstname", "lastname" ve "country" parametreleri bir JSON objesi olarak gönderilmekte. İstek neticesinde sunucu yanıtında bu parametrelere ek olarak "id" alanı değeride geri döndürülmektedir. "id" alanı kayıtımıza ait benzersiz kimlik numarasıdır. Sunucu tarafında bunu oluşturabilmek için GUID 'den yararlandım. Mongo ve benzeri NoSQL veri tabanları ile çalıştıysanız bu size tanıdık gelecektir.
Burada bir parantez açmak istiyorum. Genel geçer olarak, Primary Key için Integer türünde ve veri tabanının otomatik atadığı ardışık sayılar dizisi kullanılmaktadır. Fakat biraz sonra göreceğimiz DELETE gibi isteklerde, bu ardışık sayı dizisinin kullanıcılar tarafından bir şekilde manüple edilebilmesi söz konusu olabilir. Bu nedenle GUID gibi kayıta ait kimlik bilgileri, en azından ardışık sayı dizilerine göre daha tutarlı ve güvenlidir.
Diğer üzerinde durulması gereken konu ise Status kodudur. Dikkat ederseniz "201" olarak geri döndürmekteyiz. Bu status kodunun karşılığı "Created" olarak ifade edilir. Yani URI 'de bir kaynak başarılı olarak oluşturuldu demektir. Geleneksel WEB API yaklaşımında ise sunucu tarafından "200" kodu döndürülmektir. Fakat öncesinde belirtiğimiz gibi REST yaklaşımında, HTTP Metotları sunucu tarafında veri manüplasyonu anlamlandırmasını sağlarken, istemci tarafına nihai sonucu status kodu ile aktarmaktadır.

eqrwf32.png

HTTP GET METODU

Listele butonu, kişiler listesini almaktadır. Bunun için GET metodu isteği oluşturacağız. Bu istek, veri tabanı tarafında SELECT ifadesi olarak karşılık bulur. GET isteği neticesinde kişiler listesi bir JSON Array olarak geri döndürülmektedir. JSON dizisinden aldığımız firstname ve lastname değerleri ile web uygulama formumuzdaki açılır liste kutusu içeriğini oluşturmaktayız.

Status koduna tekrar dikkat edelim. "200" olarak geri döndürülmüştür. Eğer kişi listesi boş olsaydı, "204", yani "No Content" olarak ifade edilen status kodu geri döndürülecektir.

lqniMMy.png


Bu sefer açılır liste kutusu ile sadece seçtiğimiz kişiye ait bilgileri getirmek istiyoruz. Tekrar bir GET isteği oluşturacağız.

Ama dikkat ederseniz URI 'de e912b902721f44699762d031cbef4b62 ifadesinin eklendiğini göreceksiniz. Bu ifade, kayıta ait benzersiz kimlik bilgisidir. REST yaklaşımında, URI ye eklenen bu değer ile sadece ilgili kayıta ait bilgileri getirilmesi sağlanır.

XcbbYBl.png

HTTP PUT METODU

Açılır liste kutusundan seçtiğimiz "Julinanne Moore" için kişi bilgilerinde değişiklik yapmak istiyoruz.
Bunun için PUT metodunu kullanacağız. Bu metot veri tabanı tarafında UPDATE olarak karşılık bulur.
Kişiye ait benzersiz kimlik bilgisini URI de eklenmiştir. Kişi bilgileri JSON objesi olarak istek gövdesinde sunucuya iletilmektedir.

rWqKcQN.png


Bir önceki PUT isteğinde sunucuya "firstname", "lastname" ve "country" parametrelerinin tümünü göndermiştik. Fakat bazen sadece belli bir parametre için değişiklik yapmak isteyebiliriz. Buradan hareketle "Julianne Moore" kişisinin Country bilgisini değiştirmek için istek gövdesinde sadece country parametre değerini iletebiliriz. Görüleceği üzere Country bilgisi "Turkey" olarak güncellenmiştir.

j1pJsUy.png


HTTP DELETE METODU

Son olarak "Julianne Moore" kişisini silmek istediğimizi varsayalım. Bunun için DELETE isteği oluşturacağız ve kimlik bilgisini URI ye ekleyeceğiz. Bu işlem veri tabanı tarafında DELETE olarak karşılık bulmaktadır.
İşlemin başarılı neticelenmesi ile status kodu "204" olarak geri döndürülmüştür. Yani kaynak artık silinmiştir ve yoktur.

oO6xVAM.png


WebBroker üzerine;

u9XKWSP.png

Sunucu tarafında 8080 numaraları port kullanılmıştır. Bunu istediğiniz gibi değiştirebilirsiniz.

WebBroker Action Editor ile açılan form da iki Path tanımı göreceksiniz. Bunlardan biri Default olarak işaretlenir.
PathInfo sütununda /api/customers* ifadesine dikkat edin. Fakat PathInfo ifadesinin son tarafındaki "*" önemlidir.
Bunun anlamı /api/customers ile başlayan tüm isteklerin bu modül birimi tarafından değerlendirileceği anlamına gelir.
Yani http://localhost:8080/api/customers ve http://localhost:8080/api/customers/e912b902721f44699762d031cbef4b62 isteklerini aynı birim modülüne yönlendiriyoruz.

6y2DeSA.png

WebBrokerServer uygulaması çalışma görüntüsü görseldeki gibi olacaktır. Görüleceği üzere Server Console uygulaması olarak oluşturulmuştur. Daha gelişkin uygulamalarda ISAPI tercih edebilirsiniz.

uEcf5QN.png

Son olarak Delphi WebBroker çatısı Windows ve Linux platformlarında çalışabilmektedir. TMS Web Core istemci tarafı olmasından hareketle isterseniz Linux sunucularında uygulamanızı dağıtma şansına sahip olursunuz.

TMS Web Core üzerine;

tidjYMW.png

Eğer mevcut tasarımda değişiklik yaparsanız öncelikle uygulamayı Compile edin. Ardından Open Output Path in Explorer ile Web Core ile oluşturduğumuz nihai uygulama dosyalarını WebBroker server uygulaması dizinine kopyalayın. Mevcut projemizde Server uygulama dizinimizin içeriği görseldeki gibidir.

XviapXO.png


Her iki projeye ait tüm kaynak kod ve database dosyası makale ekinde mevcuttur. Faydalı olması dileğiyle.


Ek Dosyalar
.zip   WebBrokerAndWebCore.zip (Dosya Boyutu: 1,93 MB / İndirme Sayısı: 40)
Cevapla
#2
güzel örnek olmuş, Rest server kısmında ek bileşen olmadan olması sevdim
Cevapla
#3
Elinize sağlık ciddi emek ve zaman harcamışsınız.
Sorsaydı Bilirdi Sormuyor ki Bilsin.
Bilseydi Sorardı Bilmiyor ki Sorsun. 
Cevapla
#4
Elinize sağlık.
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  TMS Web Core - WebHttpRequest ile istek dönmüyor RAD Coder 3 182 10-05-2024, Saat: 10:20
Son Yorum: rmzgenius
  TMS Web Core - Genel Bakış rmzgenius 64 20.417 08-05-2024, Saat: 10:04
Son Yorum: skilinc
  TMS Web Core - Database bcore 6 982 13-04-2024, Saat: 08:12
Son Yorum: erol.micset
  WebBroker ve TMS Web Core ile REST WEB API Yaklaşımı 2 delphi.developer 0 225 04-03-2024, Saat: 16:14
Son Yorum: delphi.developer
  TMS Web Core : Güzel Özellikler-2 rmzgenius 13 3.576 08-01-2024, Saat: 11:57
Son Yorum: rmzgenius



Konuyu Okuyanlar: 1 Ziyaretçi