Lợi thế của việc sử dụng REST thay vì không phải là HTTP HTTP là gì?


Câu trả lời:


162

Tôi không nghĩ bạn sẽ nhận được câu trả lời tốt cho vấn đề này, một phần vì không ai thực sự đồng ý với REST gì . Các trang wikipedia là nặng về thuật ngữ thông dụng và ánh sáng trên giải thích. Trang thảo luận đáng để đọc lướt qua để xem mọi người không đồng ý với điều này như thế nào. Tuy nhiên, theo như tôi có thể nói, REST có nghĩa như sau:

Thay vì có URL setter và getter tên ngẫu nhiên và sử dụng GETcho tất cả các getter và POSTcho tất cả các setters, chúng tôi cố gắng để có URL này xác định các nguồn lực, và sau đó sử dụng các hành động HTTP GET, POST, PUTDELETEđể làm công cụ cho họ. Vì vậy, thay vì

GET /get_article?id=1
POST /delete_article   id=1

Bạn sẽ làm

GET /articles/1/
DELETE /articles/1/

Và sau đó POSTPUTtương ứng với các hoạt động "tạo" và "cập nhật" (nhưng không ai đồng ý theo cách nào).

Tôi nghĩ rằng các đối số bộ nhớ đệm là sai, vì các chuỗi truy vấn được thường lưu trữ, và bên cạnh đó bạn không thực sự cần phải sử dụng chúng. Ví dụ, django làm cho một cái gì đó như thế này rất dễ dàng, và tôi sẽ không nói đó là REST:

GET /get_article/1/
POST /delete_article/     id=1

Hoặc thậm chí chỉ bao gồm động từ trong URL:

GET /read/article/1/
POST /delete/article/1/
POST /update/article/1/
POST /create/article/

Trong trường hợp GETđó có nghĩa là một cái gì đó không có tác dụng phụ và POSTcó nghĩa là một cái gì đó thay đổi dữ liệu trên máy chủ. Tôi nghĩ rằng đây có lẽ là rõ ràng hơn một chút và dễ dàng hơn, đặc biệt là khi bạn có thể tránh được toàn bộ PUTchuyến bay từ POSTđiều. Ngoài ra, bạn có thể thêm nhiều động từ nếu bạn muốn, vì vậy bạn không bị ràng buộc giả tạo với những gì HTTP cung cấp. Ví dụ:

POST /hide/article/1/
POST /show/article/1/

(Hoặc bất cứ điều gì, thật khó để nghĩ về các ví dụ cho đến khi chúng xảy ra!)

Vì vậy, kết luận, chỉ có hai lợi thế tôi có thể thấy:

  1. API web của bạn có thể sạch hơn và dễ hiểu / dễ khám phá hơn.
  2. Khi đồng bộ hóa dữ liệu với một trang web, có thể sử dụng REST dễ dàng hơn vì bạn chỉ có thể nói synchronize("/articles/1/")hoặc bất cứ điều gì. Điều này phụ thuộc rất nhiều vào mã của bạn.

Tuy nhiên tôi nghĩ có một số nhược điểm khá lớn:

  1. Không phải tất cả các hành động dễ dàng ánh xạ tới CRUD (tạo, đọc / truy xuất, cập nhật, xóa). Bạn thậm chí có thể không xử lý các tài nguyên loại đối tượng.
  2. Đó là nỗ lực thêm cho lợi ích đáng ngờ.
  3. Nhầm lẫn như cách nào PUTvà tròn POST. Trong tiếng Anh, chúng có nghĩa tương tự ("Tôi sẽ đặt / đăng thông báo lên tường.").

Vì vậy, để kết luận tôi sẽ nói: trừ khi bạn thực sự muốn nỗ lực thêm hoặc nếu dịch vụ của bạn ánh xạ thực sự tốt đến các hoạt động CRUD, hãy lưu REST cho phiên bản API thứ hai của bạn.


