Dalam bahasa REST, apa perbedaan antara sumber daya dan representasi?

9

Pemahaman saya tentang REST yang memungkinkan pemodelan operasi layanan sebagai representasi negara dan transisi dari satu negara ke negara lain menggunakan HTTP. Saya selalu memahami sumber daya sebagai representasi negara sisi layanan sampai baru-baru ini ketika saya membaca artikel ini oleh Jimmy Bogard yang saya tahu sebagai pengembang / arsitek yang cerdas yang dihormati oleh masyarakat. Mengutip pernyataan spesifik dari pos itu

Representasi adalah berbeda sedikit - itu menggambarkan saat keadaan sumber daya (ketika diminta).

Ini membuat saya bingung. Apa pendapat umum tentang topik itu?

Suhas
sumber
1
Anda mungkin ingin memeriksa: Topik apa yang bisa saya tanyakan di sini? . Jajak Pendapat tidak pada topik untuk Programmers.SE.
Adam Zuckerman
2
Nah, semua yang tercantum pada halaman itu tidak memiliki jawaban hitam putih tetapi semua pendapat. Juga, saya tidak yakin bagaimana pertanyaan ini tentang pendapat. Apakah hanya karena saya menggunakan kata "pendapat" dalam pertanyaan saya?
Suhas
Terutama ya. Sayangnya (atau mungkin untungnya), kata "pendapat", "praktik terbaik" dan sejenisnya telah dikaitkan kuat dengan "rongga resonansi kosong di mana otak seharusnya berada," karena kebanyakan orang yang menggunakan istilah seperti itu hanya ingin melihat kawanan di kejauhan dan pergi berlari setelah itu. Orang yang mencari definisi kata seringkali merupakan pelanggar terburuk. Apa masalah spesifik yang Anda coba selesaikan?
Robert Harvey
1
Mengenai pertanyaan Anda, sumber daya hanyalah "sesuatu di internet dengan alamat," sedangkan representasi adalah "cara benda di internet disajikan kembali." Ini bisa berupa file, halaman web atau dokumen JSON. Ini bisa berupa jenis file tertentu, seperti dokumen Word atau spreadsheet. Dalam semua kasus ini, representasi adalah hal yang Anda ambil. "Keadaan sumber daya saat ini" adalah pengakuan bahwa benda itu mungkin telah berubah sejak terakhir kali Anda mengambilnya.
Robert Harvey

Jawaban:

14

Jawaban singkat

Peta ini bukan wilayah.

Jawabannya lagi - seperti dengan apa pun REST, yang tempat untuk memulai adalah dengan Roy Fielding tesis ; khususnya bab 5 . Untuk pertanyaan Anda saat ini, Anda ingin bagian 5.2.1.

REST didefinisikan oleh empat batasan antarmuka: identifikasi sumber daya; manipulasi sumber daya melalui representasi; pesan deskriptif diri; dan, hypermedia sebagai mesin status aplikasi.

Sumber

Abstraksi kunci dari informasi dalam REST adalah sumber daya. Setiap informasi yang dapat dinamai dapat berupa sumber daya: dokumen atau gambar, layanan temporal (mis. "Cuaca hari ini di Los Angeles"), kumpulan sumber daya lain, objek non-virtual (misalnya seseorang), dan sebagainya . Dengan kata lain, konsep apa pun yang mungkin menjadi target referensi hypertext penulis harus sesuai dengan definisi sumber daya. Sumber daya adalah pemetaan konseptual untuk satu set entitas, bukan entitas yang sesuai dengan pemetaan pada titik waktu tertentu.

Perwakilan

Komponen REST melakukan tindakan pada sumber daya dengan menggunakan representasi untuk menangkap kondisi sumber daya saat ini atau yang dimaksudkan dan mentransfer representasi antara komponen. Representasi adalah urutan byte, ditambah representasi metadata untuk menggambarkan byte tersebut. Nama lain yang umum digunakan tetapi kurang tepat untuk representasi termasuk: dokumen, file, dan entitas pesan HTTP, instance, atau varian.

Representasi terdiri dari data, metadata yang menggambarkan data, dan, kadang-kadang, metadata untuk menggambarkan metadata (biasanya untuk tujuan memverifikasi integritas pesan).

Jadi: "cuaca hari ini di Los Angeles" adalah sumber daya. Representasi kandidat akan meliputi: dokumen teks dengan perkiraan terbaru dari layanan cuaca nasional; representasi visual dari radar cuaca, dan rekaman audio dari ramalan.

VoiceOfUnreason
sumber
2

Sumber daya adalah hal yang Anda kerjakan. Misalnya, jika Anda memiliki API untuk mengganti lampu tertentu, maka sumber daya adalah lampu itu sendiri. Sumber daya dapat berupa fisik (misalnya lampu, orang) atau non fisik (misalnya artikel, peran, baris dalam basis data), sumber daya dapat berupa primer (misalnya saldo) atau berasal (misalnya transaksi). Sumber daya dapat merujuk ke entitas tertentu (misalnya lampu kelima yang dipasang pada soket lampu ini), atau dapat merujuk ke peran yang memetakan ke entitas yang berbeda pada waktu yang berbeda (mis. Lampu yang saat ini dipasang, lampu yang dipasang pada 5 Agustus 2008) atau dapat memetakan ke beberapa entitas (mis. semua lampu di rumah).

Representasi sumber daya adalah cara layanan Anda mengkomunikasikan keadaan sumber daya, misalnya XML, JSON yang mewakili kondisi lampu.

Dalam REST API, sumber daya diidentifikasi oleh pengidentifikasi seragam (mis. URI). Sumber daya tunggal dapat memiliki banyak representasi, dalam HTTP REST API Anda biasanya akan menunjukkan representasi yang ingin Anda gunakan dalam HTTP Content-Type dan Header Terima.

Satu realisasi kunci dalam arsitektur server klien adalah bahwa Anda tidak dapat membawa sumber daya ke klien, dan Anda tidak boleh mencoba membuatnya seperti yang Anda lakukan. Sebaliknya, di REST API, Anda memanipulasi sumber daya dari jarak jauh dengan mentransfer representasi sumber daya tersebut. Pikirkan seperti ini, Anda tidak FedEx lampu sehingga klien dapat memanipulasi lampu secara langsung, tetapi layanan membuat representasi XML / JSON / protobuf / CSV lampu dan klien mengirim representasi dari manipulasi yang dimaksud. Layanan kemudian memanipulasi keadaan lampu yang sebenarnya atas nama klien, atau menolak permintaan, mengatakan jika klien tidak berwenang untuk melakukan operasi pada lampu. Ini mungkin tampak jelas / membelah rambut, tetapi yang penting untuk dicatat adalah bahwa karena representasi bukan sumber daya itu sendiri,

Lie Ryan
sumber
1

Sumber daya mungkin merupakan faktur.

Representasi adalah faktur pada titik waktu tertentu dalam format JSON, atau dalam format XML. Anda mungkin mendapatkan faktur yang sama persis di kemudian hari itu akan menjadi sumber daya yang sama tetapi dalam keadaan yang berpotensi berbeda (dibatalkan, dibayar, dll).

Anda mengambil status faktur saat ini (mis: semua data faktur dalam database) dan memberikannya representasi spesifik (mis: html, xml, json) pada titik waktu tertentu, untuk ditransfer ke beberapa perangkat lain (mis:: sebuah browser)

Bryan Oakley
sumber