Sự khác biệt giữa REST & RESTful là gì


540

Sự khác biệt giữa hệ thống REST và hệ thống RESTful là gì?

Từ một vài điều tôi đã đọc hầu hết được gọi là dịch vụ REST thực sự là dịch vụ RESTful. Vậy đâu là sự khác biệt giữa cả hai.


3
Lý do cho câu hỏi là bởi vì nếu bạn đọc bài viết trong liên kết và tìm hiểu xem Dr Fielding nghĩ gì về hầu hết các triển khai REST thì họ hoàn toàn không phải là hệ thống REST. Chúng thể hiện hành vi RESTful nhưng không thể được phân loại là hệ thống REST.
AwickyCoder

4
Tôi đọc bài báo nhưng tôi không nghĩ rằng nó đã dẫn anh ta đến những khác biệt vô dụng về mặt ngữ nghĩa như vậy.
JasonTrue

3
Bài viết trên Wikipedia về REST - en.wikipedia.org/wiki/Repftimeatic_State_Transfer - đoạn thứ hai - "Tuân thủ các ràng buộc REST thường được gọi là 'RESTful'."
Nate

1
@PramodNikumbh có câu trả lời chính xác dưới đây. Hệ thống "REST" là một hệ thống phù hợp với định nghĩa rộng hơn về REST. Nó thể hiện ít nhất một số nguyên tắc nghỉ ngơi. "Restful" mô tả một hệ thống tuân thủ REST nhiều hơn.
Andrew Norman

Chà, tôi nghĩ có một sự nhầm lẫn trong tên, "ưu điểm" trong RESTful sẽ gây nhầm lẫn giữa trạng thái không trạng thái và trạng thái và đó là hai điều khác nhau, theo quan điểm cá nhân của tôi, RESTful phải theo TÌNH TRẠNG. hãy tưởng tượng một REST có trạng thái tên là RESTles. :)
Waheed

Câu trả lời:


487

Chuyển trạng thái đại diện (REST) là một kiểu kiến ​​trúc phần mềm. Như được mô tả trong luận văn của Roy Fielding, REST là một "phong cách kiến ​​trúc" về cơ bản khai thác công nghệ và giao thức hiện có của Web.

RESTful thường được sử dụng để chỉ các dịch vụ web triển khai kiến ​​trúc như vậy.


146
Vậy REST là kiến ​​trúc và RESTful là một tính từ?
manei_cc

4
@manei_cc: Mặc dù trong thực tế, những gì bạn sẽ tìm thấy là các dịch vụ có tên RESTful không tuân theo kiến ​​trúc REST và về cơ bản giống như REST, Wannabies, v.v. Vì vậy, hãy luôn chú ý rằng "dịch vụ RESTful" không nhất thiết phải được xây dựng bằng REST kiến trúc, nhưng đúng như Justin Ethier đã viết: khai thác công nghệ và giao thức hiện có của Web .
Azder

7
RESTful nên được sử dụng cho các API thực sự tôn trọng REST. Tôi đã thấy quá nhiều dịch vụ web "REST" chỉ sử dụng GET hoặc POST. RESTful nhấn mạnh vào việc sử dụng hoàn toàn các động từ HTTP và các quy ước đặt tên URL. Nhưng đó là quan điểm của tôi.
Martin

1
architectcủa cái gì? của url? như https://translation.googleapis.com/language/translate/v2đây là phong cách REST?
Asif Mushtaq

1
stackoverflow.com/users/3807248/pramod-nikumbh có câu trả lời chính xác dưới đây
Andrew Norman

194

Dịch vụ / Kiến trúc dựa trên REST so với Dịch vụ / Kiến trúc RESTFUL

Để phân biệt hoặc so sánh 2 cái này, bạn nên biết REST là gì .

REST ( RE trình bày S tate T ransfer) về cơ bản là một kiểu kiến ​​trúc phát triển có một số nguyên tắc:

  • Nó nên không quốc tịch

  • Nó sẽ truy cập tất cả các tài nguyên từ máy chủ chỉ bằng URI

  • Nó không có mã hóa sẵn có

  • Nó không có phiên

  • Nó sử dụng một và chỉ một giao thức - HTTP

  • Để thực hiện thao tác CRUD, cần sử dụng HTTP động từ như get, post, putdelete

  • Nó sẽ chỉ trả về kết quả dưới dạng JSON hoặc XML, nguyên tử, OData, v.v. (dữ liệu nhẹ)

REST based services Thực hiện theo một số nguyên tắc trên và không phải tất cả

RESTFUL services có nghĩa là nó tuân theo tất cả các nguyên tắc trên.

Nó tương tự như khái niệm:

Object-based languageshỗ trợ tất cả các khái niệm OOP, ví dụ : C ++, C #

Object oriented languageshỗ trợ một số tính năng của OOP, ví dụ : JavaScript, VB


Ví dụ :

ASP Dot NET MVC 4 là REST-Basedtrong khi Microsoft WEB API RESTFul.

MVC chỉ hỗ trợ một số nguyên tắc REST ở trên trong khi API WEB hỗ trợ tất cả các Nguyên tắc REST ở trên.