Tôi vừa gặp một vấn đề khác với REST: Không dễ để thực hiện nhiều hơn một điều trong một yêu cầu hoặc chỉ định phần nào của đối tượng ghép bạn muốn nhận. Điều này đặc biệt quan trọng trên thiết bị di động nơi thời gian khứ hồi có thể là đáng kể và các kết nối không đáng tin cậy. Ví dụ: giả sử bạn đang nhận được bài đăng trên dòng thời gian của facebook. Cách REST "thuần túy" sẽ giống như

GET /timeline_posts     // Returns a list of post IDs.
GET /timeline_posts/1/  // Returns a list of message IDs in the post.
GET /timeline_posts/2/
GET /timeline_posts/3/
GET /message/10/
GET /message/11/
....

Đó là loại vô lý. API của Facebook là IMO khá tuyệt vời, vì vậy hãy xem họ làm gì:

Theo mặc định, hầu hết các thuộc tính đối tượng được trả về khi bạn thực hiện một truy vấn. Bạn có thể chọn các trường (hoặc kết nối) bạn muốn trả về với tham số truy vấn "trường". Ví dụ: URL này sẽ chỉ trả về id, tên và hình ảnh của Ben: https://graph.facebook.com/bgolub?fields=id,name,picture

Tôi không biết làm thế nào bạn sẽ làm một cái gì đó như thế với REST và nếu bạn đã làm liệu nó vẫn được tính là REST. Tôi chắc chắn sẽ bỏ qua bất cứ ai cố gắng nói với bạn rằng bạn không nên làm điều đó (đặc biệt nếu lý do là "vì đó không phải là REST")!


4
POST và PUT có nghĩa là được sử dụng cho RFC HTTP. Trong trường hợp này, PUT có nghĩa là tạo / cập nhật một cái gì đó tại một vị trí cụ thể - điều này xảy ra tùy thuộc vào việc có một cái gì đó đã có tại URI hay không (trong khi đó cũng là idempotent) trong khi POST có nghĩa là bạn yêu cầu dịch vụ web xác định vị trí của bạn gửi nó - và sau đó nó trả về cho bạn URI (vì vậy nó chỉ tạo). Không thể thực sự phàn nàn về tiếng Anh, không phải khi nó hoàn toàn tắt để sử dụng XÓA khi đề cập đến bất cứ điều gì ngoài máy tính. Tôi đang tự hỏi phải làm gì liên quan đến vấn đề được đưa ra trong bản chỉnh sửa của bạn, mặc dù: P
Nan L

7
Ví dụ API Facebook trông giống như REST đối với tôi (thực tế hơn nhiều so với các ví dụ của bạn sử dụng động từ trong URL). Không có lý do tại sao các tham số truy vấn không thể là RESTful, đó chỉ là cách thực hành tốt để sử dụng các đường dẫn nơi dữ liệu có thể được sắp xếp theo thứ bậc.
Justin Emery

5
Các chuỗi truy vấn hoàn toàn RESTful miễn là bạn không tạo tham chiếu đến các tài nguyên trong chúng. Tôi có xu hướng nghĩ về chúng giống như các bộ lọc có thể điều chỉnh hành vi của điểm cuối.
Sina

3
-1, REST là một cái gì đó rất cụ thể - như được mô tả bởi Roy Fielding khi ông phát minh ra nó. Xem câu trả lời này . đặc biệt: "Máy khách chỉ cần biết URI ban đầu và sau đó chọn từ các lựa chọn do máy chủ cung cấp để điều hướng hoặc thực hiện các hành động." . Về cơ bản, nếu bất kỳ phần nào của điểm cuối tài liệu API, ví dụ: "được cung cấp id người dùng, bạn có thể lấy thông tin người dùng tại /user/{id}, thì nó không yên tâm. Hãy xem xét: trình duyệt của bạn có phải được lập trình sẵn để biết cách lấy HTML cho câu hỏi stackoverflow không trang?
Claudiu

1
(tiếp tục ...) Rằng những người khác sử dụng sai thuật ngữ này không thay đổi ý nghĩa của nó. Mặc dù vậy, từ chối trách nhiệm: Tôi vẫn chỉ đang học REST là gì và đây là thứ đã nhấp cho tôi gần đây.
Claudiu

