Dalam software engineering, khususnya Backend engineering role, pasti tidak asing dengan istilah RESTful API. Tidak lain tidak bukan memang itulah pekerjaan yang terlihat sebagai backend engineer, yaitu membuat API agar bisa di consume oleh client side applications. Namun, tidak semua engineers paham apa itu REST Architecture, dan apa hubungannya dengan RESTful maupun REST API.
REST Architecture
Sebelum membahas REST dan RESTful API, kita perlu paham dulu apa itu Arsitektur REST (Representational State Transfer). Roy Fielding pada disertasi-nya yang berjudul “Architectural Styles and the Design of Network-based Software Architectures” menjelaskan bahwa Arsitektur REST merupakan sebuah gaya arsitektur untuk distributed hypermedia system yang menjelaskan prinsip-prinsip software engineering dan memiliki batasan-batasan yang dipilih dari beberapa desain arsitektur jaringan untuk menghasilkan loosely coupled applications yang saling berkomunikasi pada protokol HTTP. Jadi bisa dibilang REST Architecture merupakan hybrid arsitektur karena mengadopsi dari beberapa arsitektur yang pada saat itu sudah ada. REST Architecture memiliki beberapa karakteristika seperti Stateless, Client-Server Architecure, Cacheable, Uniform Interface, Layered System, dan lain-lain. Pada artikel ini tidak akan dibahas semua ya, lebih lengkapnya silakan klik link di atas :p
Distributed hypermedia system mengacu pada beberapa sumber daya yang saling terhubung ke bentuk media lain seperti teks, gambar, video, dan lain-lain.
Berdasarkan keterangan diatas, maka RESTful API mengacu pada sebuah sumber daya pada sebuah aplikasi yang menerapkan prinsip-prinsip REST secara ketat. Berbeda dengan REST API yang masih menerapkan prinsip-prinisp REST namun memiliki beberapa penyesuaian yang umumnya lebih longgar.
Karakteristik REST
1. Stateless
Interaksi antara client dan server tidak boleh terpengaruh kondisi apapun. Sehingga setiap permintaan client harus mengandung semua informasi yang dibutuhkan server untuk memprosesnya dan secara teknikal setiap session tersimpan seluruhnya di sisi client.
Misalnya, sebuah endpoint API tidak perlu mengerti apakah access token yang di simpan oleh client tersebut sudah expire atau belum sebelum access token tersebut di kirimkan ke server untuk proses autentikasi.
Hal ini menghasilkan beberapa manfaat antara lain Improvemed Visibility yaitu mempermudah sistem monitoring untuk melacak, audit, dan menganalisa request. Karena sistem monitoring dapat dengan mudah memahami request tanpa perlu memeriksa konteks dan status sebelumnya. Improved Reliability yaitu kita dapat menganani kegagalan secara parsial. Maksudnya jika ada kegagalan proses engineer dapat dengan mudah memperbaiki tanpa mempengaruhi sumber daya lainnya. Improved Scalability karena setiap permintaan bersifat independen maka server tidak perlu menyimpan informasi status pada setiap request, sehingga tidak membebani sumber daya dan kinerja server.
2. Client-Server Architecture
Pada konsep Separation of Concerns, prinsip ini memisahkan antara kepentingan user interface dan kepentingan server. Pemisahan ini terbukti ampuh dapat meningkatkan portability dan scalability pada kedua sisi dengan menyederhanakannya menjadi beberapa komponen. Selain itu komponen pada setiap sisi juga dapat dikembangkan sesuai kebutuhan bisnis secara independen alias tidak mempengaruhi komponen lain.
3. Cacheable
Kata kunci pada point ini adalah reusable. Namun, pada konteks REST Architecture, Cache mengacu pada penyimpanan hasil keluaran atau response dari pemrosesan sebuah request. Hal ini dapat dilakukan dengan pelabelan pada request (secara implisit maupun eksplisit) apakah response perlu di simpan atau tidak. Apabila response perlu di cache maka dapat kita gunakan kembali keluaran yang telah disimpan untuk response di kemudian harinya. Tidak dijelaskan berapa lama response di simpan, maka dapat di sesuaikan dengan kebutuhan bisnis yang ada.
Keuntungan menerapkan prinsip ini tentu pada peningkatan efisiensi, skalabilitas, dan performa aplikasi dengan cara mereduksi interaksi atau proses berulang yang menghasilkan nilai yang sama. Namun perlu diperhatikan apabila ada kemungkinan perubahan data response di request selanjutnya, maka akan terjadi perbedaan data antara data yang keluar dari cache dan pemrosesan langsung di server.
4. Uniform Interface
Prinsip ini merupakan salah satu yang menjadi keutamaan sekaligus menjadi pembeda antara Arsitektur REST dan arsitektur jaringan lainnya. Secara keseluruhan, sistem arsitektur menjadi lebih mudah dipahami dan interaksi antar sistem dapat terlihat dengan jelas. Dengan penyeragaman ini, arsitektur sistem dapat lebih mendekati loosely coupled dan implementasi perubahan endpoint dapat dilakukan dengan mudah.
Namun, prinsip ini dapat mengorbankan sedikit efisiensi karena sumber daya atau endpoints harus dibuat seragam dibanding dibuat berdasarkan kebutuhan bisnis.
5. Layered System
Arsitektur ini memungkingkan kita menyusunnya secara hirarki dan setiap layer terbatas pada layer yang berkomunikasi dengannya dan tidak lebih. Misalnya service A berkomunikasi dengan service B, maka batasan service A hanyalah sebatas dengan berkomunikasi dengan service B. Walaupun service B berkomunikasi dengan service C, tidak ada sangkut pautnya dengan service A. Maka apabila komunikasi A ke B terlalu lama karena B harus mendapatkan response dari C, maka proses request user akan terhenti.
Selanjutnya
Setelah kita mengenal lebih dekat dengan REST Architecture, selanjutnya kita akan mempelajari REST dan RESTful API pada kesempatan yang lain.