MVC chỉ hỗ trợ các mục sau từ API REST

  • Chúng tôi có thể truy cập tài nguyên bằng URI

  • Nó hỗ trợ động từ HTTP để truy cập tài nguyên từ máy chủ

  • Nó có thể trả về các kết quả dưới dạng JSON, XML, đó là HTTPResponse.

Tuy nhiên, cùng lúc trong MVC

  • Chúng ta có thể sử dụng phiên

  • Chúng ta có thể làm cho nó có trạng thái

  • Chúng tôi có thể trả lại video hoặc hình ảnh từ phương thức hành động của bộ điều khiển, về cơ bản vi phạm các nguyên tắc REST

Đó là lý do tại sao MVC là REST-BasedAPI WEB hỗ trợ tất cả các nguyên tắc trên RESTFul.


10
Tôi không hiểu tại sao điều này đã bị hạ thấp, câu trả lời này mang lại nhiều thông tin làm rõ cho câu hỏi.
Marcovecchio

5
câu trả lời hay nhất từ ​​trước đến nay
Limon

2
Đây là câu trả lời tốt nhất.
Mário Meyrelles

2
bạn có thể sử dụng FTP với REST. vui lòng xem: stackoverflow.com/questions/35534812/
Kẻ

7
Các ngôn ngữ thuộc danh mục "Dựa trên đối tượng" và "Hướng đối tượng" ở trên bị đảo ngược. Các ngôn ngữ hướng đối tượng tuân theo tất cả các nguyên tắc OOPS, trong khi các ngôn ngữ dựa trên đối tượng tuân theo một số nguyên tắc.
Ông trùm

119

"REST" là một mô hình kiến ​​trúc. "RESTful" mô tả bằng cách sử dụng mô hình đó.


architectcủa cái gì? của url? như https://translation.googleapis.com/language/translate/v2đây là phong cách REST?
Asif Mushtaq

2
Một kiến ​​trúc REST đòi hỏi nhiều đặc điểm. Bạn không thể nói điều gì đó tuân thủ các nguyên tắc REST bằng cách chỉ hiển thị một URL.
SingleShot

42

Như Jason đã nói trong các bình luận, RESTful chỉ được sử dụng như một tính từ mô tả một cái gì đó tôn trọng các ràng buộc REST.


29

REST là viết tắt của chuyển trạng thái đại diện. Điều đó có nghĩa là chính nó không được chuyển giao mà chỉ là một đại diện của nó. Ví dụ phổ biến nhất là một ứng dụng dựa trên máy chủ HTML thuần túy (không có javascript). Trình duyệt không biết gì về chính ứng dụng nhưng thông qua các liên kết và tài nguyên, máy chủ có thể chuyển trạng thái của ứng dụng sang trình duyệt. Trong đó một nút thường sẽ thay đổi một biến trạng thái (ví dụ: mở trang) trong ứng dụng windows thông thường, trong trình duyệt bạn có một liên kết thể hiện sự thay đổi trạng thái như vậy.

Ý tưởng là sử dụng hypermedia. Và có lẽ để tạo ra các loại hypermedia mới. Có khả năng chúng ta có thể mở rộng trình duyệt bằng javascript / AJAX và tạo các loại hypermedia tùy chỉnh mới. Và chúng ta sẽ có một ứng dụng REST thực sự.

Đây là phiên bản ngắn của tôi về những gì REST đại diện, vấn đề là nó khó thực hiện. Cá nhân tôi nói RESTful, khi tôi muốn tham khảo các nguyên tắc REST nhưng tôi biết tôi không thực sự thực hiện toàn bộ khái niệm về REST. Chúng tôi thực sự không nói SOAPful, vì bạn có sử dụng SOAP hay không. Tôi nghĩ rằng hầu hết mọi người không làm REST theo cách mà người sáng tạo ra nó là Roy Fielding, chúng tôi thực sự triển khai các kiến ​​trúc RESTful hoặc RESTlike. Bạn có thể xem luận văn của anh ấy , và bạn sẽ tìm thấy từ viết tắt REST nhưng không phải là từ RESTful.


23

REST là một kiểu kiến ​​trúc phần mềm cho phần mềm phân tán

Tuân thủ các ràng buộc REST được gọi là 'RESTful'.

Rất được sử dụng ngày nay để xây dựng các dịch vụ web thay thế cho SOAP.

Ở đây bạn có một số liên kết để kiểm tra

http://en.wikipedia.org/wiki/Repftimeatic_State_Transfer
http://www.computerworld.com/s/article/297424/Repftimeation_State_Transfer_REST_
http://www.ibm.com/developerworks/webservice/l Library / ws-restful /


13

cảm ơn vì câu trả lời Đọc bài viết này của Alex Rodriguez, gợi ý rằng dịch vụ web RESTful có 4 đặc điểm cơ bản đó là:

  1. Sử dụng các phương thức HTTP một cách rõ ràng.
  2. Không quốc tịch.
  3. Đưa ra các URI giống như cấu trúc thư mục.
  4. Chuyển XML, ký hiệu đối tượng JavaScript (JSON) hoặc cả hai.

