Komunikasi antara banyak microservice dilakukan dengan banyak cara. Salah satunya dengan arsitektur REST (Representational State Transfer) dengan menggunakan protokol HTTP.

Contoh sederhananya ketika mengakses sebuah alamat website :

http://dummy.restapiexample.com/api/v1/employees dengan HTTP GET, maka kita akan mendapatkan data dalam bentuk JSON berisikan daftar dummy employee

Disini kita menggunakan HTTP Method/Verb, yaitu GET. Ada beberapa HTTP Method yang lain seperti POST, PUT, PATCH, DELETE. HTTP Method/Verb ini digunakan agar memenuhi konsep State Transfer dari REST itu sendiri, dimana aplikasi client bisa menentukan state/status dari request yang dikirimkan melalui protokol HTTP dengan menggunakan HTTP Method ini.

Dengan kata lain HTTP Method ini adalah sebagai penanda apakah request HTTP ini tujuannya untuk ambil data, buat data baru, update data , atau hapus data.

HTTP Method ini memetakan bagaimana seharusnya request HTTP dikirimkan antara microservice agar memenuhi standar REST, sehingga bisa disebut RESTful API.

Apa pemetaan antara HTTP Method dan status requestnya ?

Baiklah kita akan lihat

HTTP Method Tujuan / Semantik
GET Ambil Data
POST Buat Data Baru
PUT Update Data secara keseluruhan
PATCH Update Data sebagian
DELETE Hapus Data
OPTIONS Minta informasi mengenai opsi komunikasi yang diperbolehkan
HEAD Minta Http header nya saja
CONNECT Minta request ke proxy untuk bikin tunnel ke target
TRACE Minta tracing untuk request http nya

Contohnya :

HTTP Method URL Untuk satu data URL Untuk kumpulan data
GET /karyawan/{idKaryawan} /karyawan
POST /karyawan/{idKaryawan} /karyawan
PUT /karyawan/{idKaryawan} /karyawan
PATCH /karyawan/{idKaryawan} /karyawan
DELETE /karyawan/{idKaryawan} /karyawan

loh kok sama semua untuk URL nya ?, Iya memang, karena begitulah semantik untuk kasus satu data dan juga kasus kumpulan data.

Misalkan kita mau ambil cuma satu data karyawan, maka secara semantik kita memakai HTTP Method GET dengan URL /karyawan/{idKaryawan}, misalnya /karyawan/ID13231. Maka akan dikembalikan data tersebut (jika ada) dalam bentuk JSON misalnya.

Misalkan kita mau ambil SEMUA data karyawan, maka secara semantik kita memakai HTTP Method GET dengan URL /karyawan , dan akan dikembalikan data misalnya dalam bentuk JSON untuk semua data karyawan, bisa dengan pagination ataupun tidak.

Apakah kita bisa mengambil data dengan HTTP Method POST ?

Tentu saja bisa, protokol HTTP memungkinkan untuk melakukan itu. Akan tetapi arsitektur REST membuat batasan yang membatasi hal itu secara konseptual.

Sehingga apabila kita memaksakan melakukan request ambil data dengan HTTP Method POST, maka request HTTP kita tidak memenuhi sebagian persyaratan REST, dan dianggap bukan RESTful API. Tapi tentu saja tetap akan bisa diimplementasikan, karena seperti yang kita ketahui diatas bahwa REST berada di level arsitektural.

Apakah penggunaan semantik URL seperti itu wajib

Tentu saja tidak, tetapi lebih baik iya :).

Membuat request URI dengan memakai HTTP Method yang berbeda tergantung dari status/state yang kita inginkan merupakan kebiasaan baik dan sangat dianjurkan.

Salah satu tujuannya adalah agar komunikasi antara kita dengan pihak yang meng-komsumsi REST API kita bisa lebih mudah dan lebih sepakat karena memenuhi standar dari REST itu sendiri.

Untuk melihat mengenai HTTP Status Code, bisa dilihat di sini