47

Nói một cách đơn giản, REST có nghĩa là sử dụng HTTP theo cách nó có nghĩa.

Hãy xem luận văn của Roy Fielding về REST . Tôi nghĩ rằng mọi người đang phát triển web nên đọc nó.

Lưu ý, Roy Fielding cũng là một trong những trình điều khiển chính đằng sau giao thức HTTP.

Để đặt tên cho một số lời khuyên:

  • Đơn giản.
  • Bạn có thể sử dụng tốt bộ đệm HTTP và máy chủ proxy để giúp bạn xử lý tải cao.
  • Nó giúp bạn tổ chức ngay cả một ứng dụng rất phức tạp thành các tài nguyên đơn giản.
  • Nó giúp khách hàng mới dễ dàng sử dụng ứng dụng của bạn, ngay cả khi bạn chưa thiết kế ứng dụng riêng cho họ (có thể, vì họ không có mặt khi bạn tạo ứng dụng của mình).

11
"Đơn giản": Tại sao REST đơn giản hơn HTTP?
Dimitri C.

5
"Giúp bạn tổ chức": Vì vậy, tổ chức này khó khăn hơn khi chỉ sử dụng GET và POST?
Dimitri C.

1
"Nó giúp khách hàng mới dễ dàng sử dụng ứng dụng của bạn": đây là về REST so với HTTP đơn giản, phải không?
Dimitri C.

23
Tuân thủ các ràng buộc REST chắc chắn không đơn giản. Việc ép các hoạt động kinh doanh phức tạp thành bốn động từ tiêu chuẩn đôi khi thực sự khó khăn. Tuy nhiên, khi được thực hiện tốt, kết quả cuối cùng có thể đơn giản để hiểu, nhưng nhận được bất cứ điều gì nhưng.
Darrel Miller

6
@Dimitri: "Đơn giản" vì nó cung cấp cho bạn một khung đơn giản để làm việc. REST HTTP! Nó đơn giản hơn SOAP (thậm chí còn có tên đơn giản). "Giúp bạn tổ chức" - khái niệm này không khó để hiểu và, một khi được thực hiện đúng - nó làm cho mọi thứ rất tốt. REST có thể là một cách thiết kế ứng dụng, thay vào đó là một chi tiết triển khai. Như Darrel chỉ ra việc thực hiện nó có thể không dễ dàng, nhưng kết quả là rất bổ ích. "Nó giúp khách hàng mới dễ dàng sử dụng ứng dụng của bạn" - Một lần nữa: REST HTTP.
Emil Ivanov

31

Đơn giản chỉ cần đặt: KHÔNG .

Hãy thoải mái tải xuống, nhưng tôi vẫn nghĩ rằng không có lợi ích thực sự nào so với HTTP HTTP không. Tất cả các câu trả lời hiện tại là không hợp lệ. Lập luận từ câu trả lời được bình chọn nhiều nhất hiện nay:

  • Đơn giản.
  • Bạn có thể sử dụng tốt bộ đệm HTTP và máy chủ proxy để giúp bạn xử lý tải cao.
  • Nó giúp bạn tổ chức ngay cả một ứng dụng rất phức tạp thành các tài nguyên đơn giản.
  • Nó giúp khách hàng mới dễ dàng sử dụng ứng dụng của bạn, ngay cả khi bạn chưa thiết kế ứng dụng riêng cho họ (có thể, vì họ không có mặt khi bạn tạo ứng dụng của mình).

1. Đơn giản

Với REST, bạn cần lớp giao tiếp bổ sung cho các tập lệnh phía máy chủ và phía máy khách => nó thực sự phức tạp hơn so với việc sử dụng HTTP không phải REST.

2. Bộ nhớ đệm

Bộ nhớ đệm có thể được kiểm soát bởi các tiêu đề HTTP được gửi bởi máy chủ. REST không thêm bất kỳ tính năng nào bị thiếu trong non-REST.