Nó thực sự có 6 ràng buộc.
IronBlieo

2
@IronBlieo Chăm sóc để cập nhật câu trả lời với hai người còn thiếu?
Paul Fleming

1
link chết, URL mới xuất hiện để được IBM - dịch vụ Web RESTful
dthal

10

Chuyển giao trạng thái đại diện (REST) ​​là một kiểu kiến ​​trúc phần mềm cho các hệ thống hypermedia phân tán như World Wide Web. Thuật ngữ Chuyển giao Nhà nước Đại diện đã được giới thiệu và định nghĩa vào năm 2000 bởi Roy Fielding 1 [2] trong luận án tiến sĩ của mình. Fielding là một trong những tác giả chính của phiên bản đặc tả Giao thức truyền siêu văn bản (HTTP) 1.0 và 1.1. Tuân thủ các ràng buộc REST được gọi là 'RESTful'. Nguồn: Wikipedia


8

Các dịch vụ web về cơ bản là các trang web có nội dung được sử dụng bởi các chương trình máy tính chứ không phải con người. REST là một tập hợp các nguyên tắc kiến ​​trúc quy định rằng các dịch vụ web nên tận dụng tối đa HTTP và các tiêu chuẩn web khác, để các chương trình đạt được tất cả những thứ tốt mà mọi người đã có thể thoát khỏi web. REST thường tương phản với các dịch vụ web SOAP và các dịch vụ web định hướng "gọi thủ tục từ xa" khác.

Các bài thuyết trình của Stefan Tilkov trên REST tại Parley.com khá hay, đặc biệt là bài này .

Đối với một cuốn sách, bạn không thể nhận được bất kỳ điều gì tốt hơn Dịch vụ web yên tĩnh của Richardson và Ruby .


Vì vậy, một trang web thông thường có thể được coi là một ứng dụng REST?
yoyo_fun

1
@yoyo_fun: Có, một trang web thông thường cũng có thể được xây dựng RESTly. Ở một mức độ trừu tượng nào đó, liệu máy chủ trả lại HTML cho người hay JSON (giả sử) cho chương trình là không quan trọng.
Jim Ferrans


4

Có 4 cấp độ API được xác định trong Mô hình trưởng thành của Richardson. Chúng được định nghĩa là:

  • cấp 0: bất kỳ hệ thống nào có một điểm cuối duy nhất cho tất cả các apis của nó (SOAP hoặc RPC nằm trong danh mục này). Apis cấp 0 cũng có thể giống với "lệnh".

  • cấp 1: một hệ thống mô tả ResourceUri. Đây là một hệ thống xác định nhiều URI dựa trên thực thể (thay vì có một điểm cuối duy nhất như hệ thống cấp 0). Các URI này có thể sử dụng các hành động http khác nhau (POST, GET, PUT, v.v.) để triển khai các hành động khác nhau đối với tài nguyên đó.

  • cấp 2: còn gọi là cấp 1 với việc sử dụng tuân thủ các phương thức / động từ HTTP tiêu chuẩn và phản hồi mã đa trạng thái

  • cấp 3: còn gọi là cấp 2 cộng với HATEOAS (hypermedia có trong phản hồi mô tả các cuộc gọi bổ sung mà bạn có thể thực hiện)

Trong khi cấp 1, cấp 2 và cấp 3 có thể được coi là hệ thống REST, chỉ có các cấp độ nghiêm ngặt hơn (còn gọi là cấp 2 và cấp 3) được coi là RESTful.

Vì vậy, về cơ bản tất cả các apis RESTful đều là REST apis, nhưng không phải tất cả các apis REST đều là RESTful

định nghĩa của mô hình trưởng thành Richardson


2

Hãy nghĩ về REST như một "lớp" kiến ​​trúc trong khi RESTful là "thể hiện" nổi tiếng của lớp đó.

Xin hãy nhớ ""; chúng tôi không làm việc với các đối tượng lập trình "thực" ở đây.


1

"Dịch vụ REST" và "Dịch vụ RESTful" là một và giống nhau.

Hệ thống RESTful là bất kỳ hệ thống nào tuân theo các quy ước REST như được định nghĩa trong tài liệu gốc đã tạo ra ý tưởng về các ứng dụng được kết nối mạng RESTful .

Điều đáng chú ý là có nhiều mức độ khác nhau của RESTfulness. Nhìn chung, REST là một phong cách, không phải là một tiêu chuẩn, vì vậy có chỗ để giải thích dựa trên nhu cầu. một ví dụ là URL tài nguyên phân cấp (ví dụ /things/ID/relatedthings) so với URL phẳng (ví dụ /things/ID/relatedthings?thing=ID)


1

REST (Chuyển trạng thái REpresentation) là một kiến ​​trúc sử dụng dịch vụ WebService được tạo.

RESTful là cách viết các dịch vụ bằng cách sử dụng các kiến ​​trúc REST. Các dịch vụ RESTful trưng ra các tài nguyên để xác định các mục tiêu để tương tác với khách hàng.


0

REST là một mẫu kiến ​​trúc để tạo các dịch vụ web. Một dịch vụ RESTful là một dịch vụ thực hiện mô hình đó.

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.