Scala ve Akka Http ile Rest API -1

0 1,814

Serinin devamı amacıyla temel Scala bilgisi için önceki yazılara aşağıdaki linklerden ulaşabilirsiniz.

 

Bu yazıda Akka Http ve Scala ile basit Rest API yazmaya odaklanacağız.

Scala için IntelliJ kullanıyorum. sbt Scala’da build tool siz de yeni bir sbt projesi açarak başlayabilirsiniz.

Versiyonlarla ilgili sorun yaşadığım için aşağıdaki versiyonlar önerdiğim versiyonlar.

  • scala : 2.13.7
  • sbt : 1.5.8
  • Akka : 2.6.8
  • Akka Http : 10.2.7

Dependencies

 

Bir önceki yazıda Actor‘lerden bahsetmiştik ve mailbox‘ları olduğunu söylemiştik. Actor class’ına gittiğimizde temelde aşağıdaki iki methodu göreceğiz. . final bir methodu override edemiyoruz ve receive methodu ise abstract method olduğu için override etmemiz gerek. Hatırlamadıysanız önceki yazıların üzerinden geçebilirsiniz.

 

ProductService adında bir Actor oluşturarak başlıyoruz ve Actor class’ından extends ediyoruz. Bu arada Actor class’ını incelerseniz bir trait olduğunu göreceksiniz. ActorLogging ise log’lama için kullanıyoruz.

sender() methodunu görüyoruz Actor class’ı içerisinde olduğunu söylemiştik mesaj göndermek için !(ünlem). Buradaki ünlem ise aşağıdaki gibi.

Bir diğer adım ise server class’ımız. RestAPIServer isminde object oluşturuyoruz ve App’den extends ediyoruz. App bir Scala class’ı ve uygulamanın çalışması için gerekli main methodu içeriyor.

Json Marshalling

 

Şimdi product listesi hazırlayıp bunu Product Actor’üne gönderelim ve ekleme yapalım.

Şimdi de gelen isteği yakalaması için bir handler yazmamız gerek. mesaj göndermek için görmüştük şimdi de yani ask görüyoruz. Önceki yazıda da belirttiğimiz gibi Actor Model’de Java’daki gibi nesnenin state’ine direkt olarak erişmiyoruz. Actor’e soruyoruz ve belirttiğimiz timeout süresi içerisinde cevap bekliyoruz. AskSupport içerisinde detaylı implemantationa ulaşabilirsiniz.

Artık browser üzerinden belirtiğimiz path’e giderek sonuca ulaşabiliriz.

Bütün kod incelemek için;

https://gist.github.com/cemdrman/2392d7498c7d7c977a4b9c59b1bc2d9a

 

Faydalı olması dileğiyle.

Email adresiniz yayınlanmayacaktır.