3. Tổ chức

REST không giúp bạn sắp xếp mọi thứ. Nó buộc bạn phải sử dụng API được hỗ trợ bởi thư viện phía máy chủ mà bạn đang sử dụng. Bạn có thể sắp xếp ứng dụng của mình theo cùng một cách (hoặc tốt hơn) khi bạn đang sử dụng phương pháp không phải REST. Ví dụ, xem định tuyến Model-View-Controller hoặc MVC .

4. Dễ sử dụng / thực hiện

Không đúng chút nào. Tất cả phụ thuộc vào mức độ bạn tổ chức và tài liệu ứng dụng của bạn. REST sẽ không làm cho ứng dụng của bạn tốt hơn.


3
thông thường apis còn lại dễ lưu trữ bộ đệm hơn vì bạn tách dữ liệu thành các tài nguyên có cùng vòng đời (được tạo và cập nhật cùng một lúc) để bạn có thể tin cậy bộ nhớ cache và bộ đệm cache - trong khi apis không bắt giữ thường trả lại dữ liệu có đã được xử lý rất nhiều bài đăng hoặc là một tập hợp của nhiều thực thể khiến việc lưu trữ bộ đệm trở nên khó khăn hơn
Scott Schulthess

2
đúng nó không loại trừ lẫn nhau (bạn có thể có một api không nghỉ có thể lưu trong bộ nhớ cache) nhưng sử dụng phương pháp tiếp cận nghỉ ngơi để thiết kế api khuyến khích và trong thực tế, nó chắc chắn có liên quan vì nó khuyến khích các thực tiễn tốt nhất khác nhau (khả năng khám phá, giao diện chung, lưu trữ, mô hình tài nguyên thông minh )
Scott Schulthess

4
"REST không giúp bạn sắp xếp mọi thứ. Nó buộc bạn phải sử dụng API được hỗ trợ bởi thư viện phía máy chủ mà bạn đang sử dụng." Tôi không chắc ý của bạn là gì Hoàn toàn có thể (và không còn khó khăn hơn việc xây dựng API không phải REST) ​​để tạo API RESTful mà không cần sử dụng khung công tác phía máy chủ bổ sung.
Michael O.

2
"Với REST bạn cần lớp giao tiếp bổ sung" - humbug, bạn có thể sử dụng thư viện HTTP hiện tại của mình thật tốt.
Søren Boisen

1
@ SørenBoisen Câu trả lời này hơi cũ. Tôi có lẽ nên cập nhật nó để phản ánh nhiều hơn tình trạng hiện tại.
Petr Peller

23

IMHO lợi thế lớn nhất mà REST cho phép là giảm khớp nối máy khách / máy chủ. Việc phát triển giao diện REST theo thời gian sẽ dễ dàng hơn nhiều mà không phá vỡ các máy khách hiện có.


4
Bạn có thể cho một ví dụ? Cảm ơn!
Jan Żankowski

3
Điều đó có phụ thuộc vào mức độ bị mất của API không REST của bạn không?
johnny

@johnny Có thể, nhưng không thể. Các ràng buộc của REST đã được chọn để cho phép rõ ràng sự tiến hóa độc lập của các thành phần. Nếu bạn đã tìm ra cách để làm điều này tốt hơn mà không áp dụng các ràng buộc tương tự, thì tôi chắc chắn nhiều người muốn nghe về nó.
Darrel Miller

@DarrelMiller Bạn có thể giải thích rõ hơn Làm thế nào REST giảm kết nối máy khách / máy chủ tốt hơn so với cách tiếp cận Non REST http không? Tôi tin rằng bạn đang chỉ vào điểm Timmmm nói trong câu trả lời của anh ấy / cô ấy. Vui lòng xem nhận xét mới nhất của tôi dưới câu trả lời của
Timmmm

