Seperti yang saya pahami, HATEOAS pada dasarnya adalah tentang mengirim bersama dengan setiap tautan tanggapan dengan informasi tentang apa yang harus dilakukan selanjutnya. Satu contoh sederhana mudah ditemukan di internet: sistem perbankan bersama dengan sumber daya akun. Contoh ini menunjukkan respons ini setelah permintaan GET ke sumber daya akun
GET /account/12345 HTTP/1.1 HTTP/1.1 200 OK
<?xml version="1.0"?>
<account>
<account_number>12345</account_number>
<balance currency="usd">100.00</balance>
<link rel="deposit" href="/account/12345/deposit" />
<link rel="withdraw" href="/account/12345/withdraw" />
<link rel="transfer" href="/account/12345/transfer" />
<link rel="close" href="/account/12345/close" />
</account>
Bersama dengan data ada tautan yang memberi tahu apa yang bisa dilakukan selanjutnya. Jika saldo negatif kita miliki
GET /account/12345 HTTP/1.1 HTTP/1.1 200 OK
<?xml version="1.0"?>
<account>
<account_number>12345</account_number>
<balance currency="usd">-25.00</balance>
<link rel="deposit" href="/account/12345/deposit" />
</account>
Sehingga kita hanya bisa melakukan setoran. Tidak apa-apa, jika kita menggunakan Fiddler atau membuat permintaan dengan browser, kita dapat dengan mudah melihat apa yang bisa dilakukan. Informasi semacam ini berguna bagi kita untuk menemukan kemampuan API dan server dipisahkan dari klien.
Namun, intinya adalah bahwa ketika kita membangun klien, seperti SPA dengan Javascript, atau aplikasi Android atau banyak hal lainnya, saya tidak dapat melihat bagaimana HATEOAS terus menjadi relevan. Yang saya maksud adalah sebagai berikut: ketika saya sedang mengkode SPA dalam javascript, saya harus tahu apa yang bisa dilakukan dalam API untuk menulis kode.
Jadi saya perlu tahu sumber daya, metode yang didukung, apa yang mereka harapkan untuk terima dan apa yang mereka berikan kembali untuk menulis ajax panggilan ke server dan bahkan untuk membangun UI. Ketika saya membangun UI, saya harus tahu bahwa setelah meminta akun, seseorang dapat, misalnya, menyetorkannya, atau saya tidak akan dapat memberikan opsi ini pada UI. Juga, saya harus tahu URI untuk melakukan setoran untuk membangun panggilan ajax.
Maksud saya adalah, ketika kita membuat permintaan ke API, tautan memungkinkan kita menemukan dan menggunakan API dengan lebih baik, tetapi ketika kita membangun klien, aplikasi yang kita bangun tidak akan hanya melihat tautan dan kemudian dengan sendirinya membuat UI yang benar dan lakukan panggilan ajax yang tepat.
Jadi, bagaimana HATEOAS penting bagi klien? Kenapa sih kita repot-repot dengan HATEOAS?
sumber
Jawaban:
Bahkan, ini adalah persis apa yang HATEOAS akan memberikan UI. Bukan apa yang mungkin, tetapi ketika itu mungkin. HATEOAS formal seperti HAL , seperti yang dinyatakan dalam pertanyaan, memberikan tautan yang menunjukkan apa yang mungkin. Tetapi ketika tautan itu muncul tergantung pada kondisi aplikasi. Jadi, tautan dapat berubah pada sumber daya seiring waktu (berdasarkan tindakan yang telah dilakukan).
Ini memungkinkan kami untuk membangun UI yang berisi semua status yang mungkin , tetapi tidak khawatir ketika negara-negara tersebut menjadi aktif. Misalnya, kehadiran
rel="deposit"
kaleng langsung memberi tahu UI kapan OK untuk merendermake deposit
formulir. Yang kemudian memungkinkan pengguna untuk memasukkan nilai dan mengirimkan menggunakan tautan.sumber
HATEOAS lebih dari sekadar tautan. Ini adalah "hyper media" sebagai mesin negara aplikasi.
Apa yang terlewatkan dalam deskripsi Anda adalah tipe konten, definisi formal dari hyper media yang dilewatkan antara klien dan server.
HTML adalah contoh hyper media, dan contoh mengapa HATEOS bekerja. Halaman HTML itu sendiri adalah mesin yang memungkinkan klien (yaitu pengguna) untuk bergerak melalui situs. Browser dengan hanya kemampuan untuk menyajikan HTML kepada pengguna situs web yang sepenuhnya dinavigasi. Bukan hanya karena ia mengirimkan tautan ke halaman lain, tetapi juga mengirimkannya dengan cara yang bermakna yang memberikan konteks pada tautan dan dengan cara yang memungkinkan browser untuk membangun situs yang dapat dilayari.
Dan yang paling penting browser dapat melakukan ini dengan NOL pemahaman di muka situs web itu sendiri. Browser hanya tahu HTTP dan HTML. Berdasarkan pemahaman sederhana itu dapat menyajikan New York Times kepada pengguna untuk menavigasi.
Ini berlaku bahkan jika "pengguna" adalah program komputer lain. Hyper media itu sendiri harus menentukan konteks navigasi.
sumber
Anda tidak harus membangun antarmuka yang dihasilkan secara dinamis. Meskipun itu bisa menyenangkan, itu tidak diperlukan. Jika Anda tidak dapat membangun antarmuka dinamis, cukup gunakan tautan dan Anda selesai. Kerugiannya adalah Anda lagi-lagi sulit ditautkan ke backend dan akan macet jika ada perubahan.
Menggunakan tata letak dinamis bisa sangat sederhana:
Ini menghemat Anda dalam kode klien Anda seperti:
Anda dapat menerapkan posisi negatif yang diizinkan (dengan meminjam uang misalnya) tanpa mengubah klien Anda.
sumber
reason
. Dan jika kita masih membutuhkan ini, mengapa tidak mengirimnya bidang boolean laincanWithdraw
sebagai ganti tautan ke tindakan? Keuntungan lain adalah kemampuan untuk mengubah URL tindakan tanpa menyentuh klien. Tapi .. alasan apa untuk mengubah URL? Dalam kebanyakan kasus itu juga beberapa perubahan dalam semantik atau parameter atau bentuk permintaan / respons dll. Jadi kita tetap perlu mengubah klien. Jadi, saya masih belum mengerti - apa gunanya HATEOAS.