Như tôi hiện đang hiểu, HATEOAS về cơ bản là tất cả về việc gửi cùng với mỗi liên kết phản hồi với thông tin về những việc cần làm tiếp theo. Một ví dụ đơn giản có thể dễ dàng tìm thấy trên internet: một hệ thống ngân hàng cùng với tài nguyên tài khoản. Ví dụ cho thấy phản hồi này sau khi yêu cầu NHẬN tài nguyên tài khoản
GET /account/12345 HTTP/1.1 HTTP/1.1 200 OK
<?xml version="1.0"?>
<account>
<account_number>12345</account_number>
<balance currency="usd">100.00</balance>
<link rel="deposit" href="/account/12345/deposit" />
<link rel="withdraw" href="/account/12345/withdraw" />
<link rel="transfer" href="/account/12345/transfer" />
<link rel="close" href="/account/12345/close" />
</account>
Cùng với dữ liệu có các liên kết cho biết những gì có thể được thực hiện tiếp theo. Nếu số dư là âm chúng ta có
GET /account/12345 HTTP/1.1 HTTP/1.1 200 OK
<?xml version="1.0"?>
<account>
<account_number>12345</account_number>
<balance currency="usd">-25.00</balance>
<link rel="deposit" href="/account/12345/deposit" />
</account>
Vì vậy, chúng tôi chỉ có thể gửi tiền. Điều đó hoàn toàn tốt, nếu chúng ta đang sử dụng Fiddler hoặc thực hiện các yêu cầu với trình duyệt, chúng ta có thể dễ dàng thấy những gì có thể được thực hiện. Loại thông tin này hữu ích sau đó để chúng tôi khám phá các khả năng của API và máy chủ được tách rời khỏi máy khách.
Tuy nhiên, vấn đề là khi chúng tôi xây dựng một ứng dụng khách, như một SPA với Javascript, hoặc một ứng dụng Android hoặc nhiều thứ khác, tôi không thể thấy HATEOAS tiếp tục liên quan như thế nào. Ý tôi là như sau: khi tôi mã hóa SPA bằng javascript, tôi phải biết những gì có thể được thực hiện trong API để viết mã.
Vì vậy, tôi cần biết các tài nguyên, các phương thức được hỗ trợ, những gì họ mong muốn nhận được và những gì họ trả lại để viết các cuộc gọi ajax đến máy chủ và thậm chí để xây dựng giao diện người dùng. Khi tôi xây dựng giao diện người dùng, tôi phải biết rằng sau khi yêu cầu tài khoản, người ta có thể gửi tiền vào tài khoản đó, hoặc tôi sẽ không thể cung cấp tùy chọn này trên giao diện người dùng. Ngoài ra, tôi sẽ cần biết URI để thực hiện gửi tiền để xây dựng cuộc gọi ajax.
Ý tôi là, khi chúng tôi yêu cầu API, các liên kết cho phép chúng tôi khám phá và sử dụng API tốt hơn, nhưng khi chúng tôi xây dựng một ứng dụng khách, ứng dụng chúng tôi đang xây dựng sẽ không chỉ nhìn vào các liên kết và sau đó tự hiển thị UI chính xác và thực hiện các cuộc gọi ajax đúng.
Vậy, HATEOAS quan trọng như thế nào đối với khách hàng? Tại sao chúng ta bận tâm với HATEOAS?