@emilly hệ thống REST không dựa vào thông tin ngoài băng để có thể xử lý phản hồi. Không có giả định cần phải được thực hiện về những gì có thể trở lại từ một yêu cầu cụ thể. Câu trả lời cho bạn biết mọi thứ bạn cần biết. Điều này cho phép một máy chủ thay đổi hành vi của nó và khách hàng có thể nhận thức được những thay đổi đó.
Darrel Miller

15

Khám phá

Mỗi tài nguyên có tham chiếu đến các tài nguyên khác, theo phân cấp hoặc liên kết, vì vậy thật dễ dàng để duyệt xung quanh. Đây là một lợi thế cho con người phát triển khách hàng, giúp anh ta / cô ta không ngừng tư vấn các tài liệu và đưa ra các đề xuất. Điều đó cũng có nghĩa là máy chủ có thể đơn phương thay đổi tên tài nguyên (miễn là phần mềm máy khách không mã hóa các URL).

Khả năng tương thích với các công cụ khác

Bạn có thể HỎI theo cách của bạn vào bất kỳ phần nào của API hoặc sử dụng trình duyệt web để điều hướng các tài nguyên. Làm cho việc gỡ lỗi và kiểm tra tích hợp dễ dàng hơn nhiều.

Tên động từ chuẩn hóa

Cho phép bạn chỉ định các hành động mà không cần phải tìm từ ngữ chính xác. Hãy tưởng tượng nếu Oetters getters và setters không được tiêu chuẩn hóa, và một số người đã sử dụng retrievedefine thay vào đó. Bạn sẽ phải ghi nhớ động từ chính xác cho từng điểm truy cập riêng lẻ. Biết rằng chỉ có một số ít động từ có sẵn vấn đề.

Tình trạng chuẩn hóa

Nếu bạn GETlà tài nguyên không tồn tại, bạn có thể chắc chắn gặp 404lỗi trong API RESTful. Đối chiếu nó với API không RESTful, có thể quay trở lại {error: "Not found"}được bao bọc trong Chúa biết có bao nhiêu lớp. Nếu bạn cần thêm không gian để viết tin nhắn cho nhà phát triển ở phía bên kia, bạn luôn có thể sử dụng phần thân của phản hồi.

Thí dụ

Hãy tưởng tượng hai API có cùng chức năng, một API theo sau và API còn lại thì không. Bây giờ hãy tưởng tượng các ứng dụng khách sau cho các API đó:

PHỤC HỒI:

GET /products/1052/reviews
POST /products/1052/reviews       "5 stars"
DELETE /products/1052/reviews/10
GET /products/1052/reviews/10

HTTP:

GET /reviews?product_id=1052
POST /post_review?product_id=1052                  "5 stars"
POST /remove_review?product_id=1052&review_id=10
GET /reviews?product_id=1052&review=10

Bây giờ nghĩ về các câu hỏi sau đây:

  • Nếu cuộc gọi đầu tiên của mỗi khách hàng hoạt động, làm thế nào chắc chắn bạn có thể là những người còn lại cũng sẽ làm việc?

  • Có một bản cập nhật lớn cho API có thể thay đổi các điểm truy cập đó. Bao nhiêu tài liệu bạn sẽ phải đọc lại?

  • Bạn có thể dự đoán sự trở lại của truy vấn cuối cùng?

  • Bạn phải chỉnh sửa đánh giá được đăng (trước khi xóa nó). Bạn có thể làm như vậy mà không cần kiểm tra các tài liệu?


Đây không phải là một danh sách đầy đủ và chỉ chứa những lợi thế rất thực tế.
BoppreH

Đây là một câu trả lời rất thông minh, tôi hoan nghênh.
EralpB

10

Tôi khuyên bạn nên xem qua cách tôi giải thích REST cho vợ tôi của Ryan Tomayko

Chỉnh sửa bên thứ ba

Trích từ liên kết waybackmaschine:

Làm thế nào về một ví dụ. Bạn là giáo viên và muốn quản lý học sinh:

  • họ học lớp nào
  • họ đang học lớp mấy
  • liên lạc khẩn cấp,
  • thông tin về những cuốn sách bạn dạy, v.v.

