Belajar RESTFul API

 



Kenapa RESTful API banyak digunakan?

  1. Protokol HTTP digunakan sebagai sarana komunikasi, yang mana sudah banyak digunakan oleh pengguna internet di Indonesia
  2. RESTful API dikenalkan sejak tahun 2000 oleh Roy Fielding dalam disertasinya yang berjudul REST Arch Style
  3. RESTful API sangat sederhana dan mudah digunakan dibanding SOAP.
  4. Sudah banyak pihak yang menyediakan API berbentuk RESTful API, sehingga secara industri RESTful API sudah menjadi standar dibanyak tempat.
  5. Fleksibilitas penggunaan, baik itu aplikasi web atau aplikasi non web (seperti desktop atau mobile).

Architectural Constraints

REST (REpresentatiional State Transfer) merupakan architecture pattern yang dikenalkan oleh Roy Fielding pada tahun 2000 yang berjalan menggunakan protokol HTPP dan sering digunakan sebagai Web Services (Layanan yang berjalan di atas web). Pada tahun yang sama, Roy Fiedling sendiri memberikan beberapa design principal saat kita membuat REST.
  1. Client-Server
    1. RESTful API haruslah memisahkan antara kompleksitas data internal dengan yang akan diekspose ke client
    2. Oleh karenanya, RESTful API haruslah menggunakan arsitektur Client Server, sehingga Client tidak perlu tahun kompleksitas logic yang terjadi di Server.
  2. Stateless
    1. Interaksi antar Client dan Server dalam RESTful haruslah stateless. Yang artinya tiap interaksi harus tidak bergantung dengan interaksi sebelumnya atau setelahnya (independen), dan setiap interaksi harus mengirim seluruh informasi yang dibutuhkan.
    2. Sekilas mirip dengan Stateles diprotokol HTTP.
    3. Salah satu kegunaan stateless adalah mudah dalam Scaling, baik itu jumlah client maupun jumlah server karena server ataupun client tidak perlu memperdulikan apakah harus berinteraksi dengan client atau server manapun.
  3. Cacheable
    1. Untuk menghemat komunikasi (bandwidth), RESTful API bisa mengimplementasikan Cache
    2. Mirip seperti cache di HTTP, di client pada RESTful API juga bisa melakukan cache data di local, sehingga tidak perlu selalu memnita data terbaru dari Server
    3. Sayanya, cara implementasi Cache di RESTful API tidak sesederhana seperti di HTTP.
  4. Uniform Interface
    1. Salah satu yang membedakan RESTful API dengan teknologi Remote Protocol Call (RPC) atau Remote Protocol Invocation (RPC) lain adalah pada penggunaan antarmuka komunikasi yang seragam untuk semua pihak baik (Client & Server teknologi apapun).
    2. Hal ini dikarenakan salah satunya karena RESTful API menggunakan teknologi HTPP yang sudah standard sehingga seragam di semua teknologi atau bahasa pemrograman
    3. Data yang diekspos di RESTful API juga haruslah general. tidak melibatkan 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.
  5. Layered System
    1. Untuk melakukan improvement pada sistem RESTful API, sistem RESTful API juga dapat menggunakan Layered System
    2. Layered System menjadikan sistem bisa disusun sesuai dengan datanya, dan agar kompleksitas pada RESTful API tidak harus diketahui oleh Client.
    3. Layer juga bisa digunakan untuk melakukan enkapsulasi aplikasi lama yang tidak memiliki kemampuan RESTful API, atau menjadi load balancer untuk RESTful API lain.
  6. Code on demand
    1. RESTful API juga diperbolehkan mengembalikan script yang bisa dieksekusi oleh Client jika diperlukan.
    2. Hal ini bisa mempermudah dari sisi Client sehingga tidak perlu mengimplementasikan kode terlalu banyak, karena kode bisa dikirim oleh Server.
    3. Misal Server mengembalikan kode JavaScript yang akan dieksekusi oleh Client Web, atau mengembalikan Layout XML untuk dirender oleh aplikasi Android.
    4. Code on Demand adalah design principal yang tidak wajib diimplementasikan ketika kita membuat RESTful API.

Catatan terkait Design Pricipal !!

  • Design Principal ini adalah panduan jika kita ingin membuat RESTful API yang baik.
  • Namun pada kenyataannya, 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

  • Banyak orang yang asal dalam pembuatan URL untuk RESTful API
  • Walaupun pembuatan URL RESTful API sendiri tidak ada standar bakunya, namunalangkah baiknya mengikuti best practice yang ada di industri.

Resource

  • Resource sendiri dalam RESTful API merupakan data yang sifatnya bisa satu atau banyak.
  • Dari mana asal kata Resource, ini berasal dari URL yang digunakan RESTful API dan memiliki kepanjangan "Uniform Resource Locator (URL)" atau sebagai lokasi yang merujuk ke sumber datanya. 
  • Misal, "customers" adalah kumpulan dari "customer", dimana "customer" adalah satu data customer. 
  • Biasanya untuk Resource Naming menggunakan kata benda dan berbentuk jamak.

Gunakan Kata Benda, Bukan Kata Kerja

Contoh yang benar :
  • http://api.example.com/products
  • http://api.example.com/members
Contoh yang salah :
  • http://api.example.com/get-all-products
  • http://api.example.com/select-members-table

Gunakan Hirarki

Contoh yang benar :
  • http://api.example.com/products/{productId}/images
  • http://api.example.com/merchants/{merchantId}/addresses
Contoh yang salah :
  • http://api.example.com/product-images/{productId}
  • http://api.example.com/merchant-address/{merchantId}

Gunakan Action Pada Resource

Contoh yang Benar :
  • http://api.example.com/users/login
  • http://api.example.com/users/forget-password
Contoh yang Salah :
  • http://api.example.com/login-user
  • http://api.example.com/forget-password-user

Gunakan - dan lowercase

Contoh yang Benar :
  • http://api.example.com/products/{productId}/warehouse-locations
Contoh yang Salah :
  • http://api.example.com/products/{productId}/warehouse_locations
  • http://api.example.com/products/{productId}/warehouseLocations

Gunakan HTTP Method pada CRUD (Create Read Update Delete)

GET = Read
POST = Create
PUT = Update
DELETE = Delete

Contoh yang Benar :
  • GET http://api.example.com/products/{productId}
  • POST http://api.example.com/products
  • PUT http://api.example.com/products/{productId}
Contoh yang Salah :
  • GET http://api.example.com/get-products-by-id/{productId}
  • POST http://api.example.com/create-product

Gunakan Query untuk Filter

Contoh yang Benar :
  • http://api.example.com/products?name=Indomie
  • http://api.example.com/products?name=Indomie&page=10
Contoh yang Salah :
  • http://api.example.com/products/filter-by-name/{name}
  • http://api.example.com/products/page/1

Content Negotiation

  • Saat membuat web menggunakan HTTP, maka biasanya content (Body) yang akan kita gunakan akan menggunakan HTML
  • Pada RESTful API pun, untuk berkomunkasi antara Client dan Server, biasanya menggunakan Body
  • Ada banyak sekali Body Content yang biasanya 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

Saat berbicara tentang Content Negotiation maka tidak hanya berbicara soal content (Body), tetapi juga Header yang biasanya menggunakan Standard HTTP Header
  • Sama seperti pada HTTP, untuk melakukan content negotiation, pada RESTful API akan menggunakan standard HTTP Header yang berbentuk : 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 dikirimkan oleh Client.

Komentar