HTTP Method
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