Rust ile Web Servis Uygulaması

0 1,979

Bundan önceki iki makalemizde bir rust uygulama yapısının nasıl olacağından bahsetmiştik. Şimdi ise bu yapıları daha katmanlı bir hale getireceğiz. Daha sonrada bunu bir web servis uygulaması haline getireceğiz. Rust hızlı bir şekilde gelişme sürecine devam ediyor. Burada dikkat etmeniz gereken 2018 sürümüyle öncesi arasında farklar olduğudur.

Tekrardan Cargo.toml dosyamızı açıyoruz. Buraya bir kaç tane daha ekleme yapacağız. Öncelike actix-web ve actix-rt ekliyoruz.Bu kütüphaneler Rust için güçlü, pragmatik ve son derece hızlı bir web çerçevesi oluşturmaktadır. Daha sonra serde kütüphanesini JSON serialization için ekleyeceğiz.

Veritabanı Katmanı

Veritabanı katmanını oluşturmak için src klasörü altında database_layer.rs dosyasını oluşturmakla işe başlıyoruz. Daha önceki makalelerimizde kullandığımız CALISAN tablosuyla yolumuza devam ediyoruz.
Yukarıda da bahsettiğimiz gibi serialization işlemleri için serde ekliyoruz. Calisan yapısınında seriazlize işlemini yapabilmesi için aşağıdaki gibi tanımlıyoruz.

Geneltanımlarımızı yaptıktan sonra veritabanına işlem yapacak olan fonksiyonlarımızı eklemeye başlıyoruz. Ekleme ve getirme işlemlerini kodumuza ekliyoruz. Fonksiyonalarda referans olarak calisan ve conn (bağlantı) değerlerini almaktadır. & işareti referans veriyi işaret etmektedir. Dönüş değeri olarak conn.last_insert_id() son eklenen veriyi dönmekteyiz.

Sicil ile çalışan bilgisini alma fonksiyonunu ekliyoruz. Dönüş bilgisi olarak Calisan yapısını dönecektir.

Web Servis Katmanı

Src klasörü altına web_service.rs dosyasını oluşturuyoruz.actix_web ile web uygulamaları oluşturabildiğimizi söylemiştim. Bu konuda dikkat edilmesi gereken konu diğer kütüphaneler ile uyumluluğudur. Bazen versiyonlar arasında uyumsuzluklar olabiliyor.

Çalışan bulma servisimiz ile /product/1 çağrım örneğinde ki gibi bir çağrım yapıyoruz. Çağrım sonunda şayet veri bulursan JSON formatında çalışan bilgisini döneceğiz. Bir hata durumunda ise InternalServerError() ile dönüş yapıyor olacağız. Dikkat ederseniz web::Data şeklinde bir tanımlamamız var bununlada uygulamada kullacağız paylaşımlı tipleri uygulamamıza yolluyoruz. Biz bu örnekte connection bilgisini bu şekilde katmanımıza gönderiyor olacağız.

Çalışan ekleme fonksiyonunda POST işlemini kullanarak Calisan verisini gönderiyor olacağız. web::Json ile json nesnesinden dönüşümü yapmaktayız.

Ana Uygulama

Main fonksiyonumuzu üzerinde düzenleme yapıyor olacağız. Diğer uygulamamızdaki mysql bağlantısını da kullanıyoruz. Daha sonra bir HttpServer oluşturacağız. Bu Sunucuya web servis methodlarımızı register ederek işlemlerimize devam ediyoruz.

Sunucumuz ayağa kalktıktan sonra herhangi bir internet tarayıcı üstünden 127.0.0.1:8080/calisan/1 çağrımı ile servisimizi deneyebiliriz. Buradaki 1 yerine sizin sisteminizde kayıtlı olan sicil numarası ne ise kullanabilirsiniz.

rust service result

Sürçi lisan ettiysek affola

Kaynaklar :
https://docs.rs/
https://actix.rs/actix-web/actix_web/

Email adresiniz yayınlanmayacaktır.