Apa Itu Restful Api?

RESTful API: Apa itu RESTful API?

Apa Itu Restful Api?

Apa itu RESTful API?

Integrasi Aplikasi

Saat membuat aplikasi, sering sekali kita akan melakukan integrasi dengan aplikasi lain. Baik itu aplikasi yang kita buat sendiri, ataupun aplikasi yang dibuat oleh pihak lain, misal:

  • Saat kita membuat toko online, sistem akan terintegrasi dengan sistem logistic untuk mengelola pengiriman barangnya.
  • Saat kita membuat aplikasi belajar online, sistem akan terintegrasi dengan payment gateway untuk menyediakan layanan pembayaran kelas online.
  • Saat kita membuat aplikasi mobile, aplikasi kita akan terintegrasi dengan sistem kita yang terdapat di server untuk mengirim atau mengambil data.

Cara Integrasi Aplikasi

Secara garis besar, terdapat 4 cara integrasi antar aplikasi, yaitu:

  • File Sharing
  • Database Sharing
  • Remote Procedure Invocation
  • Messaging

File Sharing

  • File Sharing merupakan integrasi aplikasi dengan cara berbagi file.
  • Integrasi menggunakan file sharing adalah integrasi yang paling mudah dilakukan dan masih banyak dilakukan sampai sekarang.
  • Biasanya aplikasi yang memiliki data akan membuat file (misal excel, csv, text, json), dan aplikasi yang membutuhkan data akan membaca data tersebut dari file.
  • File Sharing sangat bermanfaat ketika integrasi dilakukan antar aplikasi yang tidak terhubung secara langsung

Diagram File Sharing

Diagram File Sharing - Apa Itu Restful Api
Diagram File Sharing – Apa itu RESTful API

Database Sharing

  • Database Sharing merupakan integrasi antar aplikasi yang memanfaatkan database untuk berbagi data.
  • Database sharing sangat mudah dilakukan ketika aplikasi berada di tempat yang sama dan bisa mengakses database yang sama.
  • Aplikasi hanya perlu menyimpan data ke database, dan secara otomatis aplikasi lain bisa membaca data tersebut dari database secara langsung

Diagram Database Sharing

Diagram Database Sharing - Apa Itu Restful Api
Diagram Database Sharing – Apa itu RESTful API

Remote Procedure Invocation

  • Remote Procedure Invocation merupakan mekanisme integrasi antar aplikasi dengan cara membuat API yang bisa digunakan oleh aplikasi lain.
  • Aplikasi yang memiliki data akan membuat API, dan aplikasi yang membutuhkan akan menggunakan API tersebut untuk mendapatkan data dari aplikasi tersebut.
  • Remote Procedure Invocation merupakan cara sulit, namun sangat populer dilakukan saat ini.
  • Hal ini karena menggunakan Remote Procedure Invocation, integrasi bisa dilakukan dengan cara real time, dan kompleksitas internal data aplikasi tidak perlu di expose ke aplikasi lain.

Diagram Remote Procedure Invocation

Diagram Remote Procedure Invocation - Apa Itu Restful Api
Diagram Remote Procedure Invocation – Apa itu RESTful API

Messaging

  • Messaging merupakan cara integrasi aplikasi yang memanfaatkan aplikasi message broker atau message bus.
  • Aplikasi yang memiliki data akan mengirim data ke aplikasi message broker, dan aplikasi yang membutuhkan data akan mengambil data dari message broker.
  • Messaging sekilas mirip dengan Remote Procedure Invocation, namun yang membedakan adalah, Messaging tidak real time, kadang butuh waktu sampai data sampai ke aplikasi yang menerima data, sederhananya proses di Messaging adalah Asynchronous, sedangkan proses di Remote Procedure Invocation adalah Synchronous.

Diagram Messaging

Diagram Messaging - Apa Itu Restful Api
Diagram Messaging – Apa itu RESTful API

Pengenalan API

Application Programming Interface

  • API singkatan dari Application Programming Interface.
  • API adalah perantara yang menghubungkan satu pihak dengan pihak lain agar bisa saling berkomunikasi.
  • API berisi kumpulan prosedur, fungsi, cara berkomunikasi atau peralatan untuk komunikasi.
  • Pihak yang terlibat dalam API bisa dalam bentuk perangkat lunak ataupun perangkat keras.
  • API sebenarnya sama dengan Remote Procedure Invocation, hanya saja sekarang lebih populer istilah API dibanding RPI.

