Akhir-akhir ini saya telah membaca tentang Hypermedia sebagai Engine of Application State (HATEOAS), kendala yang diklaim membuat API web "benar-benar tenang". Pada dasarnya intinya termasuk tautan dengan setiap respons terhadap kemungkinan transisi yang dapat Anda lakukan dari kondisi saat ini.
Izinkan saya menggambarkan apa yang HATEOAS didasarkan pada pemahaman saya - dan tolong perbaiki saya jika saya melewatkan sesuatu.
/
GET: {
"_links": {
"child": [
{ "href": "http://myapi.com/articles", "title": "articles" }
]
}
}
/articles?contains=HATEOAS
GET: {
"_items": [
{ "uri": "http://myapi.com/articles/0", "title": "Why Should I Care About HATEOAS?" },
{ "uri": "http://myapi.com/articles/1", "title": "HATEOAS: Problem or Solution?" }
],
"_links": {
"self": { "href": "http://myapi.com/articles", "title": "articles" },
"parent": { "href": "http://myapi.com/", "title": "home" }
}
}
POST: {
"title": "A New Article",
"body": "Article body",
"tags": [ "tag1", "tag2" ]
}
/articles/0
GET: {
"title": "Why Should I Care About HATEOAS?",
"body": "Blah blah blah"
"tags": [ "REST", "HATEOAS" ],
"_links": {
"self": { "href": "http://myapi.com/articles/0", "title": "article" },
"parent": { "href": "http://myapi.com/articles", "title": "articles" }
}
}
HATEOAS diklaim memberikan dua manfaat utama:
Seluruh layanan dapat ditemukan mulai dari root URI, dokumentasi tidak lagi diperlukan.
Klien dipisahkan dari server yang sekarang dapat mengubah struktur URI dengan bebas. Ini menghilangkan kebutuhan untuk versi API.
Tetapi dalam pandangan saya, layanan jauh lebih banyak daripada struktur URI-nya. Untuk menggunakannya secara efektif, Anda juga perlu tahu:
- parameter kueri apa yang dapat Anda gunakan dan nilainya yang mungkin
- struktur JSON / XML / dokumen apa pun yang perlu Anda kirim dalam permintaan POST / PATCH / etc Anda
- struktur respons yang dikirim oleh server
- kemungkinan kesalahan yang mungkin terjadi
- ...
Berdasarkan hal di atas, HATEOAS hanya memecahkan sebagian kecil dari kemampuan penemuan dan penggandengan. Anda masih perlu mendokumentasikan empat aspek di atas dan klien masih akan sangat digabungkan ke server karena itu. Untuk menghindari kerusakan klien, Anda masih perlu membuat versi API Anda.
Satu-satunya manfaat yang diberikannya adalah Anda dapat mengubah struktur URL Anda lebih atau kurang secara bebas (ngomong-ngomong, apa yang terjadi pada prinsip "Cool URIs not change" ?). Apakah pemahaman saya benar?
Satu-satunya hal yang menjadikannya REST API sejati adalah memenuhi semua kendala, bukan hanya satu.
Itu sebabnya kita membutuhkan kendala lain, pesan deskriptif diri, dll ...
Tidak peduli bagaimana Anda mencoba, Anda harus membuat versi API Anda. Di klien REST Anda masih perlu tahu cara menuju ke halaman di mana Anda ingin melakukan hal-hal, tautan mana yang harus diikuti dan properti mana yang perlu Anda kumpulkan berdasarkan pada kosakata RDF yang menjelaskan pesan tersebut. Jika Anda perlu mengganti atau menghapus sesuatu dari vocab itu, maka itu mungkin akan menghancurkan semua klien Anda dan Anda akan memerlukan versi baru. Jadi saya pikir REST bukan sesuatu yang harus Anda publikasikan lebih awal (dan cari tahu modelnya saat Anda terus-menerus mengubah API), jika tidak Anda akan memiliki banyak versi. Anda memerlukan model domain yang stabil terlebih dahulu yang dapat Anda ...
sumber