Nếu các hệ thống dựa trên web, thì có lẽ có một URL cho mỗi danh từ liên quan ở đây : student, teacher, class, book, room, etc. ... Nếu có một đại diện có thể đọc được bằng máy cho mỗi URL, thì việc chốt các công cụ mới vào hệ thống sẽ là chuyện nhỏ vì tất cả thông tin đó sẽ được tiêu thụ theo cách tiêu chuẩn. ... Bạn có thể xây dựng một hệ thống toàn quốc có thể nói chuyện với từng hệ thống trường học riêng lẻ để thu thập điểm kiểm tra.

Mỗi hệ thống sẽ nhận thông tin từ nhau bằng cách sử dụng HTTP GET đơn giản. Nếu một hệ thống cần thêm một cái gì đó vào hệ thống khác, nó sẽ sử dụng HTTP POST. Nếu một hệ thống muốn cập nhật một cái gì đó trong một hệ thống khác, nó sử dụng PUT HTTP. Điều duy nhất còn lại để tìm ra là dữ liệu sẽ trông như thế nào.


6
Vợ: Đây có phải là một thứ robot khác?
Tobu

4
Đây là một văn bản hay, nhưng nó không đưa ra bất kỳ ví dụ nào về lý do tại sao việc sử dụng GET và POST cho mọi thứ sẽ rất tệ.
Dimitri C.

9
Đó là lý do tại sao tôi cố gắng khám phá lý do tại sao nó tốt hơn :-)
Dimitri C.

7
Các văn bản đã được gỡ xuống.
lướt


5

Tôi muốn đề nghị tất cả mọi người, những người đang tìm kiếm câu trả lời cho câu hỏi này, hãy xem qua "slideshow" này .

Tôi không thể hiểu REST là gì và tại sao nó lại tuyệt vời, ưu và nhược điểm của nó, khác với SOAP - nhưng trình chiếu này rất tuyệt vời và dễ hiểu, vì vậy bây giờ nó rõ ràng hơn nhiều so với trước đây.


3

Bộ nhớ đệm.

Có nhiều lợi ích khác về chiều sâu của REST xoay quanh khả năng tiến hóa thông qua khớp nối lỏng lẻo và siêu văn bản, nhưng các cơ chế lưu trữ là lý do chính mà bạn nên quan tâm về RESTful HTTP.


3
Bạn có thể đưa ra một ví dụ về những gì có thể được lưu trong bộ nhớ cache và tại sao bộ nhớ đệm sẽ không xảy ra với một giải pháp không phải REST?
Dimitri C.

2
@Dimitri C.: Một liên kết wikipedia.org/article?id=19 sẽ không được lưu trữ bởi một proxy, vì nó bỏ qua các tham số được truyền trong url. Mặt khác, một liên kết wikipedia.org/REST sẽ được lưu trữ, được hiểu?
VP.

6
Nếu bộ nhớ đệm là lợi ích chính của REST, tôi có thể đảm bảo với bạn rằng tôi sẽ không mất hai năm qua để xây dựng các dịch vụ RESTful.
Darrel Miller

Darrel, bạn có thể đang xây dựng các hệ thống có quy mô phân phối trong đó khớp nối lỏng lẻo có tầm quan trọng cao nhất (muốn biết loại hệ thống này là gì), nhưng hầu hết mọi người không - hoặc họ đang sử dụng công nghệ (nghĩa là trình duyệt và html) trong đó phần lớn công việc khó khăn được thực hiện cho họ.
Mike

1
Vậy tại sao không chỉ sử dụng GET /get_article/19/POST /update_articlenếu bộ nhớ đệm là mối quan tâm của bạn. Bạn vẫn có thể làm tất cả mọi thứ chỉ với GETPOSTvà tôi tin RESTcó nghĩa là "Sử dụng GET, POST, PUTDELETEduy nhất." và không chỉ "Không sử dụng chuỗi truy vấn." Vì vậy, những gì tôi đề nghị sẽ không được REST. Sau đó, một lần nữa, không ai có thể thực sự đồng ý những gì REST vì vậy tôi đặt nó vào một cái xô với "Web 2.0".
Timmmm

