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?