Cara Setup Swagger UI dan Prism Untuk Mocking API dan Mendokumentasikannya Menggunakan Docker Compose — Part 1

Dimas Wibowo
3 min readJan 16, 2022

--

Sebagai seorang Backend Developer kegiatan mendokumentasikan daftar endpoint atau spesifikasi teknikal sangatlah diperlukan, tujuannya adalah agar teman-teman seperjuangan seperti Front End Developer dan QA juga dimudahkan pekerjaannya.

Salah satu yang menarik bagi saya adalah ternyata bisa loh kita membuat daftar endpoint yang sudah kita tulis di Swagger file tadi kita host dan menghasilkan data fake dengan menggunakan Stoplight Prism dan tentunya open source, jadi Swagger file yang sudah kita buat tadi walaupun dari sisi Backend belum dikerjakan setidaknya Frontend sudah bisa consume data REST API yang nanti nya akan mengembalikan data random akan tetapi result objectnya identik dengan skema yang sudah kita tentukan di swagger filenya.

Let’s code!

Sebelum kita lanjutkan ngoding, kita harus install dan jalankan dulu nih si Docker nya di local system kalian masing-masing, cara installnya saya tidak akan tulis di sini ya, silahkan lihat di dokumentasinya (Tau google kan ?).

Jika sudah, mari kita buat folder baru dan buat file docker-compose.yaml nya:

# bash
mkdir my-swagger
cd my-swagger
touch docker-compose.yml

Kemudian buka folder my-swagger dengan vscode atau IDE yang kamu suka.

Siapkan File Swagger-nya

Untuk contoh kali ini kita akan menggunakan file swagger yang sudah ada saja dan disediakan oleh Swagger langsung dan simpan di folder docs, jalankan perintah ini untuk download filenya:

# bash
mkdir docs
cd docs
curl https://raw.githubusercontent.com/OAI/OpenAPI-Specification/main/examples/v2.0/yaml/petstore.yaml --output petstore.yaml

Sekarang struktur direktori kita jadi seperti ini:

# bash
my-swagger
├── docker-compose.yaml
└── docs
└── petstore.yaml

Edit file docker-compose.yaml nya, dan kita butuh 3 image service yaitu:

# docker-compose.yamlversion: "2.4"
services:
caddy:
image: caddy
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile
ports:
- "3000:80"
depends_on:
- petstoreService # <- panggil petstoreService ke sini

swagger-ui:
image: swaggerapi/swagger-ui
ports:
- "4000:8080"
volumes:
- ./docs:/usr/share/nginx/html/docs
environment:
URLS: "[
{name: 'Tempat jualan binatang', url: 'docs/petstore.yaml'},
]"

# prism services to mock
petstoreSvc
:
image: stoplight/prism:4
volumes:
- ./docs/petstore.yaml:/tmp/docs/petstore.yaml
command: "mock -d -p 4010 --host 0.0.0.0 /tmp/docs/petstore.yaml"

Lalu kita akan membuat Caddyfile untuk menentukan rute si petstore.yaml nya mau di mock ke mana. Buka terminal, dan di dalam folder my-swagger kita buat file Caddyfile nya:

# bash
touch Caddyfile

dan buka di code editor kalian kemudian isi dengan:

# Caddyfilehttp://localhost

route /petstore/* {
uri strip_prefix /petstore
reverse_proxy petstoreSvc:4010
}

Jika sudah, tinggal kita jalankan perintah docker-compose up -d kemudian jika tidak ada kendala kamu bisa lihat dokumentasi API nya di http://localhost:4000 dan mock nya berada di http://localhost:3000 .

Mari kita test!

Mari kita buka di browser http://localhost:4000 maka hasilnya kurang lebih akan seperti ini:

Dan untuk mock, kita coba hit endpoint GET http://localhost:3000/petstore/pets dengan CURL:

# bash
curl -X 'GET' 'http://localhost:3000/petstore/pets' -H 'accpet: application/json'

Hasilnya kita bisa lihat object untuk id name dan lainnya otomatis digenerate dengan data fake.

link repo untuk tutorial ini bisa lihat di sini

Untuk part 2, kita akan belajar setup Basic Auth untuk halaman dokumentasi swagger ui nya agar tidak sembarang orang yang dapat mengakses nya.

--

--

Dimas Wibowo
Dimas Wibowo

Written by Dimas Wibowo

Hi! I am Dimas Wibowo, a full-stack software engineer based in Jakarta. Currently working as VP of Engineering @karyakarsa.

No responses yet