3

Nó được viết trong luận văn Fielding . Nhưng nếu bạn không muốn đọc nhiều:

  • tăng khả năng mở rộng (do trạng thái không trạng thái, bộ đệm và hệ thống lớp)
  • tách rời máy khách và máy chủ (do các ràng buộc giao diện không trạng thái và thống nhất)
    • các máy khách có thể sử dụng lại (máy khách có thể sử dụng các trình duyệt REST và ngữ nghĩa RDF chung để quyết định liên kết nào sẽ theo dõi và cách hiển thị kết quả)
    • không phá vỡ ứng dụng khách (khách hàng chỉ phá vỡ các thay đổi ngữ nghĩa cụ thể của ứng dụng, vì họ sử dụng ngữ nghĩa thay vì một số kiến ​​thức cụ thể về API)

0
  • Cung cấp cho mỗi tài nguyên của người khác
  • Liên kết mọi thứ với nhau
  • Sử dụng các phương pháp tiêu chuẩn
  • Tài nguyên với nhiều đại diện
  • Giao tiếp không quốc tịch

Có thể làm mọi thứ chỉ với POST và GET? Vâng, nó là cách tiếp cận tốt nhất? Không, tại sao? bởi vì chúng tôi có các phương pháp tiêu chuẩn. Nếu bạn nghĩ lại, có thể làm mọi thứ chỉ bằng cách NHẬN .. vậy tại sao chúng ta thậm chí phải bận tâm sử dụng POST? Vì tiêu chuẩn!

Ví dụ, ngày nay nghĩ về một mô hình MVC, bạn có thể giới hạn ứng dụng của mình chỉ phản hồi với các loại động từ cụ thể như POST, GET, PUT và DELETE. Ngay cả khi dưới mui xe, mọi thứ đều được mô phỏng theo POST và GET, không có nghĩa là có các động từ khác nhau cho các hành động khác nhau?


1
"có thể thực hiện mọi thứ chỉ bằng GET": Tôi đã thực hiện một số thử nghiệm với HTTP GET trong Silverlight. Kết luận của tôi là các tin nhắn GET bị giới hạn kích thước đáng kể, trong khi các tin nhắn POST có thể lớn hơn (một lần nữa: trong cài đặt Silverlight). Do đó, tôi chọn sử dụng HTTP POST cho mọi thứ! :-)
Dimitri C.

cả hai giải pháp đều trái với các tiêu chuẩn. Làm mọi thứ qua POST không tốt, đặc biệt cho các truy vấn. Lưu ý rằng trong những năm qua, tất cả các công cụ tìm kiếm trước đây hoạt động như GET đều hoạt động như GET. Tại sao? bởi vì phương thức của get get get có khả năng này được phát hiện ...
VP.

0

Khám phá dễ dàng hơn nhiều trong REST. Chúng tôi có các tài liệu WADL (tương tự WSDL trong các dịch vụ web truyền thống) sẽ giúp bạn quảng cáo dịch vụ của mình ra thế giới. Bạn cũng có thể sử dụng những khám phá UDDI. Với HTTP POST và GET truyền thống, mọi người có thể không biết sơ đồ phản hồi và yêu cầu tin nhắn của bạn để gọi cho bạn.


1
Mô tả một dịch vụ web RESTful với tài liệu WADL đánh bại một trong những lợi thế chính của REST, đặc biệt, tất cả các lợi thế có được từ hypermedia.
Thomas Eizinger

@ThomasEizinger Một WADL có thực sự là một điều tồi tệ như vậy không? Hiện tại chúng tôi đang làm việc với một công ty khác chưa cung cấp WADL trên đầu trang, nó trả về các đối tượng json tùy thuộc vào yêu cầu của chúng tôi chứa gì. Tôi cho rằng WADL sẽ hữu ích để xóa suy nghĩ.
lướt sóng

