Trong cách nói REST, sự khác biệt giữa tài nguyên và biểu diễn là gì?


9

Sự hiểu biết của tôi về REST cho phép mô hình hóa các hoạt động dịch vụ dưới dạng biểu diễn trạng thái và chuyển từ trạng thái này sang trạng thái khác bằng cách sử dụng HTTP. Tôi luôn hiểu tài nguyên là đại diện của nhà nước bên dịch vụ cho đến gần đây khi tôi đọc bài viết này của Jimmy Bogard, người mà tôi biết là một nhà phát triển / kiến ​​trúc sư thông minh được cộng đồng tôn trọng. Để trích dẫn một tuyên bố cụ thể từ bài viết đó

Biểu diễn hơi khác một chút - nó mô tả trạng thái hiện tại của tài nguyên (khi được yêu cầu).

Điều này đã khiến tôi bối rối. Ý kiến ​​thường được chấp nhận về chủ đề này là gì?


1
Bạn có thể muốn kiểm tra: Tôi có thể hỏi về chủ đề nào ở đây? . Các cuộc thăm dò ý kiến ​​không thuộc chủ đề dành cho Lập trình viên.
Adam Zuckerman

2
Vâng, tất cả mọi thứ được liệt kê trên trang đó không có câu trả lời bằng màu đen và trắng nhưng tất cả các ý kiến. Ngoài ra, tôi không chắc câu hỏi này như thế nào về ý kiến. Có phải chỉ vì tôi đã sử dụng từ "ý kiến" trong câu hỏi của mình?
Suhas

Chủ yếu, vâng. Thật không may (hoặc có lẽ may mắn thay), các từ "ý kiến", "thực hành tốt nhất" và tương tự đã được liên kết mạnh mẽ với "một khoang cộng hưởng trống rỗng, nơi một bộ não nên", vì hầu hết những người sử dụng thuật ngữ đó chỉ muốn phát hiện ra một bầy đàn trong khoảng cách và đi theo sau nó. Những người tìm kiếm định nghĩa từ thường là những người phạm tội tồi tệ nhất. Vấn đề cụ thể nào bạn đang cố gắng giải quyết?
Robert Harvey

1
Đối với câu hỏi của bạn, một tài nguyên chỉ là "một cái gì đó trên internet có địa chỉ", trong khi một đại diện là "cách thức mà thứ trên internet được trình bày lại." Nó có thể là một tệp, một trang web hoặc một tài liệu JSON. Nó có thể là một loại tệp cụ thể, như tài liệu Word hoặc bảng tính. Trong tất cả các trường hợp này, đại diện là thứ mà bạn đang lấy. "Trạng thái hiện tại của tài nguyên" là một sự thừa nhận rằng thứ đó có thể đã thay đổi kể từ lần cuối bạn lấy nó.
Robert Harvey

Câu trả lời:


14

Câu trả lời ngắn

bản đồ không phải là lãnh thổ.

Còn câu trả lời - như với bất cứ điều gì REST, các nơi để bắt đầu là với Roy Fielding luận án ; đặc biệt chương 5 . Đối với câu hỏi hiện tại của bạn, bạn muốn phần 5.2.1.

REST được xác định bởi bốn ràng buộc giao diện: xác định tài nguyên; thao túng tài nguyên thông qua các đại diện; tin nhắn tự mô tả; và, hypermedia là động cơ của trạng thái ứng dụng.

Nguồn

Sự trừu tượng hóa thông tin chính trong REST là một tài nguyên. Bất kỳ thông tin nào có thể được đặt tên đều có thể là tài nguyên: tài liệu hoặc hình ảnh, dịch vụ tạm thời (ví dụ: "thời tiết hôm nay ở Los Angeles"), một tập hợp các tài nguyên khác, một vật thể không ảo (ví dụ như một người), v.v. . Nói cách khác, bất kỳ khái niệm nào có thể là mục tiêu của tham chiếu siêu văn bản của tác giả phải phù hợp với định nghĩa của tài nguyên. Tài nguyên là một ánh xạ khái niệm cho một tập hợp các thực thể, không phải là thực thể tương ứng với ánh xạ tại bất kỳ thời điểm cụ thể nào.

Đại diện

