Lợi ích của hypermedia (HATEOAS) là gì?


17

Tôi không hiểu lợi ích của HATEOAS đối với các API dành cho các chương trình sử dụng (trái ngược với con người trực tiếp duyệt API của bạn). Chắc chắn, khách hàng không bị ràng buộc với một lược đồ URL nhưng họ bị ràng buộc với một lược đồ dữ liệu giống với suy nghĩ của tôi.

Ví dụ: giả sử tôi muốn xem một mục trên đơn hàng, giả sử tôi đã phát hiện hoặc biết URL đơn hàng.

NGÀY:

order = get(orderURL);
item = get(order.itemURL[5]);

không phải HATEOAS:

order = get(orderURL);
item = get(getItemURL(order,5));

Trong mô hình đầu tiên tôi phải biết thực tế là đối tượng đặt hàng có trường itemURL. Trong mô hình thứ hai, tôi phải biết cách tạo một URL mục. Trong cả hai trường hợp, tôi phải "biết" điều gì đó trước thời hạn, vậy HATEOAS thực sự đang làm gì cho tôi?


1
get(orderURL);nên nói cho bạn the fact that the order object has an itemURL field.
yannis

Khi bạn viết ứng dụng khách, bạn phải biết trước trường đó là gì.
Pace


8
Làm thế nào để một ứng dụng có được món hàng từ một đơn đặt hàng nếu ứng dụng thậm chí không biết một đơn hàng có một món hàng? Discovery hoạt động để duyệt thủ công nhưng không phải cho các ứng dụng tự động.
Pace

Bản thân người đàn ông nói về nó ở đây: roy.gbiv.com/untangled/2008/rest-apis-must-be-hypertext-driven
Thiago Silva

Câu trả lời:


6

Một sự khác biệt là lược đồ hy vọng là một tiêu chuẩn, hoặc ít nhất có thể được sử dụng lại bởi những người khác.

Ví dụ: giả sử bạn đang sử dụng API Twitter và bạn cũng muốn hỗ trợ StatusNet (hoặc thay vào đó). Vì họ sử dụng mô hình dữ liệu giống như Twitter, nếu API tuân theo HATEOAS, bây giờ bạn chỉ cần thay đổi URL chính. Nếu không, bây giờ bạn phải thay đổi từng URL từ mã.

Tất nhiên, nếu bạn cần thay đổi mã để đặt URL điểm nhập của dịch vụ, điều này có vẻ không hữu ích lắm. Nó thực sự tỏa sáng là nếu URL đó được chèn động; ví dụ: nếu bạn đang xây dựng một dịch vụ như Twillio, dịch vụ này sẽ tương tác với API của chính người dùng.


Đó là một điểm thú vị tôi đã không xem xét.
Pace

@YannisRizos: Hmm, tôi không thấy HATEOAS là nơi tiêu chuẩn. Tôi đã nói lược đồ "(dữ liệu) hy vọng là một tiêu chuẩn". Trong thuật ngữ REST, đó sẽ là loại phương tiện.
André Paramés

Lần đọc thứ hai, bạn hoàn toàn đúng.
yannis

2
Có, nếu bạn cho rằng tên rel cho các liên kết là giống nhau. Nhưng nói chung, và không chỉ trên ví dụ cụ thể mà bạn đề cập, mọi lập trình viên trên thế giới không nhất thiết sẽ chọn cùng tên cho các hành động tương tự hoặc tương đương. Lợi ích này đến từ các lập trình viên đồng ý một tham số và tên giao diện chung.
derloopkat

8
  1. API đáng yêu: Nghe có vẻ tầm thường nhưng đừng đánh giá thấp sức mạnh của API đáng kinh ngạc. Khả năng duyệt xung quanh dữ liệu giúp các nhà phát triển ứng dụng khách dễ dàng hơn nhiều trong việc xây dựng một mô hình tinh thần của API và các cấu trúc dữ liệu của nó.

  2. Tài liệu nội tuyến: Việc sử dụng URL làm quan hệ liên kết có thể hướng nhà phát triển ứng dụng khách đến tài liệu.

  3. Logic khách hàng đơn giản: Một ứng dụng khách chỉ cần theo URL thay vì tự xây dựng chúng, sẽ dễ thực hiện và duy trì hơn.

  4. Máy chủ có quyền sở hữu các cấu trúc URL: Việc sử dụng hypermedia sẽ loại bỏ kiến ​​thức được mã hóa cứng của máy khách về các cấu trúc URL được sử dụng bởi máy chủ.

  5. Tắt tải nội dung sang các dịch vụ khác: Hypermedia là cần thiết khi tắt tải nội dung sang các máy chủ khác (ví dụ như CDN).

  6. Phiên bản với các liên kết: Hypermedia giúp phiên bản API.

  7. Nhiều triển khai của cùng một dịch vụ: Hypermedia là một điều cần thiết khi tồn tại nhiều triển khai của cùng một dịch vụ (và một khách hàng cần truy cập nhiều hơn một trong số họ).

Bạn có thể tìm thấy lời giải thích sâu sắc về các gạch đầu dòng ở đây: http://soabits.blogspot.no/2013/12/selling-benefits-of-hypermedia.html


> Tắt tải nội dung sang các dịch vụ khác: Hypermedia là cần thiết khi tắt tải nội dung sang các máy chủ khác (ví dụ như CDN). Không, không phải vậy. Bạn chỉ có thể giữ các liên kết tương tự và sử dụng CDN.
Bruno Costa
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.