OK
Ktor – nowy serwer w Kotlinie

Ktor – nowy serwer w Kotlinie

Ktor – nowy serwer w Kotlinie

Ktor to bardzo świeży serwer napisany w Kotlinie wykorzystujący na maksa dobro, które przyszło z tym językiem. Także mamy korutyny, dużo przydatnego DSLa i wygodne dodawanie konfiguracji poprzez ‘extension methods’

Jak wygląda kod?

Pierwszą przydatną obserwacją odnośnie Ktor-a jest istnienie opcji pełnej konfiguracji w kodzie – (choć oczywiście można mieć plik z konfiguracją), dzięki czemu kompilator zwaliduje szybciutko czy nie mamy gdzieś byka : I w zasadzie jeden z najprostszych przykładów startowania serwera wygląda o tak :

  • Po pierwsze zobacz, że definicja tego na czym uruchamiamy (Netty) jest ładnie odizolowana od tego co uruchamiamy.
  • Wyrażenia ‘routing’ oraz ‘get’ wyglądają jak słowa kluczowe języka. Jest to dobre użycie kotlinowego DSLa. Polecam przestudiować samemu jak to działa pod spodem.

No ale pierwsza obawa jaka się pewnie ujawni to jak to będzie wyglądać gdy logika się skomplikuje. “Czy nie zostaniemy z gigantycznym Arrow Code?”. Otóż aplikację Ktor-a bardzo ładnie się modularyzuje.

Moduły

Zamiast deklarować wszystko w jednym miejscu możemy zadeklarować je w osobnych modułach. Moduły to nic innego jak rozszerzone metody klasy Application

I następnie przekazujemy namiary na definicję modułu do Silnika Serwera i możemy jechać.

No i również Moduł nie musi być w całości zdefiniowany w jednym miejscu. Wykorzystując Extension Methods możemy podobnie stworzyć osobną definicję routingu -> tym razem rozszerzamy definicję klasy Routing.

Co jeszcze znajduje się w module? Do tej pory widzieliśmy jedynie definicję routingu ale może tam być znacznie znacznie więcej ciekawych rzeczy…

“Features”

Moim zdaniem bardzo oryginalnie wygląda to jak Ktor podchodzi do dodawania nowych funkcji serwera. Na początku dostajemy “goły” routing. Ale jeśli tylko chcemy mieć obsługę json to wystarczy tylko takie małe coś w module dodać:

No i rozszerzenie jest już w zasadzie zainstalowane. Teraz tylko dodatkowa konfiguracja określi parser i resztę takich kosmetycznych ustawień.

Filtry

I ponownie wszystko definiuje się wygodnie w kodzie funkcjami. Poniżej ilustracja i gładko przechodzimy do omawiania.

Mamy do wyboru kilka faz gdzie możemy wpiąć swój interceptorek, nic tylko korzystać :

(tak drodzy programiści Scali – w kotlinie też mamy ‘Companion Objects’) I jak już wybierzemy daną fazę to możemy zrobić to co wasi pradziadkowie robili na filtrach obok servletów w 1856 .

Testowanie

Dobrym patentem takiej architektury gdzie definicje są wygodnie oddzielone jest łatwość testowania tychże definicji. Także gdy mamy takie moduł :

Wystarczy w teście taki moduł załadować do silnika testowego :

I możemy działać z udawanymi requestami, które dają prawdziwe odpowiedzi wpadające prosto w nasze asercje

Podsumowując

Ktor jest produktem dosyć młodym i w moim odczuciu można zacząć z nim eksperymentować ale trzeba być czujnym przy wdrożeniach bo jakiś czas pewnie będzie się stabilizował a w repo mają około 200 zgłoszeń : https://github.com/ktorio/ktor. No i to czego nie dotknęliśmy w tym artykule to korutyny na których zbudowany jest Ktor i to ma szansę działać naprawdę szybko. Trzeba być czujnym i zobaczyć co czas pokaże. Na pewno nauka Ktor-a to kolejne dobre ćwiczenie by popracować sobie z kotlinowym DSLem i lepiej nauczyć się tych konstrukcji.

ul. Jaracza 62
90-251 Łódź
Bitnami