WADL thực hiện công việc tuyệt vời khi mô tả API HTTP, vì đó là những gì nó được thiết kế cho. Tùy thuộc vào dịch vụ mà công ty này cung cấp, WADL có thể hoặc không phải là một ý tưởng hay. Nếu dịch vụ không tận dụng hypermedia và chỉ tuần tự hóa một số đối tượng thành JSON, họ cũng nên cung cấp tài liệu (WADL, Swagger, v.v.) về cách dịch vụ của họ hoạt động và những gì nó mong đợi / trả về. WADL per se không tệ chút nào, nó chỉ không phải là công cụ phù hợp cho một dịch vụ web RESTful (thực sự).
Thomas Eizinger 11/07/2015

0

Một lợi thế là, chúng ta có thể xử lý không tuần tự các tài liệu XML và dữ liệu XML không theo thứ tự từ các nguồn khác nhau như đối tượng InputStream, URL, nút DOM ...


0

@Timmmm, về chỉnh sửa của bạn:

GET /timeline_posts     // could return the N first posts, with links to fetch the next/previous N posts

Điều này sẽ làm giảm đáng kể số lượng cuộc gọi

Và không có gì ngăn cản bạn thiết kế một máy chủ chấp nhận các tham số HTTP để biểu thị các giá trị trường mà khách hàng của bạn có thể muốn ...

Nhưng đây là một chi tiết.

Quan trọng hơn nhiều là thực tế là bạn đã không đề cập đến những lợi thế to lớn của phong cách kiến ​​trúc REST (khả năng mở rộng tốt hơn nhiều, do trạng thái không trạng thái của máy chủ; tính khả dụng tốt hơn nhiều, do trạng thái không trạng thái của máy chủ; sử dụng tốt hơn các dịch vụ tiêu chuẩn, như bộ nhớ đệm cho chẳng hạn, khi sử dụng kiểu kiến ​​trúc REST, khớp nối giữa máy khách và máy chủ thấp hơn nhiều, do sử dụng giao diện thống nhất, v.v.)

Đối với nhận xét của bạn

"Không phải tất cả các hành động đều dễ dàng ánh xạ tới CRUD (tạo, đọc / truy xuất, cập nhật, xóa)."

: RDBMS cũng sử dụng cách tiếp cận CRUD (CHỌN / CHERTN / XÓA / CẬP NHẬT) và luôn có cách để biểu diễn và hành động theo mô hình dữ liệu.

Về câu của bạn

"Bạn thậm chí có thể không xử lý các tài nguyên loại đối tượng"

: về bản chất, một thiết kế RESTful là một thiết kế đơn giản - nhưng điều này KHÔNG có nghĩa là thiết kế nó đơn giản. Bạn có thấy sự khác biệt ? Bạn sẽ phải suy nghĩ rất nhiều về các khái niệm mà ứng dụng của bạn sẽ đại diện và xử lý, những gì phải được thực hiện bởi nó, nếu bạn thích, để thể hiện điều này bằng các tài nguyên. Nhưng nếu bạn làm như vậy, bạn sẽ kết thúc với một thiết kế đơn giản và hiệu quả hơn.


-1

Chuỗi truy vấn có thể bị bỏ qua bởi các công cụ tìm kiếm.


8
Sử dụng chuỗi truy vấn là hoàn toàn RESTful.
Emil Ivanov

Dimitri, một số công cụ tìm kiếm bỏ qua các liên kết động. Không còn nhiều nữa, nhưng nó vẫn cau mày. Nếu bạn điều hành một trang web nhỏ, thì googlebot có thể không lập chỉ mục tất cả các trang của bạn nếu chúng có dấu chấm hỏi trong đường dẫn.
đăm chiêu

3
... hoàn toàn sai, khi bạn đề cập đến Google: googlewebmastercentral.blogspot.com/2008/09/ Ấn
Boldewyn

-1 cho chuỗi truy vấn không bị bỏ qua bởi các công cụ tìm kiếm. webmasters.googleblog.com/2008/09/ từ
người đàn ông bằng đồng
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.