The Way It Was
Pada common practice di lapangan, saat kita berperan sebagai backend developer, tentu sangat penting untuk berkomunikasi dengan frontend developer mengenai API apa saja yang kita sediakan dan dapat digunakan oleh tim frontend. Typically yang diperlukan adalah dokumentasi yang sering disebut sebagai techdoc atau technical documentation. Lalu bagaimana bentuk dokumentasi ini?
Cara paling mudah ya bisa saja dengan dokumen sederhana seperti Word atau Excel. However karena program-program semacam ini tidak spesifik diperuntukan untuk pembuatan dokumentasi, it could lead to some drawbacks.
- Sulit untuk membuat dokumentasi yang jelas, detil, terstruktur dan terorganisir dengan baik. If only dibuat standarisasi format mengenai bagaimana dokumen ini dibuat, dokumentasi semacam ini akan sulit untuk dikonsumsi.
- Additional softwares are needed. Dengan menggunakan tools seperti Word atau Excel, kita memerlukan software tersebut ter-install dan tanpa adanya program ini, dokumentasi tidak dapat digunakan.
- Dokumen semacam ini biasanya statis dan tidak seamless untuk proses update dan collaboration. Artinya, apabila changes terjadi pada API, dokumentasi ini akan dengan cepat menjadi outdated dan sulit di-maintain.
How Swagger will Change Your Life
Saya ingin memperkenalkan pada fellowdevs sebuah tool yang dapat membantu kita dalam men-deliver API kita melalui sebuah UI yang interaktif dan dapat langsung di-test oleh tim frontend.
Tool yang saya maksud ini adalah Swagger. Swagger ini open source dan sudah cukup banyak integrasinya ke banyak platform salah satunya yang akan kita gunakan, Spring Boot. Konfigurasinya pun sangat mudah, bahkan I have to say it's too easy 😂
Lalu bagaimana bentuk Swagger ini kok bisa sampai memudahkan delivery API kita? Nah, nantinya, dokumentasi API kita yang dapat dikonsumsi oleh tim frontend berbentuk demikian.
Nice, isn't it? Bahkan, Swagger memungkinkan kita untuk melakukan hit ke endpoint API tersebut, sehingga penerima dokumentasi dapat langsung melakukan verifikasi dengan cepat (rapid testing) apakah API yang kita sediakan dapat mereka pergunakan atau tidak.
Selain itu, Swagger dirancang khusus untuk keperluan dokumentasi API dan sudah sesuai dengan standar Open API. Oleh karena itu hasil dokumentasi dari Swagger dapat dengan mudah dan jelas untuk digunakan oleh para developer, seperti frontend devs. Ditambah lagi, Swagger juga sudah menyediakan fitur-fitur seperti data validation, code generation dan integrasi ke banyak development tools. Swagger menjamin dokumentasi yang dihasilkan menjadi tetap akurat dan updated dengan effort yang minim.
Let's Do It
Untuk mencoba menggunakan Swagger, kita akan menggunakan project backend API yang saya tulis untuk materi program BCA Advisory Program yaitu Advisory Program 2022 (Chapter 1) : Create Your First API.
Add Dependencies
Tambahkan dependency Swagger pada
pom.xml
.<!-- SWAGGER --> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-boot-starter</artifactId> <version>3.0.0</version> </dependency> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger-ui</artifactId> <version>3.0.0</version> </dependency>
Configure Swagger
Selanjutnya buat file baru untuk melakukan konfigurasi Swagger. Pada case saya, saya buat class
SwaggerConfig.java
di dalam folder /com/bca/adam/config/
. Tambahkan konfigurasi Swagger berikut.package com.bca.adam.config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import springfox.documentation.builders.PathSelectors; import springfox.documentation.builders.RequestHandlerSelectors; import springfox.documentation.spi.DocumentationType; import springfox.documentation.spring.web.plugins.Docket; @Configuration public class SwaggerConfig { @Bean public Docket api() { return new Docket(DocumentationType.SWAGGER_2) .select() .apis(RequestHandlerSelectors.basePackage("com.bca.adam")) .paths(PathSelectors.any()) .build(); } }
Ini adalah konfigurasi minimal yang perlu kita lakukan untuk Swagger. Perlu diperhatikan bahwa kita mendefinisikan
basePackage
untuk Swagger melakukan scanning terhadap komponen-komponen di dalam project kita. Ubah value properti ini sesuai dengan struktur project kalian.Enable Swagger and WebMVC
Berikutnya, kita perlu mengaktifkan Swagger dan WebMvc. Aktifasi Swagger dapat kita lakukan melalui anotasi
@EnableSwagger2
. Sedangkan WebMvc diaktifkan dengan anotasi @EnableWebMvc
. Sebagai informasi, Swagger UI sudah menyediakan UI-nya sendiri, dimana di dalamnya tentu terdapat komponen-komponen view. Spring, memerlukan konfigurasi view resolver apabila digunakan untuk membuat aplikasi web yang dapat menghasilkan UI. Salah satu syaratnya, dengan mengaktifkan modul MVC di dalamnya. Inilah alasan mengapa kita memerlukan aktifasi WebMvc.Masih berhubungan dengan view resolver, kita perlu memberi tahu Spring, bahwa kita menggunakan resolver dari internal. Resolver ini digunakan agar Spring dapat me-render halaman UI Swagger tadi. Tambahkan konfigurasi
@Bean
berikut.package com.bca.adam; ... import springfox.documentation.swagger2.annotations.EnableSwagger2; @SpringBootApplication @ComponentScan(basePackages = "com.bca.adam") @EnableWebMvc @EnableSwagger2 public class AdamApplication { ... @Bean public InternalResourceViewResolver defaultViewResolver() { return new InternalResourceViewResolver(); } }
Show Time!
As easy as it looks, dengan menggunakan Swagger, kita baru saja membuat dokumentasi API yang jelas, interaktif, mudah digunakan, dan terorganisir hanya dalam 3 langkah! Amazing bukan? Bayangkan apabila kita perlu membuat dokumen ini menggunakan Word atau Excel 😵💫
Untuk mengakses dokumentasi kita, cukup buka browser dan arahkan ke URL aplikasi kita dengan tambahan path
/swagger-ui/
. And voila!Explore-lah untuk mengetahui apa saja yang sudah di-generate untuk kita. Swagger memiliki konfigurasi yang sangat configurable dan mudah, konfigurasi kita tadi adalah bare minimum saja. Fellowdevs dapat lakukan konfigurasi sendiri sesuai official docs mereka ya.
Sekarang, kita tinggal deploy aplikasi kita ke shared server atau deployment environment lainnya seperti cloud dan kemudian cukup berikan URL ke frontend developer 🎉