Kali ini kita akan belajar cara melakukan integrasi API Gateway dan Backend services. API Gateway yang kita gunakan adalah Kong, sedangkan Backend Service kita buat menggunakan Spring Boot. Untuk mengikuti materi pada tulisan ini, pastikan teman-teman sudah memasang Kong API Gateway seperti pada materi sebelumnya. Nantinya kita akan melihat bagaimana API Gateway akan meneruskan request yang masuk ke backend service. Oke, yuk kita mulai.
Backend Service
Sebelum kita mulai melakukan integrasi API Gateway, tentunya kita harus punya backend yang menerima request dari API Gateway. Kita akan membuat backend service sederhana menggunakan Spring Boot. Backend yang kita buat ini sederhana saja, yang penting ada endpoint yang bisa menerima request dan memberikan response.
Membuat Backend
Backend yang kita buat adalah User Service yang terdiri dari 4 endpoint, yaitu:
- POST /user
- GET /user
- PATCH /user/{id}
- DELETE /user/{id}
Tapi, di sini kita tidak akan benar-benar mengisi method pada endpoint tersebut. Kita hanya fokus melihat keterhubungan antara API Gateway dengan Backend saja. Untuk mengakomodasi 4 endpoint di atas, kita buat UserController di Spring Boot seperti ini ya:
package com.myapp.user_service;
import org.springframework.web.bind.annotation.*;
@RestController
public class UserController {
@GetMapping("/user")
public String getUsers() {
return "this is detail user";
}
@PostMapping("/user")
public String createUser() {
return "user created successfully";
}
@PatchMapping("/user/{id}")
public String updateUser(@PathVariable String id) {
return "user "+id+" updated successfully";
}
@DeleteMapping("/user/{id}")
public String deleteUser(@PathVariable String id) {
return "user "+id+" deleted successfully";
}
}
Setelah kita buat, mari kita jalankan dan kita test menggunakan insomnia. Pastikan semua endpoint yang kita buat memberikan response 200.

Jika kita jalankan secara langsung sudah berjalan dengan baik, mari kita jalankan di dalam container. Untuk menjalankan di dalam container, kita compile dulu aplikasinya menggunakan perintah mvn package. Setelah kita compile, kita akan mendapatkan folder baru dengan nama target yang isinya seperti ini:

Aplikasi yang akan kita masukkan ke dalam container adalah user-service-0.0.1-SNAPSHOT.jar. Kita buat dulu Dockerfile-nya seperti ini:
FROM eclipse-temurin:21-jre-jammy
ARG JAR_FILE=target/user-service*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java", "-jar", "/app.jar"]
dan docker-compose.yml seperti ini:
services:
user-service:
build:
context: .
dockerfile: Dockerfile
container_name: user-service
Perintah yang ada pada Dockerfile adalah mengcopy file target/user-service*.jar ke dalam container tapi direname menjadi app.jar. Perintah di ENTRYPOINT adalah java -j /app.jar. Dalam docker compose kita menambahkan container_name: user-service. Jadi container kita nanti namanya adalah user-service. Kita tidak harus meng-expose port-nya ke localhost karena kita akan mengakses container dari dalam. Jalankan docker-compose.yml dengan perintah sudo docker compose up -d. Pastikan container user-service sudah berjalan dengan mengetikkan perintah sudo docker ps.

Integrasi API Gateway di Kong
Jika backend sudah berjalan, sekarang kita akan menjalankan Kong dan mulai membuat integrasi API Gateway. Cara menjalankan kong bisa dilihat pada materi sebelumnya. Jika kong dan backend sudah berjalan, maka kita sekarang punya 2 container. Coba perintah sudo docker ps untuk melihat container yang berjalan.
Membuat Network untuk Integrasi API Gateway
Agar kong dapat mengakses user-service, mereka harus terhubung ke network yang sama. Untuk itu mari kita buat network yang menghubungkan mereka. Gunakan perintah berikut untuk membuat network
sudo docker network create kong-network
Gunakan perintah berikut untuk menghubungkan kong dengan kong-network baru tersebut:
sudo docker network connect kong-network kong
Sekarang hubungkan user-service dengan kong-network dengan perintah:
sudo docker network connect kong-network user-service
Selanjutnya kita inspect kong-network untuk melihat 2 container sudah terhubung dengan perintah berikut:
sudo docker network inspect kong-network | grep -A 20 Containers

Membuat Service dan Route di Kong
Jika container sudah terhubung pada network yang sama, sekarang waktunya kita membuat konfigurasi di kong. Pertama, yang kita buat adalah service. Untuk membuat service, kita masuk ke Kong Manager di http://localhost:8002, pilih menu Gateway Service, lalu klik tombol New Gateway Service. Buat isian seperti ini:

Nama service kita isi dengan user-service. Untuk Service Endpoint kita pilih Protocol, Host, Port and Path dan kita isi Host menggunakan nama container, yaitu user-service. Portnya adalah 8080. Jika sudah, kita simpan gateway service tersebut. Setelah tersimpan akan muncul tampilan seperti ini:

Sekarang kita buat Routes yang terkait dengan Gateway Service. Caranya klik Tab Routes pada tampilan di atas, selanjutnya klik tombol New Route. Isi Form New Route seperti ini:

Isilah nama dengan nama yang unik, misalnya user-service-route. Paths harus diisi dengan menyertakan “/”. Untuk methods kita centang GET dulu, method lain kita set kemudian. Simpan pengaturan tersebut jika sudah selesai.
Sekarang kita akan kembali ke insomnia, kita akan coba test pengaturan yang kita buat. Sebelumnya kita mengakses endpoint get user dengan GET http://localhost:8080/user. Sekarang kita telah membuat API gateway, jadi kita mengakses get user dengan GET http://localhost:8000/myapp/user. http://localhost:8000 adalah alamat dimana kong berjalan, /myapp adalah Paths pada Route dan /user adalah endpoint pada backend.

Perhatikan bahwa request ke http://localhost:8000/myapp/user mendapatkan response 200 yang berarti pengaturan kita berhasil.
Skenario Kesalahan
Pada pembuatan route sebelumnya, kita hanya centang method GET saja. Artinya, ketika kita melakukan POST http://localhost:8000/myapp/user akan mendapatkan error seperti ini:

Agar tidak terjadi error 404, kita harus mengaktifkan method POST pada Route. Caranya kita buka kembali pengaturan Route dan aktifkan method POST. Jika sudah diaktifkan, dan kita coba kirim request kembali, pasti hasilnya akan sukses.

Sekarang cobalah untuk mengaktifkan semua method yang dibutuhkan, yaitu GET, POST, PATCH dan DELETE dan cobalah melakukan request ke semua endpoint.
Penutup Integrasi API Gateway
Cukup panjang juga ya penjelasan pada tulisan ini. Tapi, sekarang kita sudah bisa melakukan integrasi API Gateway dengan backend. Jika nantinya ada backend lagi, teman-teman tinggal membuat containernya, lalu mengkoneksikan dengan network, dan membuat service route di Kong. Semoga tulisan yang panjang ini tidak membuat bosan ya. Selamat belajar, semoga berhasil.