Rest Template
Pendahuluan
Rest Template merupakan salah satu library REST Client yang disediakan oleh Spring.
Sepertinya memang Spring senang sekali dengan penamaan Template untuk tools client library nya.
Misalnya kita lihat :
- JdbcTemplate
- KafkaTemplate
- RedisTemplate
- ElasticSearchTemplate
- JmsTemplate
- dll.
Ok, balik lagi ke RestTemplate., yang merupakan library REST Client dari Spring.
REST Client itu sendiri adalah :
Tools yang digunakan untuk melakukan pemanggilan API berbentuk REST.
Contoh kasusnya :
- Ketika kita mau mendapatkan data geografi dari API Google Maps, maka kita memanggil API dari Google Map memakai Rest Client.
- Ketika kita mau mendapatkan data cuaca hari ini dari REST API dari provider penyedia data cuaca, maka kita menggunakan Rest Client.
- dll
Didalam menggunakan REST Client, biasanya ada library yang kita gunakan sebagai backbone atau sebagai pendukung.
Misalnya library REST Client :
- Apache HTTP Client.
- Spring RestTemplate.
- Spring WebClient.
- OkHttp
- Apache CXF.
- JBoss RESTEasy
- Google Resting.
- Jersey
- dll.
Dan salah satunya RestTemplate.
Dengan menggunakan library tersebut maka kita akan dimudahkan dalam hal melakukan pemanggilan REST API, melakukan mapping REST Method, HTTP Header, parsing request response dll.
Mengenai REST sendiri bisa dilihat di sini
Apakah RestTemplate masih direkomendasikan ?
Sebenarnya RestTemplate masuk dalam Maintenance Mode semenjak Spring 5.0.
Artinya hanya perubahan kecil dan bug saja yang akan diakomodasi di release release berikutnya.
Pengguna disarankan untuk memakai WebClient yang berbasiskan Reactive untuk penggunaan selanjutnya.
Akan tetapi, penggunaan libraray RestTemplate ini sudah berjalan lama, sehingga tetaplah pantas kita bahas.
Bagaimana Rest Template itu ?
Sebagaimana yang kita lihat bahwa RestTemplate merupakan library REST Client.
Artinya library ini yang akan melakukan request REST ke API yang kita inginkan.
RestTemplate itu sendiri berlandaskan kepada Servlet API dibawahnya.
Servlet API ini dari awal mempunyai model satu thread untuk satu request API, dan bersifat blocking.
Artinya ketika kita melakukan request ke sebuah API memakai RestTemplate, maka request ini akan menunggu response dari server API yang direquest, dan tidak bisa melakukan proses apa-apa selain menunggu.
Tentunya proses menunggu ini dilakukan oleh satu thread saja yang melakukan request.
Thread yang lain bisa melakukan request lain atau proses yang lain.
Setiap kali kita melakukan request menggunakan RestTemplate, maka akan dibuat sebuah object HttpConnection dan akan diclose ketika sudah menerima response.
Hal yang lumrah kaan….
Kita bisa melakukan konfigurasi HttpConnection Pooling untuk melakukan sharing http connection ketika melakukan connection di RestTemplate
Tujuannya seperti Database Connection Pooling, dimana melakukan IO Connection adalah operasi yang cukup memakan sumberdaya yang banyak, sehingga perlu dihemat baik dengan cara pooling, cache, ataupun sharing.
Kita bisa melakukan konfigurasi itu di class PoolingHttpClientConnectionManager
Apakah Rest Template itu thread safe ?
Thread Safe artinya ketika banyak Thread mengakses sebuah objek RestTemplate apakah aman ?
Atau apakah kalau kita menggunakan sebuah object RestTemplate yang sama untuk banyak request secara bersamaan, apakah aman ?
Iya, RestTemplate ini Thread Safe.
Artinya kita bisa menggunakan satu object RestTemplate untuk banyak request.
Artinya thread safe disini adalah request sebuah URL tidak terganggu dengan request terhadap URL lainnya oleh thread yang berbeda.
Hal ini karena RestTemplate tidak menyimpan state request response di object nya.
RestTemplate melakukan delegasi pemrosesan kepada HttpMessageConverters, HttpClientRequest, RequestCallback, ResponseExtractor, dll ketika menerima request terhadap sebuah url API.
Method REST yang ada di Rest Template
Namanya juga library untuk REST API, tentunya ada method-method yang disesuaikan dengan konsep pemanggilan API dengan konsep REST.
Mengenai HTTP Method dijelaskan di sini.
Di RestTemplate tentunya ada method yang berkaitan, yaitu :
HTTP Method | Ukurannya |
---|---|
GET | getForEntity(…) |
HEAD | headForHeaders(…) |
OPTIONS | optionsForAllow(…) |
POST | postForEntity(…) , postForLocation(…), postForObject(…) |
PUT | put(…) |
PATCH | patchForObject(…) |
DELETE | delete(…) |
Umum | exchange(…) |
Penggunaannya disesuaikan dengan URL API yang mau kita panggil.