Diagram API

Diagram Remote Procedure Invocation - Apa Itu Restful Api
Diagram API – Apa itu RESTful API

Contoh Penggunaan API

  • Saat kita menggunakan sistem operasi, sistem operasi tidak bisa langsung berkomunikasi dengan perangkat keras, sistem operasi membutuhkan API berupa driver yang perlu dipasang terlebih dahulu agar perangkat keras bisa terdeteksi oleh sistem operasi.
  • Saat kita ingin berkomunikasi dengan aplikasi Facebook, kita membutuhkan API dari Facebook agar aplikasi kita bisa berinteraksi dengan aplikasi Facebook.
  • Dan lain-lain.

Contoh Implementasi API

Ada banyak sekali implementasi API yang terdapat di dunia nyata ketika kita membuat aplikasi, misalnya:

  1. Driver Perangkat Keras, sebagai API untuk sistem operasi
  2. SOAP (Simple Object Access Protocol),
  3. CORBA (Common Object Request Broker Architecture),
  4. RESTful API,
  5. Apache Thrift,
  6. Protocol Buffer,
  7. GRPC,
  8. Dan lain-lain

Pengenalan RESTful API

Pengenalan RESTful API

  • REST singkatan dari REpresentational State Transfer.
  • REST dikenalkan tahun 2000 oleh Roy Fielding dalam disertasinya: https://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm.
  • RESTful API merupakan salah satu implementasi API yang memanfaatkan HTTP sebagai protokol komunikasinya.
  • Walaupun SOAP juga berjalan diatas HTTP, namun RESTful API sangat sederhana dibanding SOAP.
  • RESTful API sangat mudah digunakan, dan bisa diadaptasi di semua bahasa pemrograman secara mudah.
  • Saat ini RESTful API sudah menjadi standard API yang banyak digunakan ketika kita membuat sistem yang butuh menyediakan API untuk pihak lain.

Diagram RESTful API

Diagram Restful Api - Apa Itu Restful Api
Diagram RESTful API – Apa itu RESTful API

Kenapa RESTful API?

  • Menggunakan HTTP sebagai protokol komunikasi, dimana sudah sangat populer saat ini dengan banyaknya pengguna Internet.
  • Pembuatan RESTful API sangat mudah karena seperti membuat web pada umumnya.
  • Mudah digunakan oleh client baik itu berupa aplikasi web ataupun aplikasi non web seperti aplikasi desktop atau aplikasi mobile.
  • Ringan dan mudah dimengerti oleh manusia.

Architectural Constraints​

Architectural Constraints​

  • REST (REpresentational State Transfer) merupakan architecture pattern yang dikenalkan oleh Roy Fielding tahun 2000​.
  • REST di desain berjalan menggunakan HTTP, dan sering digunakan sebagai Web Services​.
  • Roy Fielding memperkenalkan beberapa design principal ketika kita akan membuat REST​.

Berikut adalah beberapa design principal agar web services benar-benar sesuai dengan RESTful API​:

  1. Client–server​
  2. Stateless​
  3. Cacheable​
  4. Uniform interface​
  5. Layered system​
  6. Code on demand​

Client Server​

  • Design principal pertama adalah Client Server​
  • RESTful API haruslah memisahkan antara kompleksitas data internal dengan yang akan diekpose ke client​
  • Oleh karena ini, RESTful API haruslah menggunakan arsitektur Client Server, sehingga Client tidak perlu tahu kompleksitas logic yang terjadi di Server​

Diagram Client Server​

Diagram Remote Procedure Invocation - Apa Itu Restful Api
Diagram Client Server​ – Apa itu RESTful API

Stateless​

  • Interaksi antar client dan server dalam RESTful haruslah stateless​.
  • Artinya tiap interaksi harus tidak tergantung dengan interaksi sebelumnya atau setelahnya, dan setiap interaksi harus mengirim seluruh informasi yang dibutuhkan​.
  • Ini mirip dengan stateless di protocol HTTP​.
  • Salah satu kegunaan stateless adalah sehingga mudah untuk di scaling, baik itu jumlah client juga server karena server atau client tidak perlu peduli harus berinteraksi dengan client atau server manapun​.

Diagram Stateless​

Diagram Stateless - Apa Itu Restful Api
Diagram Stateless – Apa itu RESTful API

