Design Principles RESTful API

Alfi Salim
4 min readAug 9, 2021

--

Source from pixabay by Firmbee

Pada tulisan sebelumnya, kita telah membahas mengenai API, REST API dan RESTful API, yaitu istilah yang sering digunakan namun masih membingungkan bagi sebagian orang. Tulisan ini merupakan lanjutan dari pembahasan tersebut, dimana pada tuilsan ini kita akan membahas mengenai hal-hal yang perlu diperhatikan agar web services yang kita buat dapat dikatakan sebagai RESTful API.

Berikut merupakan prinsip-prinsip inti RESTful API yang akan kita bahas satu persatu:

  • Client-Server
  • Uniform Resource Interface
  • Resource Addressability
  • Resource Representation
  • Cacheable
  • Statelessness
  • Layered System
  • Code-on-Demand
  • Hypermedia as engine of state (HATEOAS)

Client-Server

RESTful API memisahkan proses antara client dan server, hal ini merupakan basic sekaligus inti dari penerapan RESTful API. Jadi nantinya, akan terdapat 3 komponen utama dalam prosesnya, yaitu server, client dan resource yang akan dimanage melalui sebuah jaringan HTTP (Hyper Text Transfer Protocol).

Client-Server system dapat diimplementasikan dan didistribusikan secara independen menggunakan teknologi dan Bahasa pemrograman apapun selama client dan server dapat saling memahami interface yang digunakan (Uniform Resource Interface).

Uniform Resource Interface (URI)

URI merupakan keseragaman interface yang digunakan agar client, server dan jaringan dapat saling berinteraksi. Mereka secara konsisten beroperasi pada 4 poin uniform interfaces, yaitu:

  • Identifikasi sumber daya
  • Manipulasi sumber daya melalui representasi
  • Self-descriptive message
  • Hypermedia As The Engine Of Application State (HATEOAS)

Sumber daya diakses dan dimanipulasi menggunakan metode sesuai HTTP Protocol Standard (GET, POST, PUT, DELETE dll). Masing-masing metode dapat dikenali untuk melakukan suatu proses yang diharapkan.

Resource Addressability

Resource addressability merupakan kemampuan web services dalam mengelola dan mengekspos resource yang ada. Dalam RESTful, Semua data baik itu gambar, text, video, audio, hingga source code merupakan resource yang harus dimanage dengan baik dalam web services, termasuk bagaimana caranya mengekspose resource tersebut. Semua resource diidentifikasi secara unique dan dimanage melalaui sebuah URI (Uniform Resource Identifier) yang sesuai.

Resource Representational

Karena client dan server diimplementasi dan didistribusikan secara independen, maka harusnya client tidak perlu mengetahui kompleksitas internal yang terdapat pada server. Untuk saling berkominikasi, mereka menggunakan resource yang telah direpresentasikan (misalnya melalui format JSON, XML dll) yang mewakili keadaan sebenarnya dari resource. Jenis representasi ditentukan melalui header message HTTP yang memungkinkan client dan server memproses representasi dengan benar.

Cacheable

Penting dalam RESTful API untuk mengimplementasikan cache. Cache berguna sebagai penyimpanan data response dalam jangka waktu tertentu. Data response yang dicache dapat membantu untuk mengurangi latensi pada client, meningkatkan performa aplikasi secara keseluruhan, mengontrol load pada server dsb. Dengan memanfaatkan cache, kita dapat mengurangi cost web services secara keseluruhan.

Statelessness

Interaksi antara client dan server dilakukan secara stateless, artinya dalam setiap interaksi, client perlu menyertakan semua informasi kontekstual yang dianggap relevan. Server tidak bertanggung jawab untuk menyimpan status interaksi apapun dari client.

Setiap interaksi bersifat independen, tidak bergantung pada interaksi sebelumnya atau sesudahnya. Semua kompleksitas interaksi ditanggung jawabkan kepada masing-masing client, sehingga dengan demikian, server mampu melayani client dalam jumlah yang lebih besar.

Layered System

Implementasi RESTful API sangat memungkinkan untuk menggunakan layered system. Layered system merupakan system beralapis yang terdapat pada schema RESTful API kita. Sederhananya, nantinya dalam sisi server akan terdiri dari beberapa lapis server, contohnya pada gambar berikut:

source: nginx

Pada gambar diatas, server terdiri dari 2 layer, dimana layer terdepan adalah server nginx sebagai gateway. Semua client yang ingin berinteraksi dengan server lain harus melelaui server nginx tersebut. Layered system ini bisa dimanfaatkan sebagai load balancer, untuk keperluan security, menyimpan cache response dsb.

Code-on-Demand

Code-on-demand bisa dikatakan sebagai design principle yang bersifat opsional, yang dapat disesuaikan dengan kebutuhan saat mengembangkan web services. Seperti yang sudah kita bahas pada poin resource addressability, semua hal dari sisi server akan dianggap sebagai resource, begitu juga dengan source code. Sederhananya code-on-demand dapat mengembalikan response berupa source code yang dapat langsung dieksekusi oleh client.

Hypermedia as engine of state (HATEOAS)

HATEOAS merupakan pendekatan dalam format dokumen untuk menyematkan tautan yang akan mengarah pada service dan informasi lain. Hal ini diperlukan karena in real case, sangat memungkinkan server mengalami perubahan secara independen dari client, oleh sebab itu, hypermedia berfungsi untuk menyusun kumpulan informasi yang kompleks dari berbagai macam sumber.

Sederhananya, semua perubahan yang dilakukan server akan terdokumentasi dengan baik dan memungkinkan untuk client mengetahui perubahan apa saja yang dilakukan oleh server. Berikut contoh HATEOAS:

source: [1]

Pada gambar diatas, response yang dikembalikan berupa format XML, dimana response tersebut menyertakan link yang berelasi pada resource yang relevan. Singkatnya, client akan mengetahui resource lengkap dari request yang diminta.

REFERENSI

[1] S. Patni, Pro RESTful APIs Design, Build and Integrate with REST, JSON, XML and JAX-RS. 2017.

[2] C. Rodríguez et al., “REST APIs: A large-scale analysis of compliance with principles and best practices,” Lect. Notes Comput. Sci. (including Subser. Lect. Notes Artif. Intell. Lect. Notes Bioinformatics), vol. 9671, pp. 21–39, 2016, doi: 10.1007/978–3–319–38791–8_2.

--

--