Tôi đã đọc rất nhiều cuộc thảo luận ở đây về SO, đã xem Jon Moore's presentation (đã giải thích rất nhiều, btw) và đọc qua bài đăng trên blog của Roy Fielding trên HATEOAS nhưng tôi vẫn cảm thấy một chút trong bóng tối khi nói đến khách hàng thiết kế.HATEOAS Client Design
API Câu hỏi
Còn bây giờ, tôi chỉ đơn giản là trở xhtml với các hình thức/neo và danh sách định nghĩa đại diện cho các nguồn lực. Đoạn mã sau mô tả chi tiết cách tôi đặt các biểu mẫu/neo/danh sách.
# anchors
<li class='docs_url/#resourcename'>
<a rel='self' href='resource location'></a>
</li>
# forms
<form action='action_url' method='whatever_method' class='???'></form>
# lists
<dl class='docs_url/#resourcename'>
<dt>property</dt>
<dd>value</dd>
</dl>
Câu hỏi của tôi chủ yếu dành cho biểu mẫu. Trong bài nói chuyện của Jon, ông ghi lại các loại biểu mẫu như (add_location_form), vv và các đầu vào cần thiết cho chúng. Tôi không có nhiều tài nguyên nhưng tôi đã nghĩ về các kiểu biểu mẫu trừu tượng (thêm, xóa, cập nhật, v.v.) và chỉ lưu ý trong tài liệu cho (thêm, cập nhật) mà bạn phải gửi một biểu diễn hợp lệ của tài nguyên đích và với việc xóa, bạn phải gửi số nhận dạng.
Câu hỏi 1: Với khái niệm HATEOAS, nên chúng ta không thực sự chỉ làm cho khách hàng "khám phá" các hình thức (bằng cách classing họ thêm, xóa, cập nhật vv) và chỉ cần gửi lại tất cả dữ liệu chúng tôi đã cho họ? Câu hỏi thực sự của tôi ở đây (không phải là một cuộc thảo luận) có thực hiện theo cách thực hành tốt này không?
Khách hàng Câu hỏi
Sau HATEOAS, với những hành động của chúng ta về tài nguyên là khám phá-thể, như thế nào mã này có hiệu lực khách hàng (người tiêu dùng của các api) và ui của họ. Nghe có vẻ tuyệt vời khi làm theo các hiệu trưởng này, giao diện người dùng chỉ nên hiển thị các hành động có sẵn nhưng cách thực hiện đó?
Cách tiếp cận hiện tại của tôi là phân tích cú pháp phản hồi dưới dạng xml và usin xpath để tìm các hành động được biết tại thời điểm phát triển ứng dụng khách (các lớp biểu mẫu được tạo tài liệu, thêm, xóa, cập nhật) và hiển thị các điều khiển ui nếu chúng có sẵn.
Câu hỏi 2: Tôi có hiểu sai về cách khám phá của mình không? Hoặc là quá nhiều ma thuật như xa như khách hàng là có liên quan (biết các lớp học hình thức)? Điều này không giả định rằng máy khách biết các hành động nào có sẵn cho mỗi tài nguyên (có thể là tốt vì nó là một lý do để tạo máy khách, đúng không?) Và nên ánh xạ các hành động (các lớp biểu mẫu) tới tài nguyên được ghi chép hoặc chỉ ghi lại các lớp biểu mẫu và cho phép ứng dụng khách (và nhà phát triển ứng dụng khách) nghiên cứu và khám phá chúng?
Tôi biết tôi ở mọi nơi với điều này, nhưng mọi thông tin chi tiết đều được đánh giá cao. Tôi sẽ đánh dấu một câu trả lời trả lời bất kỳ câu hỏi nào trong hai câu hỏi này. Cảm ơn!
Hoàn hảo! Vì vậy, bằng cách ghi lại các "lớp" của các biểu mẫu (crud) và hiển thị chúng khi có sẵn theo miền và cho phép khách hàng tìm kiếm các biểu mẫu "đã biết" có vẻ là một cách tiếp cận chấp nhận được, miễn là chúng sử dụng biểu mẫu thay vì giả sử nó . Điều đó thật tuyệt. May mắn thay, trong thời gian này, tôi đang tạo ra cả khách hàng và api. – jowee
Việc tạo các đối tượng bên trong mã máy khách có ánh xạ tới các tài nguyên của máy chủ hay không? Tôi sẽ giả định như vậy, vì điều này sẽ cho phép khả năng cho khách hàng 'điền vào' các trường biểu mẫu mà họ hiểu dễ dàng hơn. Hoặc là quá nhiều sao chép (tức là. DRY). Tôi đoán trong ý nghĩa này nó sẽ là tốt như tôi đang thực sự nói về hai ứng dụng hoàn toàn khác nhau (api, khách hàng), do đó, DRY sẽ không áp dụng. – jowee
Yea, mẹo là viết cho những gì máy chủ thực sự yêu cầu và yêu cầu bạn làm, thay vì những gì bạn nghĩ, tại thời điểm viết, máy chủ muốn làm. Bạn càng giả sử, hệ thống càng mong manh và có khả năng chống thay đổi nó càng trở nên dễ dàng hơn. Nhưng tính linh hoạt có chi phí mã hóa và phức tạp mã, đó là lý do tại sao hầu hết mọi người không bận tâm. –