Cachable

  • Untuk menghemat komunikasi, RESTful API bisa mengimplementasikan Cache.
  • Mirip seperti Cache di HTTP, di client pada RESTful API juga bisa melakukan cache data di local, sehingga tidak perlu selalu meminta data terbaru dari Server.
  • Cara implementasi Cache di RESTful API tidak sesederhana seperti di HTTP, nanti akan kita bahas di materi tersendiri tentang Cache.

Diagram Cacheable

Diagram Cacheable - Apa Itu Restful Api
Diagram Cacheable – Apa itu RESTful API

Uniform Interface

  • Salah satu yang membedakan RESTful API dengan teknologi RPC lain adalah, penggunaan antarmuka komunikasi yang seragam untuk semua pihak (client & server teknologi apapun).
  • Hal ini dikarenakan salah satunya karena RESTful API menggunakan teknologi HTTP yang sudah standard sehingga seragam di semua teknologi atau bahasa pemrograman.
  • Data yang di ekspose di RESTful API juga haruslah generatel, tidak melihatkan kompleksitas internal dari pemilik data, hal ini membuat perubahan apapun yang terjadi pada internal aplikasi, tidak akan berpengaruh dengan data yang di ekspose di API.

Diagram Uniform Interface

Diagram Uniform Interface - Apa Itu Restful Api
Diagram Uniform Interface – Apa itu RESTful API

Layered System

  • Untuk melakukan improvement pada sistem RESTful API, sistem RESTful API juga dapat menggunakan Layered System.
  • Layered System menjadikan sistem bisa disusun sesuai dengan data nya, dan agar kompleksitas pada RESTful API tidak harus diketahui oleh Client.
  • Layer juga bisa digunakan untuk melakukan enkapsulasi aplikasi lama yang tidak memiliki kemampuan RESTful API, atau menjadi load balancer untuk RESTful API lain.

Diagram Layered System

Diagram Layered System - Apa Itu Restful Api
Diagram Layered System – Apa itu RESTful API

Code on Demand

  • RESTful API juga diperbolehkan mengembalikan script yang bisa dieksekusi oleh client jika diperlukan.
  • Hal ini bisa mempermudah dari sisi Client sehingga tidak perlu mengimplementasikan kode terlalu banyak, karena kode bisa dikirim oleh Server.
  • Misal Server mengembalikan kode JavaScript yang akan dieksekusi oleh Client Web, atau mengembalikan Layout XML untuk di render oleh aplikasi Android.
  • Code on Demand adalah design principal yang tidak wajib diimplementasikan ketika kita membuat RESTful API.

Catatan Kecil

  • Design principal ini adalah panduan jika kita ingin membuat RESTful API yang baik.
  • Namun pada kenyataanya, kadang kita melakukan hal-hal yang tidak sesuai dengan design principal.
  • Walaupun masih tetap kita membuat RESTful API, namun kemungkinan RESTful API kita tidak bisa dibilang “truly RESTful API”.

Resource Naming

Resource Naming

  • Banyak orang yang asal dalam pembuatan URL untuk RESTful API.
  • Walaupun pembuatan URL RESTful API sendiri tidak ada standar baku nya, namun alangkah baiknya mengikuti best practice yang ada.

Resource

  • Resource dalam RESTful API adalah data yang sifatnya bisa satu atau banyak.
  • Misal, “customers” adalah kumpulan dari “customer”, dimana “customer” adalah satu data customer.

Gunakan Kata Benda, Bukan Kata Kerja

Contoh Benar:

  1. http://api.example.com/products
  2. http://api.example.com/members

Contoh Salah:

  1. http://api.example.com/get-all-products
  2. http://api.example.com/select-members-table

Gunakan Hirarki

Contoh Benar:

  1. http://api.example.com/products/{productId}/images
  2. http://api.example.com/merchants/{merchantId}/addresses

Contoh Salah:

  1. http://api.example.com/product-images/{productId}
  2. http://api.example.com/merchant-addresses/{merchantId}

Gunakan Action Pada Resource

Contoh Benar:

  1. http://api.example.com/users/login
  2. http://api.example.com/users/forget-password

Contoh Salah:

  1. http://api.example.com/login-user
  2. http://api.example.com/forget-password-user

Gunakan – dan lowercase

Contoh Benar:

  1. http://api.example.com/products/{productId}/warehouse-locations

Contoh Salah:

  1. http://api.example.com/products/{productId}/warehouse_locations
  2. http://api.example.com/products/{productId}/warehouseLocations

