REST

REST (Representational State Transfer) adalah gaya arsitektur untuk sistem terdistribusi yang dirumuskan Roy Fielding dalam disertasinya pada tahun 2000. Gaya ini didefinisikan lewat seperangkat constraint: client-server, stateless, cacheable, uniform interface, layered system, serta code-on-demand yang bersifat opsional.

Praktik yang biasa disebut "REST API" sehari-hari umumnya hanya mengadopsi sebagian constraint tersebut, yaitu resource URI, HTTP methods, dan status code pada atas protokol HTTP.

Resource dan representasi

Resource adalah konsep yang diidentifikasi oleh URI, misalnya sebuah pesanan atau produk. Representasi adalah data yang dipertukarkan, misalnya dokumen JSON atau XML yang menggambarkan resource pada suatu waktu. Method ditujukan kepada resource, bukan kepada format representasinya, sehingga JSON dan XML adalah format serialisasi, bukan bagian dari definisi REST; konvensi JSON dibahas di JSON APIs, sementara web service SOAP mengilustrasikan ujung kontrak formal pada Level 0 Richardson Maturity Model; lihat SOAP.

Semantik method dan status

Method Safe Idempoten Catatan
GET Ya Ya Hanya membaca; tidak dimaksudkan mengubah state.
POST Tidak Tidak Memproses data; membuat resource adalah salah satu kasus umum.
PUT Tidak Ya Menggantikan state resource target dengan representasi yang dikirim.
DELETE Tidak Ya Menghapus resource target.
PATCH Tidak Tidak dijamin Perubahan sebagian; idempotensi bergantung operasi yang didefinisikan.

Status code menyampaikan hasil: 2xx sukses seperti 200 dan 201, 3xx redirection, 4xx kesalahan client seperti 400 dan 404, serta 5xx kesalahan server. Client membaca status sebelum menafsirkan body.

Statelessness

Setiap request wajib memuat seluruh informasi yang dibutuhkan server untuk memprosesnya. Server tidak menyimpan konteks antar request, sehingga identitas dan kredensial dikirim pada setiap permintaan. Konsekuensinya, Authentication does not replace authorization on each request tetap berlaku per request, dan penyimpanan state bergeser ke client atau ke penyimpanan bersama di luar handler request.

Hubungan dengan lainnya

APIs menempatkan REST sebagai satu bentuk HTTP API, bukan definisi seluruh API. Backend Development merangkum panduan Microsoft bahwa desain resource-oriented sebaiknya tidak menyalin struktur tabel database.

GraphQL menumpuk operasi pada satu endpoint dengan schema bertipe dan selection set milik client, sementara REST membagi operasi pada banyak URI dengan response yang ditentukan server serta memanfaatkan semantik caching HTTP secara langsung. HTTPS protects transit, not application logic tetap berlaku karena REST tidak mengatur kerahasiaan transport.

Sumber