Sunday, December 16, 2018

Building Reactive Rest API using Spring Webflux Part 2

Setelah membahas teori pada blog sebelumnya, pada part 2 ini akan dijelaskan bagaimana membuat reactive rest api menggunakan Spring WebFlux. Pada contoh ini saya akan membuat blog service 

Buatlah project dengan membuka alamat Spring Initializr, dan tambahkan beberapa depedencies sebagai berikut :



  • Reactive Web : Dependency ini untuk Spring WebFlux
  • Reactive MongoDB : Dependency ini untuk reactive driver untuk database MongoDB (NoSQL)
  • Lombok : Dependency ini hanya optional yang digunakan agar tidak perlu membuat setter getter, constructor, toString(), hashCode(), equals() pada class tertentu seperti model atau DTO
Lalu generate project, dan project akan didownload berupa zip, kemudian  extract lalu buka menggunakan Intellij IDEA (Bisa juga eclipse atau NetBeans).

Saya akan membuat reactive rest api dengan 2 cara yaitu menggunakan annotations dan Functional

Menggunakan annotations

Dalam membangun reactive rest api menggunakan Spring WebFlux dapat juga mengikuti stye yang sama seperti Spring MVC yaitu dengan mengunakan annotasi.
Untuk membuat blog service, saya mendefiniskan beberapa kelas dan interface :
  • Blog: Sebuah model class yang merepresentasikan blog pada service ini
  • BlogRepository : Sebuah interface yang nantinya akan men-generate query-query untuk blog menuju dan dari MongoDB
  • BlogServiceImpl  : Sebuah class yang digunakan untuk berinteraksi dengan BlogRepository untuk CRUD ke MongoDB
  • BlogService : Ketika membuat aplikasi, direkomendasikan untuk membuat layer ini sebagai interface antara class controller dan class service impl
Membuat sebuah class model bernama Blog.java 


Class Blog adalah POJO class sederhana yang berisi id, title, content dan author. Ada beberapa anotasi yang digunakan pada class ini diantaranya :
  • @Document : digunakan untuk mengidentifikasi itu sebagai Document MongoDB, Spring Data akan memetakan Document ke Collection di MongoDB
  • @Data : digunakan untuk men-generate setter getter, tostring(), equals() dan hashCode()
Membuat sebuah interface yang bernama BlogRepository.java


BlogRepository adalah interface Spring Data, yang berarti bahwa kita mendefinisikan interface dan Spring Data akan menghasilkan kode yang mengimplementasi interface itu. Pada interface ini, interface ini meng-extends ReacticveMongoRepository, yang mendefiniskan metode-metode reactive yang mengembalikan mono atau flux.
  • Mono<Book> save()
  • Flux<Book> saveAll()
  • Flux<Book> findById()
  • Mono<Boolean> existById()
  • Flux<Book> findAll()
  • Flux<Book> findAllById()
  • Mono<Long> count()
  • Mono<Void> delete()
  • Mono<Void> deleteById()
  • Mono<Void> deleteAll()
  • Flux<Book> insert()
Query method yang mengembalikan satu elemen seperti contohnya findById mengembalikan Mono<Blog>, Query metho yang mengembalikan lebih dari satu elemen seperti findAll mengembalikan Flux<Book> dam metode untuk delete blog mengembalikan Mono<Void> yang artinya tidak ada pengembalian tetapi ketika operasi selesai akan mempublikasikan pemberitahuan jika operasi telah diselesaikan.

Membuat sebuah interface yang bernama BlogService.java


Membuat class bernama BlogServiceImpl.java yang mengimplementasi Blogservice



Anotasi @Service digunakan untuk mengidentifikasi bahwa class ini adalah class service yang mewakili fungsi bisnis Dalam contoh  service diatas, fungsi bisnis hanya melakukan operasi crud ke repository, Jika kita perlu menambahkan logika yang lebih kompleks pada query atau pada object, disinilah kita melakukannya.

Membuat class bernama BlogController.java


Dari code diatas, sekilas tidak ada perbedaan yang signifikan jika dibanding dengan Spring MVC. Satu-satunya perbedaan adalah pada semua method mengembalikan tipe reactive yaitu mono dan flux dan juga menggunakan driver MongoDB yang reactive. Meskipun nyaris tidak ada perbedaan tetapi implementasinya sangat berbeda. Spring WebFlux akan memanggil metode handler, akan menangkap respons secara reactive dan kemudian memanfaatkan Reactor untuk menunggu respons yang akan di publikasikan, semua secara asynchronous.


Kesimpulan :
Spring WebFlux adalah Spring Reactive Framework yang menggunaan library Reactor untuk mengolah request dari web secara asynchronous atau non-blocking. Spring WebFlux diperkenalkan di Spring Framework 5, framework ini akan terus berkembang namun framework dan library-library cukup untuk membangun aplikasi web yang sangat scalable dan reactive.

Sekian pembahasan tentang membangun reactive rest api menggunakan Spring WebFlux, semoga membantu bagi teman-teman yang sedang mempelajari framework ini. Terimakasih :))


Referensi :

No comments:

Post a Comment