Các thành phần REST thực hiện các hành động trên một tài nguyên bằng cách sử dụng một biểu diễn để nắm bắt trạng thái hiện tại hoặc dự định của tài nguyên đó và chuyển biểu diễn đó giữa các thành phần. Một đại diện là một chuỗi các byte, cộng với siêu dữ liệu đại diện để mô tả các byte đó. Các tên thường được sử dụng nhưng ít chính xác hơn cho một đại diện bao gồm: tài liệu, tệp và thực thể thông điệp HTTP, thể hiện hoặc biến thể.

Một đại diện bao gồm dữ liệu, siêu dữ liệu mô tả dữ liệu và đôi khi là siêu dữ liệu để mô tả siêu dữ liệu (thường nhằm mục đích xác minh tính toàn vẹn của thông điệp).

Vì vậy: "thời tiết hôm nay ở Los Angeles" là một tài nguyên. Các đại diện của ứng viên sẽ bao gồm: một tài liệu văn bản với dự báo mới nhất từ ​​dịch vụ thời tiết quốc gia; một đại diện trực quan của radar thời tiết và ghi âm dự báo.


2

Một tài nguyên là thứ mà bạn đang làm việc. Ví dụ: nếu bạn có API để chuyển đổi một loại đèn nhất định, thì tài nguyên chính là đèn. Tài nguyên có thể là vật lý (ví dụ: đèn, người) hoặc phi vật lý (ví dụ: bài viết, vai trò, một hàng trong cơ sở dữ liệu), tài nguyên có thể là chính (ví dụ: số dư) hoặc dẫn xuất (ví dụ: giao dịch). Một tài nguyên có thể đề cập đến một thực thể cụ thể (ví dụ: đèn thứ năm được lắp đặt trong ổ cắm đèn này) hoặc có thể đề cập đến vai trò ánh xạ tới thực thể khác nhau vào các thời điểm khác nhau (ví dụ: đèn hiện được cài đặt, đèn được cài đặt vào ngày 5 tháng 8 năm 2008) hoặc nó có thể ánh xạ tới nhiều thực thể (ví dụ như tất cả các đèn trong nhà).

Việc thể hiện tài nguyên là cách dịch vụ của bạn truyền đạt trạng thái của tài nguyên, ví dụ XML, JSON đại diện cho trạng thái của đèn.

Trong API REST, tài nguyên được xác định bởi một mã định danh thống nhất (ví dụ: URI). Một tài nguyên có thể có nhiều biểu diễn, trong HTTP REST API, bạn thường chỉ ra biểu diễn bạn muốn sử dụng trong các tiêu đề Loại nội dung và Chấp nhận HTTP.

Một nhận thức quan trọng trong kiến ​​trúc máy chủ máy khách là bạn không thể mang tài nguyên đến máy khách và bạn không nên cố gắng làm cho nó giống như bạn. Thay vào đó, trong API REST, bạn thao tác từ xa một tài nguyên bằng cách chuyển các biểu diễn của tài nguyên. Hãy nghĩ về điều này giống như, bạn không FedEx đèn để khách hàng có thể thao tác trực tiếp với đèn, mà thay vào đó, dịch vụ tạo ra biểu diễn XML / JSON / protobuf / CSV của đèn và khách hàng gửi đại diện cho các thao tác dự định. Sau đó, dịch vụ sẽ xử lý trạng thái thực tế của đèn thay cho khách hàng hoặc từ chối yêu cầu, cho biết nếu khách hàng không được phép thực hiện các thao tác trên đèn. Điều này có vẻ rõ ràng / chia tóc, nhưng điều quan trọng cần lưu ý là vì đại diện không phải là tài nguyên,


1

Một tài nguyên có thể là một hóa đơn.

Một đại diện là một hóa đơn tại một thời điểm cụ thể theo định dạng JSON hoặc ở định dạng XML. Bạn có thể nhận được cùng một hóa đơn vào một ngày sau đó, đó sẽ là cùng một tài nguyên nhưng ở trạng thái có khả năng khác nhau (bị hủy, đã thanh toán, v.v.).

Bạn lấy trạng thái hiện tại của hóa đơn (ví dụ: tất cả dữ liệu hóa đơn trong cơ sở dữ liệu) và cung cấp cho nó một đại diện cụ thể (ví dụ: html, xml, json) tại một thời điểm cụ thể, để chuyển sang một số thiết bị khác (ví dụ: một trình duyệt)

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.