Apa manfaat hypermedia (HATEOAS)?

17

Saya tidak mengerti manfaat dari HATEOAS untuk API yang dimaksudkan untuk digunakan oleh program (sebagai lawan dari manusia yang secara langsung menelusuri API Anda). Tentu, pelanggan tidak terikat pada skema URL tetapi mereka terikat pada skema data yang merupakan hal yang sama dalam pikiran saya.

Misalnya, anggap saya ingin melihat item pada pesanan, anggap saya telah menemukan atau mengetahui URL pesanan.

HATEOAS:

order = get(orderURL);
item = get(order.itemURL[5]);

non-HATEOAS:

order = get(orderURL);
item = get(getItemURL(order,5));

Dalam model pertama saya harus tahu fakta bahwa objek pesanan memiliki bidang itemURL. Dalam model kedua saya harus tahu cara membuat URL item. Dalam kedua kasus saya harus "mengetahui" sesuatu sebelumnya sehingga apa yang sebenarnya dilakukan HATEOAS untuk saya?

Kecepatan
sumber
1
get(orderURL);harus memberi tahu Anda the fact that the order object has an itemURL field.
yannis
Ketika Anda menulis aplikasi klien, Anda harus tahu sebelumnya apa bidangnya.
Kecepatan
8
Bagaimana suatu aplikasi seharusnya mendapatkan item dari suatu order jika aplikasi tersebut bahkan tidak tahu bahwa suatu pesanan memiliki item? Discovery berfungsi untuk penelusuran manual tetapi tidak untuk aplikasi otomatis.
Laju
Pria itu sendiri membicarakannya di sini: roy.gbiv.com/untangled/2008/rest-apis-must-be-hypertext-driven
Thiago Silva

Jawaban:

6

Salah satu perbedaannya adalah bahwa skema mudah-mudahan standar, atau setidaknya dapat digunakan kembali oleh orang lain.

Misalnya, katakanlah Anda menggunakan API Twitter dan Anda ingin mendukung StatusNet juga (atau sebagai gantinya). Karena mereka menggunakan model data yang sama seperti Twitter, jika API mengikuti HATEOAS Anda sekarang hanya perlu mengubah URL utama. Jika tidak, Anda sekarang harus mengubah setiap URL dari kode.

Tentu saja, jika Anda perlu mengubah kode untuk memasukkan URL titik masuk layanan, mungkin itu tidak terlalu membantu. Itu benar-benar bersinar adalah jika URL itu dimasukkan secara dinamis; misalnya, jika Anda membangun layanan seperti Twillio, yang akan berinteraksi dengan API milik pengguna.

André Paramés
sumber
Itu hal menarik yang belum saya pertimbangkan.
Kecepatan
@YannisRizos: Hmm, saya tidak melihat di mana saya mengatakan HATEOAS adalah standar. Saya mengatakan skema "(data) semoga standar". Dalam terminologi REST, itu adalah tipe media.
André Paramés
Pada bacaan kedua, Anda benar sekali.
yannis
2
Ya, jika Anda menganggap bahwa nama rel untuk tautan itu sama. Tetapi berbicara secara umum, dan tidak hanya pada contoh spesifik yang Anda sebutkan, setiap programmer di dunia tidak serta-merta akan memilih nama yang sama untuk tindakan yang serupa atau setara. Manfaat ini berasal dari programmer menyetujui penamaan dan parameter antarmuka umum.
derloopkat
8
  1. API Yang Dapat Dieksplorasi: Ini mungkin terdengar sepele tetapi tidak meremehkan kekuatan API yang dapat dieksplorasi. Kemampuan untuk menelusuri data membuatnya lebih mudah bagi pengembang klien untuk membangun model mental API dan struktur datanya.

  2. Dokumentasi sebaris: Penggunaan URL sebagai hubungan tautan dapat mengarahkan pengembang klien ke dokumentasi.

  3. Logika klien sederhana: Seorang klien yang hanya mengikuti URL alih-alih membangunnya sendiri, harus lebih mudah diimplementasikan dan dipelihara.

  4. Server mengambil kepemilikan struktur URL: Penggunaan hypermedia menghapus pengetahuan kode keras klien tentang struktur URL yang digunakan oleh server.

  5. Tidak memuat konten ke layanan lain: Hypermedia diperlukan ketika memuat konten ke server lain (misalnya CDN).

  6. Versi dengan tautan: Hypermedia membantu membuat versi API.

  7. Berbagai implementasi dari layanan yang sama: Hypermedia adalah suatu keharusan ketika ada beberapa implementasi dari layanan yang sama (dan satu klien perlu mengakses lebih dari satu dari mereka).

Anda dapat menemukan penjelasan mendalam tentang poin-poin ini di sini: http://soabits.blogspot.no/2013/12/selling-benefits-of-hypermedia.html

Jørn Wildt
sumber
> Tidak memuat konten ke layanan lain: Hypermedia diperlukan ketika memuat konten ke server lain (misalnya CDN). Tidak, tidak. Anda bisa menyimpan tautan yang sama dan menggunakan CDN.
Bruno Costa