Gunakan CRUD pada HTTP Method

Contoh Benar:

  1. GET http://api.example.com/products/{productId}
  2. POST http://api.example.com/products

Contoh Salah:

  1. GET http://api.example.com/get-products-by-id/{productId}
  2. POST http://api.example.com/create-product

Gunakan Query untuk Filter

Contoh Benar:

  1. http://api.example.com/products?name=Indomie
  2. http://api.example.com/products?name=Indomie&page=10

Contoh Salah:

  1. http://api.example.com/products/filter-by-name/{name}
  2. http://api.example.com/products/page/1

Content Negotiation

Content Negotiation

  • Saat membuat Web menggunakan HTTP, maka biasanya content (Body) yang akan kita gunakan akan menggunakan HTML.
  • Pada RESTful API pun, untuk berkomunikasi antara Client dan Server, biasanya menggunakan Body.
  • Ada banyak sekali Body Content yang biasa digunakan di REStful API, seperti JSON (JavaScript Object Notation), XML, dan lain-lain.
  • Namun yang paling populer dan banyak digunakan saat ini adalah JSON.

HTTP Headers

  • Sama seperti pada HTTP, untuk melakukan content negotiation, pada RESTful API akan menggunakan standard HTTP Header : Accept dan Content-Type.
  • Accept digunakan untuk memberi tahu Server, tentang tipe data yang diterima oleh Client.
  • dan Content-Type digunakan untuk memberi tahu Server, tipe data apa yang dikirim oleh Client.

JSON

  • JSON singkatan dari JavaScript Object Notation.
  • JSON adalah tipe data object pada JavaScript.
  • https://www.json.org/

Contoh JSON

[      {          "vacancy_id": "42B878CCAD8D2F90F2DDC6D3034C1782",          "tenant_id": "474596E8D5DFC0396B09BA0F572B6399",          "vacancy_name": "Staff Akuntansi",          "tenant_name": "PT Djakarta Lloyd (Persero)",          "vacancy_base_url": "https://rekrutmenbersama.fhcibumn.id/",          "jenjang": "S1-Perguruan Tinggi",          "stream_name": "Keuangan",          "total_job_available": 200      } ]

Kenapa Menggunakan JSON

  • JSON sangat populer digunakan dalam pembuatan RESTful API saat ini.
  • Data JSON sangat mudah dibuat dan juga dimengerti oleh manusia.
  • JSON tidak hanya mudah dibuat dalam JavaScript, namun hampir di semua bahasa pemrograman.
  • Data dalam bentuk JSON sangat ringan, sehingga cocok untuk digunakan sebagai data komunikasi antara Client dan Server.

Konsisten Menggunakan JSON

  • Tidak seperti SOAP yang format request dan response nya sudah ditentukan, menggunakan RESTful API tidak ada standar baku dalam membuat request dan response.
  • Menggunakan JSON jika tidak dibuat dengan baik bisa terlalu liar, karena memang bisa dibuat sesuka kita.
  • Disarankan untuk membuat standard request dan response agar tidak membingungkan ketika menggunakan RESTful API yang kita buat.
  • Response JSON yang dinamis akan sangat menyulitkan client terutama yang menggunakan bahasa pemrograman static typed.

Contoh Standard JSON (1)

[     "took": 123,     "status": "OK",     "data":     {         "vacancy_id": "42B878CCAD8D2F90F2DDC6D3034C1782",         "tenant_id": "474596E8D5DFC0396B09BA0F572B6399",         "vacancy_name": "Staff Akuntansi",         "tenant_name": "PT Djakarta Lloyd (Persero)",         "vacancy_base_url": "https://rekrutmenbersama.fhcibumn.id/",         "jenjang": "S1-Perguruan Tinggi",         "stream_name": "Keuangan",         "total_job_available": 200     },     "error": null ]

Contoh Standard JSON (2)

[     "took": 123,     "status": "ValidationError",     "data": null     "errors":     {         "vacancy_id": "harus diisi",         "tenant_id": "harus diisi"     } ]

Response Status

  • Selalu gunakan response status code yang sesuai dengan Standarisasi HTTP.
  • Misal jika sukses, gunakan Response Status 2xx.
  • Jika data yang dikirim oleh client tidak valid, gunakan 4xx.
  • Jika terjadi masalah di Server, gunakan 5xx.

Baca selengkapnya tentang daftar kode status HTTP.