Son zamanlarda, bir web API'sini "gerçekten RESTful" kıldığı iddia edilen kısıtlama olan Hypermedia'yı Uygulama Durumu Motoru (HATEOAS) olarak okudum. Temel olarak, mevcut durumdan yapabileceğiniz olası geçişlere verilen her yanıtı içeren bağlantılar dahil olmak üzere kaynar.
HATEOAS'ın anlayışıma dayalı olduğunu göstermeme izin verin - ve eğer bir şeyi kaçırırsam lütfen beni düzeltin.
/
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'ın iki ana fayda sağladığı iddia ediliyor:
Kök URI'dan başlayarak tüm hizmet keşfedilebilir, belgelere artık gerek yok.
İstemci, şimdi URI yapısını özgürce değiştirebilen sunucudan ayrıştırılır. Bu, API sürümüne olan ihtiyacı ortadan kaldırır.
Ancak bana göre bir hizmet URI yapısından çok daha fazlası. Etkili kullanmak için ayrıca şunları da bilmeniz gerekir:
- hangi sorgu parametrelerini kullanabilirsiniz ve olası değerleri
- JSON / XML / POST / PATCH / etc isteklerinizde göndermeniz gereken dokümanların yapısı
- Sunucu tarafından gönderilen yanıtın yapısı
- oluşabilecek olası hatalar
- ...
Yukarıdakilere dayanarak, HATEOAS keşfedilebilirlik ve eşleştirme sorunlarının sadece küçük bir kısmını çözer. Yukarıdaki dört yönü belgelemeniz gerekir ve istemciler bunlar nedeniyle sunucuya güçlü bir şekilde bağlanmaya devam eder. İstemcileri kırmaktan kaçınmak için, API'nizi hala sürümlendirmeniz gerekir.
Sağladığı tek yarar, URL yapınızı az çok özgürce değiştirebilmenizdir (bu arada, "Soğuk URI'lar değişmez" ilkesine ne oldu ?). Anlayışım doğru mu?