เมื่อเร็ว ๆ นี้ฉันได้อ่านเกี่ยวกับ Hypermedia ว่าเป็น Engine of Application State (HATEOAS) ซึ่งเป็นข้อ จำกัด ที่อ้างว่าทำให้ API ของเว็บ "สงบ" อย่างแท้จริง โดยทั่วไปแล้วจะรวมถึงลิงก์ที่มีการตอบสนองต่อการเปลี่ยนแปลงที่เป็นไปได้ทั้งหมดที่คุณสามารถทำได้จากสถานะปัจจุบัน
ให้ฉันอธิบายสิ่งที่ HATEOAS ตั้งอยู่บนความเข้าใจของฉัน - และโปรดแก้ไขให้ถูกต้องหากฉันพลาดอะไรไป
/
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 ได้รับการกล่าวอ้างว่าให้ประโยชน์ที่สำคัญสองประการ:
บริการทั้งหมดสามารถค้นพบได้ในรูปแบบเริ่มต้นของ URI รูทไม่จำเป็นต้องใช้เอกสารอีกต่อไป
ไคลเอ็นต์ถูกแยกออกจากเซิร์ฟเวอร์ซึ่งสามารถเปลี่ยนโครงสร้าง URI ได้อย่างอิสระ สิ่งนี้ไม่จำเป็นสำหรับการกำหนดเวอร์ชัน API
แต่ในมุมมองของฉันการบริการเป็นมากกว่าโครงสร้างของ URI หากต้องการใช้อย่างมีประสิทธิภาพคุณต้องรู้:
- พารามิเตอร์การสืบค้นใดที่คุณสามารถใช้และค่าที่เป็นไปได้
- โครงสร้างของ JSON / XML / เอกสารอะไรก็ตามที่คุณต้องการส่งในคำขอ POST / PATCH / etc ของคุณ
- โครงสร้างของการตอบสนองที่ส่งโดยเซิร์ฟเวอร์
- ข้อผิดพลาดที่เป็นไปได้ที่อาจเกิดขึ้น
- ...
จากข้างต้น HATEOAS แก้ปัญหาการค้นพบและการมีเพศสัมพันธ์เพียงเล็กน้อยเท่านั้น คุณยังต้องจัดทำเอกสารสี่ด้านข้างต้นและลูกค้าจะยังคงเชื่อมต่อกับเซิร์ฟเวอร์อย่างแน่นหนาเพราะสิ่งเหล่านี้ เพื่อหลีกเลี่ยงการทำให้ลูกค้าแตกคุณยังคงต้องใช้ API ของคุณ
ประโยชน์เพียงอย่างเดียวที่มีให้คือคุณสามารถเปลี่ยนโครงสร้าง URL ของคุณได้อย่างอิสระมากขึ้น (โดยวิธีการเกิดอะไรขึ้นกับหลักการ"Cool URIs ที่ไม่เปลี่ยนแปลง" ?) ความเข้าใจของฉันถูกต้องหรือไม่