Gần đây tôi đã đọc về Hypermedia với tư cách là Công cụ của Trạng thái Ứng dụng (HATEOAS), ràng buộc được tuyên bố là làm cho API web "thực sự RESTful". Về cơ bản, nó bao gồm các liên kết với mọi phản ứng đối với các chuyển đổi có thể bạn có thể thực hiện từ trạng thái hiện tại.
Hãy để tôi minh họa những gì HATEOAS dựa trên sự hiểu biết của tôi - và vui lòng sửa lại cho tôi nếu tôi bỏ lỡ điều gì đó.
/
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 được tuyên bố là cung cấp hai lợi ích chính:
Toàn bộ dịch vụ có thể khám phá bắt đầu từ URI gốc, tài liệu không còn cần thiết nữa.
Máy khách được tách rời khỏi máy chủ có thể thay đổi cấu trúc URI một cách tự do. Điều này giúp loại bỏ sự cần thiết phải tạo phiên bản API.
Nhưng theo quan điểm của tôi, một dịch vụ nhiều hơn cấu trúc URI của nó. Để sử dụng nó hiệu quả, bạn cũng cần biết:
- những tham số truy vấn nào bạn có thể sử dụng và các giá trị có thể có của chúng
- cấu trúc của JSON / XML / bất kỳ tài liệu nào bạn cần gửi trong các yêu cầu POST / PATCH / etc của bạn
- cấu trúc của phản hồi được gửi bởi máy chủ
- các lỗi có thể xảy ra
- ...
Dựa trên những điều trên, HATEOAS chỉ giải quyết được một phần rất nhỏ các vấn đề về khả năng khám phá và ghép nối. Bạn vẫn cần ghi lại bốn khía cạnh trên và khách hàng vẫn sẽ được kết nối mạnh mẽ với máy chủ vì chúng. Để tránh phá vỡ ứng dụng khách, bạn vẫn cần phải phiên bản API của mình.
Lợi ích duy nhất mà nó cung cấp là bạn có thể thay đổi cấu trúc URL của mình ít nhiều một cách tự do (nhân tiện, điều gì đã xảy ra với nguyên tắc "URI tuyệt vời không thay đổi" ?). Tôi hiểu có đúng không?