Contoh aktual untuk HATEOAS (REST-architecture) [ditutup]

140

seperti semua orang mungkin perhatikan, ada banyak REST-API palsu / belum sempurna di alam liar (yang mengimplementasikan HTTP-API dan menyebutnya REST tanpa mengikuti persyaratan hypertext-as-the-engine-of-application-state-state), yang menyebabkan untuk kata-kata kasar terkenal Roy T. Fielding , orang yang pertama kali menentukan paradigma-REST).

Saya tidak dapat menemukan contoh praktis dari implementasi REST yang benar-benar didorong oleh hypertext bersama dengan definisi tipe media khusus aplikasi terkait untuk transisi negara.

Apakah ada contoh implementasi yang dapat diakses secara publik?

pmf
sumber
3
Saya menemukan ini menarik karena banyak orang mengklaim REST adalah "mudah" tetapi Fielding sendiri mengatakan bahwa walaupun itu adalah arsitektur yang sederhana, tidak mudah untuk merancang aplikasi dengan itu.
aehlke
3
omong-omong, itu harus HATEOAS bukan HATEOS, nanti tidak google dengan baik.
David Roussel
2
Paypal tampaknya menggunakannya: developer.paypal.com/docs/integration/direct/…
Andrew Thaddeus Martin
Apakah Roy Fielding sendiri pernah membuat aplikasi menggunakan HATEOAS?
systemovich

Jawaban:

102

Ini bukan implementasi dalam arti menjalankan kode, tapi saya sangat suka artikel " Cara Mendapat secangkir kopi " di InfoQ. Ini menggambarkan proses pemesanan kopi di Starbucks sebagai protokol yang tenang. Ini melampaui artikel pengantar REST "semuanya adalah sumber daya" yang khas dan berfokus pada HATEOAS. Sangat dianjurkan.

trendel
sumber
5
Buku "Rest in Practice" oleh Jim Webber, Sayas Parastatidis dan Ian Robinson cukup berguna
DomreiRoam
2
Artikel ini baik-baik saja, tetapi sayangnya API yang dijelaskannya tidak sepenuhnya mematuhi prinsip HATEOAS karena tidak menggunakan jenis media khusus. Bagaimana klien tahu bagaimana memanipulasi (mis deserialize, parse, display) setiap sumber daya jika semuanya adalah aplikasi / xml? Itu akan tergantung pada beberapa cara non-standar untuk menyampaikan informasi ini, seperti dokumentasi yang dimaksudkan untuk dibaca oleh manusia.
ygormutti
21

Bagaimana dengan Sun Cloud API ? Dari pendahuluan:

API mengandaikan tidak ada struktur khusus di ruang URI. Titik awalnya adalah URI, yang disediakan oleh penyedia layanan cloud, yang mengidentifikasi cloud itu sendiri. Representasi cloud berisi URI untuk sumber daya lain di cloud, dan juga untuk operasi yang dapat dilakukan pada mereka (misalnya menggunakan dan memulai mesin virtual).

The backstory juga mungkin bisa membantu.

Apodaca kaya
sumber
2
Ini adalah latar belakang yang membuat saya memulai jalan HATEAOS.
CyberFonic
3
semua tautan sudah mati
Roeland Van Heddegem
"Maaf situs kenai.com telah ditutup."
Nick Rolando
@NickRolando, saya mengganti tautan.
Rich Apodaca
@RichApodaca, tautan backstory sudah mati.
Vasantha Ganesh K
7

Netflix memiliki REST API berdasarkan HATEOAS yang menyertakan tautan sebagai bagian dari sumber daya.

Will Sargent
sumber
1
dan sekarang kode status adalah 404.
naXa
1
@Tautan Sargent akan rusak, perbarui.
Govi S
Maaf, sepertinya Netflix mengambilnya dan pergi dengan sesuatu yang lain.
Will Sargent
2
Jawaban khusus tautan cenderung kurang relevan ketika tautan seperti itu mati.
nyedidikeke
@nyedidikeke itu adalah tautan tetapi jawaban untuk konteks ini, Anda hanya perlu memperbaiki tautan dengan mengedit pos!
Al-Mothafar
3

Bukankah RESTfulness of Sun Cloud API benar-benar dibahas dalam poin ke-4 Roy:

API REST tidak boleh mendefinisikan nama sumber daya tetap atau hierarki (penggabungan yang jelas antara klien dan server). Server harus memiliki kebebasan untuk mengontrol namespace mereka sendiri. Sebagai gantinya, izinkan server untuk menginstruksikan klien tentang cara membuat URI yang sesuai, seperti yang dilakukan dalam formulir HTML dan templat URI, dengan menetapkan instruksi tersebut dalam jenis media dan hubungan tautan. [Kegagalan di sini menyiratkan bahwa klien mengasumsikan struktur sumber daya karena informasi out-of band, seperti standar khusus domain, yang setara dengan data yang berorientasi pada penggabungan fungsional RPC].

Contoh 1 Memperbaiki nama sumber daya dalam heirachy yang ditentukan:

Dari Sun Cloud API: "... representasi dari VDC akan mencakup representasi dari Cluster yang menghuninya, yang pada gilirannya termasuk representasi dari VM dalam setiap cluster."

Contoh 2 informasi out-of-band, seperti standar khusus domain:

Anda harus memiliki konten halaman wiki (informasi out-of-band) untuk mengetahui bahwa "mekanisme komunikasi sumber daya" untuk bidang sumber daya Cloud "uri" adalah GET.

landak
sumber
2
Anda benar, itu sangat menyesatkan. Namun, Roy berbicara tentang nama sumber daya di ruang uri, bukan dalam isi jenis media. Sun bebas untuk mengubah uri yang digunakan untuk mengakses sebuah cluster kapan saja. Jelas, itu tidak dapat mengubah istilah "cluster" menjadi "group" di dalam representasi tanpa membuat versi baru dari jenis media, tetapi dapat mengubah URI menjadi apa pun.
Darrel Miller
4
Kita tahu bahwa Sun API menggunakan HTTP sebagai antarmuka yang seragam, sehingga klien tidak perlu melihat halaman wiki untuk mengetahui bahwa GET adalah kata kerja yang valid untuk sumber daya cloud. Ini bisa langsung dicoba mengingat ia mengetahui bahwa GET adalah kata kerja yang aman, atau dapat menggunakan OPSI untuk menentukan apakah GET tersedia.
Darrel Miller
3

Saya menyadari ini ditanya beberapa waktu lalu, tetapi saya mencoba menunjukkan aliran REST API yang "tepat" sebagai contoh sederhana. Saya mencoba mengikuti aturan Roy untuk REST - mungkin ini bisa membantu: Contoh API menggunakan REST

jeremyh
sumber