Các ví dụ thực tế cho HATEOAS (REST-architecture) [đã đóng]


140

như mọi người có thể nhận thấy, có rất nhiều API REST giả / thô sơ trong tự nhiên (thực thi API HTTP và gọi nó là REST mà không tuân theo yêu cầu trạng thái siêu văn bản của ứng dụng, dẫn đến với câu chuyện nổi tiếng của Roy T. Fielding , người đầu tiên chỉ định mô hình REST).

Tôi đã không thể tìm thấy bất kỳ ví dụ thực tế nào về việc triển khai REST được điều khiển siêu văn bản thực sự cùng với các định nghĩa loại phương tiện dành riêng cho ứng dụng liên quan cho các chuyển đổi trạng thái.

Có bất kỳ ví dụ có thể truy cập công khai của việc thực hiện như vậy?


3
Tôi thấy điều này thú vị vì nhiều người cho rằng REST "dễ" nhưng bản thân Fielding nói rằng mặc dù nó là một kiến ​​trúc đơn giản, nhưng không đơn giản để thiết kế một ứng dụng với nó.
aehlke

3
Nhân tiện, nó phải là HATEOAS chứ không phải HATEOS, sau này google không tốt.
David Roussel



Có phải Roy Fielding đã từng xây dựng một ứng dụng bằng HATEOAS?
systemovich

Câu trả lời:


102

Đây không phải là một triển khai theo nghĩa chạy mã, nhưng tôi thực sự thích bài viết " Cách lấy một tách cà phê " trên InfoQ. Nó mô tả quá trình đặt hàng cà phê tại Starbucks dưới dạng giao thức RESTful. Điều này vượt xa bài viết giới thiệu REST "mọi thứ là một tài nguyên" điển hình và tập trung vào HATEOAS. Rất khuyến khích.


5
Cuốn sách "Nghỉ ngơi trong thực hành" của Jim Webber, Sayas Parastatidis và Ian Robinson khá hữu ích
DomreiRoam

2
Bài viết này ổn, nhưng thật không may, API mà nó mô tả không tuân thủ nghiêm ngặt nguyên tắc HATEOAS vì nó không sử dụng các loại phương tiện tùy chỉnh. Làm thế nào để khách hàng biết cách thao tác (ví dụ: deserialize, parse, display) mỗi tài nguyên nếu mọi thứ đều là application / xml? Nó sẽ phụ thuộc vào một số cách truyền thông tin không chuẩn này, giống như tài liệu được đọc bởi con người.
ygormutti

21

Làm thế nào về API Sun Cloud ? Từ phần giới thiệu:

API giả định không có cấu trúc cụ thể trong không gian URI. Điểm bắt đầu là một URI, được cung cấp bởi nhà cung cấp dịch vụ đám mây, xác định chính đám mây. Đại diện của đám mây chứa URI cho các tài nguyên khác trong đám mây và cũng cho các hoạt động có thể được thực hiện trên chúng (ví dụ: triển khai và khởi động máy ảo).

Các cốt truyện cũng có thể hữu ích.


2
Đó là nền tảng khiến tôi bắt đầu con đường HATEAOS.
CyberFonic

3
tất cả các liên kết đã chết
Roeland Van Heddegem

"Chúng tôi xin lỗi trang web kenai.com đã đóng cửa."
Nick Rolando

@NickRolando, tôi đã thay thế liên kết.
Giàu Apodaca

@RichApodaca, liên kết backstory đã chết.
Vasantha Ganesh K

7

Netflix có API REST dựa trên HATEOAS bao gồm các liên kết như một phần của tài nguyên.


1
và bây giờ mã trạng thái là 404.
naXa

1
@Will Sargent link bị hỏng, vui lòng cập nhật.
Govi S

Xin lỗi, có vẻ như Netflix đã gỡ nó xuống và đi với thứ khác.
Sẽ mở rộng

2
Câu trả lời chỉ liên kết có xu hướng ít liên quan hơn khi các liên kết như vậy đã chết.
nyedidikeke

@nyedidikeke nó là một liên kết nhưng một câu trả lời cho bối cảnh này, bạn chỉ cần sửa liên kết bằng cách chỉnh sửa bài đăng!
Al-Mothafar

3

Không phải RESTfulness của Sun Cloud API thực sự được đề cập ở điểm thứ 4 của Roy:

API REST không được xác định tên tài nguyên hoặc cấu trúc phân cấp cố định (khớp nối rõ ràng giữa máy khách và máy chủ). Máy chủ phải có quyền tự do kiểm soát không gian tên của chính họ. Thay vào đó, cho phép các máy chủ hướng dẫn khách hàng cách xây dựng các URI phù hợp, chẳng hạn như được thực hiện trong các biểu mẫu HTML và mẫu URI, bằng cách xác định các hướng dẫn đó trong các loại phương tiện và quan hệ liên kết. [Thất bại ở đây ngụ ý rằng các máy khách đang giả định cấu trúc tài nguyên do thông tin ngoài băng, chẳng hạn như tiêu chuẩn dành riêng cho miền, là hướng dữ liệu tương đương với khớp nối chức năng của RPC].

Ví dụ 1 Tên tài nguyên cố định trong một người thừa kế được xác định:

Từ API của Sun Cloud: "... đại diện của VDC sẽ bao gồm các đại diện của các Cụm cư trú trong đó, lần lượt bao gồm các đại diện của VM trong mỗi cụm."

Ví dụ 2 thông tin ngoài băng, chẳng hạn như tiêu chuẩn dành riêng cho tên miền:

Bạn phải có nội dung trang wiki (thông tin ngoài băng tần) để biết rằng "cơ chế truyền thông tài nguyên" cho trường tài nguyên đám mây "uri" là GET.


2
Bạn đúng, đó là rất sai lệch. Tuy nhiên, Roy đang nói về tên tài nguyên trong không gian uri, không phải trong nội dung của loại phương tiện truyền thông. Sun có thể tự do thay đổi uri được sử dụng để truy cập vào một cụm bất cứ lúc nào. Rõ ràng, nó không thể thay đổi thuật ngữ "cụm" thành "nhóm" bên trong đại diện mà không tạo phiên bản mới của loại phương tiện, nhưng nó có thể thay đổi URI thành bất cứ điều gì.
Darrel Miller

4
Chúng tôi biết rằng API Sun sử dụng HTTP làm giao diện thống nhất, vì vậy khách hàng không cần nhìn vào trang wiki để biết rằng GET là một động từ hợp lệ cho tài nguyên đám mây. Nó có thể chỉ cần thử xem xét nó biết rằng GET là một động từ an toàn hoặc nó có thể sử dụng TÙY CHỌN để xác định xem nó có sẵn hay không.
Darrel Miller

3

Tôi nhận ra điều này đã được hỏi cách đây một thời gian, nhưng tôi đã cố gắng thể hiện luồng API REST "phù hợp" cho một ví dụ đơn giản. Tôi đã cố tuân theo các quy tắc của Roy cho REST - có lẽ nó có thể giúp: Ví dụ API sử dụng REST

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.