EDIT1: Như tôi thấy trên thế giới, đối với hầu hết các lập trình viên REST là một khái niệm sẽ là xem xét khi tạo API. Vì vậy, REST nằm trong danh sách việc cần làm của bạn khi bạn tạo API cho mức tiêu thụ theo máy; KHÔNG phải khi bạn đang nói về các trang web mà con người sẽ tương tác thông qua trình duyệt. EDIT2: Và điều đó không ngụ ý rằng trình duyệt không phải là RESTful (có nghĩa là). Tôi chỉ có nghĩa là nơi mà hành động hiện tại là, nơi mà hầu hết các lập trình viên thế giới (những người không làm việc cho một nhà sản xuất trình duyệt) có thể hưởng lợi từ REST chủ yếu là trong các dịch vụ web.
Hãy lấy ví dụ về ứng dụng mà chúng ta đều biết: wikipedia.
OK, nhưng đây không phải là ví dụ hay nhất - Wikipedia là trang web phong phú, tức là trang web có nội dung phong phú dành cho con người chứ không phải máy tính.
GET/wiki/ARTICLE_NAME: có được một trang nào đó
DELETE/wiki/ARTICLE_NAME: xóa trang
POST/wiki/ARTICLE_NAME: tạo ra một trang mới
PUT/wiki/Article_name: cập nhật trang.
Cơ sở hạ tầng của bạn dựa trên mô hình sử dụng con người cho Wikipedia, do đó sự nhầm lẫn.
Tôi đang cung cấp ví dụ nhanh về API cho Wikipedia dưới đây, hy vọng nó sẽ giúp minh họa quan điểm của tôi. Nó được thực hiện rất nhanh chóng; và tôi không tuyên bố nó là một thiết kế API tốt. :-)
Lưu ý 1: Trong ví dụ API bên dưới, tôi đang sử dụng JSON. Theo như "RESTfulness" có liên quan, nó không phải là JSON, bất kỳ định dạng dữ liệu nào có thể được trao đổi một cách có ý nghĩa qua HTTP đều ổn. Các ví dụ khác có thể là XML, TXT, JPEG, AVI. Nói chung, "RESTfulness" áp dụng cho các tiêu đề URL và HTTP, không phải cho nội dung trang - phần thân còn lại miễn phí cho các nhu cầu triển khai cụ thể.
Lưu ý 2: Tôi giả sử Wikipedia có định dạng dữ liệu có cấu trúc nội bộ được chuyển thành trang HTML - chỉ để minh họa quan điểm của tôi, vì Wikipedia không thực sự là ví dụ tốt nhất để làm việc với ...
một phát súng đầu tiên tại một API RESTful cho Wikipedia có thể là một cái gì đó như:
api.wikipedia.com/search/keywords
Mất một GET với các từ tìm kiếm trong URL, trả lại tập dữ liệu JSON là ID trang, tiêu đề trang, URL và điểm liên quan.
api.wikipedia.com/article/id/
Mất một GET, xóa, POST, PUT, và sẽ hoạt động trên các bài viết với ID nội bằng "id" trong URL.Tùy thuộc vào phương thức HTTP của yêu cầu, nó sẽ:
- GET; bài viết trả về (trong định dạng dữ liệu dựa trên JSON được xác định trước của Wikipedia.)
- DELETE; xóa bài viết
- BÀI; tạo bài viết mới (bài viết phải ở trong phần yêu cầu, theo định dạng JSON được xác định trước)
- PUT; bài viết cập nhật (và toàn bộ trang phải được gửi một lần nữa trong cơ thể)
api.wikipedia.com/media/id/
Là "bài viết" thiết bị đầu cuối trên, nhưng đối với CRUD của phương tiện truyền thông như vậy như hình ảnh. .. v.v., cho đến khi tất cả nhu cầu của API Wikipedia tưởng tượng này được đáp ứng.
Xem lướt qua API tưởng tượng ở trên cho thấy một số vấn đề .. và đó là vẻ đẹp của REST; nó là đơn giản và không nhận được trong cách trực quan hóa dữ liệu exhange.
là REST cũng là giao diện "cho trình duyệt " hoặc chỉ dành cho tập lệnh?
EDIT3 Văn bản gốc là: Nó không dành cho trình duyệt, nó chỉ dành cho các API dành cho tiêu thụ bởi khách hàng hay dịch vụ mà là 'máy' khác.
Tôi muốn thay đổi điều này để: Trình duyệt là RESTful. Nó cũng là một sự cho phép, tức là với cơ sở đã cài đặt, và lượng thời gian cần thiết để IE6 được thay thế, rõ ràng là các trình duyệt mà chúng ta có ngày nay sẽ ở với chúng ta trong một thời gian dài. Và các trình duyệt hiện tại không làm bất cứ điều gì đặc biệt với microformats hoặc các trang web có XHTML để hiển thị trang và XHTML để truyền dữ liệu, chúng để lại tất cả những gì bạn thực hiện thông qua Javascript.
Vì vậy, với các công nghệ hiện tại, hầu hết sự phát triển mới áp dụng REST là xây dựng các API dịch vụ web tốt hơn. Và cân nhắc thực tế sẽ khiến mọi người chọn đặt API dịch vụ web của họ trên một URL khác với trang web chính của họ.
Tương đối so với các công nghệ dịch vụ web khác, REST có lợi thế đáng kể trong việc gỡ lỗi dễ dàng. Bạn chỉ có thể kích hoạt ứng dụng khách trên PC, gửi URL và xem phản hồi ngay lập tức. (OK, điều tương tự cũng áp dụng ở một mức độ nào đó đối với nhiều dịch vụ web dựa trên XML; nhưng XML do máy tạo ra là không thực tế đối với tôi để 'đọc'.)
chúng ta nên xem thế giới HTTP độc quyền thông qua con mắt của một đại diện REST?
Ehh, no. Trình duyệt xử lý, những gì, 97% lưu lượng truy cập trang web của ngày hôm nay là trung bình?
nên truy cập web và giao diện REST được xen kẽ hoặc tách biệt?
riêng, trong ví dụ trên tôi đã sử dụng api.wikipedia.com để minh họa rằng nó hoàn toàn tách biệt với trang web Wikipedia thường xuyên. Để cân nhắc thực tế, chẳng hạn như cân bằng tải, lịch phát hành khác nhau, các yêu cầu kinh doanh khác nhau.
Tôi không biết nếu những gì bạn phơi bày là chính xác 100%, nhưng nó là rõ ràng, đến điểm, và sâu sắc. Cảm ơn! –
Theo luận án của Roy Fielding (phần 5.2.3) một trong các thành phần REST chính là "tác nhân người dùng" ... "ví dụ phổ biến nhất là trình duyệt web" Bạn có thể làm rõ nơi bạn có ý tưởng rằng REST chỉ dành cho tiêu thụ bằng máy? –
@ Darrel Miller: a) Cảm ơn bạn, bạn đã nhắc tôi về một trường hợp quan trọng mà tôi bỏ ra: Nếu khách hàng là một giao diện Ajax phong phú (chạy bên trong trình duyệt, nhưng được xây dựng chủ yếu từ các thành phần Javascript) thì một khách hàng chắc chắn có thể kết nối vào một API dịch vụ RESTful. b) Về nơi tôi có ý tưởng rằng REST chỉ dành cho máy móc: Tôi không nói Roy Fielding dự định như vậy; Tôi nói nhiều hơn rằng việc sử dụng HTTP của trình duyệt sẽ không thay đổi bất kỳ lúc nào, do cơ sở ** HUGE ** được cài đặt. Do đó việc thay đổi mô hình trình duyệt là IMHO ít thú vị hơn; nhưng cải thiện các dịch vụ web và SOA là có giá trị. –