2008-11-21 37 views
5

Tôi thấy hai loại ví dụ ở những nơi khác nhau. Một sử dụng biểu mẫu form nhưTrọng tải yêu cầu được đề xuất/hiệu quả cho phương pháp REST PUT là gì?

curl -X PUT -d "điện thoại = 123.456.7890" "http://127.0.0.1/services/rest/user/123"

và người kia sử dụng một nội dung XML tương tự (một số biến thể của) này

echo "< người dùng> < id> 123 </id> < điện thoại> 123.456.7890 </phone> </người dùng>" | curl -X PUT -d @ - "http://127.0.0.1/services/rest/user/"

Nó có vẻ như sử dụng các trường mẫu có lợi thế là ngắn gọn và xác định rõ ý định của khách hàng bằng cách nhắm mục tiêu chỉ các lĩnh vực biến đổi, nhưng làm cho nó khó khăn khi phải giải quyết "sâu hơn " metadata.

Sử dụng nội dung XML có lợi thế là hoàn chỉnh hơn, nhưng bất lợi của chi phí để tìm ra trường nào khách hàng thực sự sửa đổi (giả sử rằng họ gửi lại toàn bộ tài nguyên với các sửa đổi nhỏ).

Có phương pháp hay nhất hay thậm chí là thực tiễn phổ biến hơn không?

Trả lời

0

Trong URL mẫu thứ hai không đề cập đến một tài nguyên cụ thể, vì vậy IMHO không phải là RESTful.

Nếu bạn khắc phục điều đó, lựa chọn sẽ chuyển thành biểu mẫu và mã hóa XML.

Nếu bạn cần cấu trúc dữ liệu và mở rộng, sau đó XML có thể có ích:

<phone type="work, mobile"><num>555-555</num><ext>123</ext></phone> 

nhưng không cần thiết:

phone=555-555&phone-ext=123&phone-type=work&phone-type=mobile 

Rất nhiều người dùng API có thể được mã hóa XML sai, gặp khó khăn khi nắm namespace không cần thiết, do đó, mã hóa biểu mẫu có thể tốt hơn cho đối tượng rộng.

0

Câu hỏi hay! Tôi không biết một phương pháp hay nhất hay thông lệ cụ thể nào. Nhưng tôi muốn chỉ ra rằng câu hỏi không thực sự là về các trường biểu mẫu hoặc XML, nó là về các biểu diễn một phần so với các biểu diễn đầy đủ. Bạn đã mô tả ngắn gọn sự khác biệt thực tế giữa chúng. Một khía cạnh của câu hỏi là ai có trách nhiệm xác định những gì đã thay đổi: máy khách hoặc máy chủ.

Tùy chọn kết hợp sẽ là một loại định dạng trong đó khách hàng có thể chỉ định chính xác đã thay đổi, sử dụng cú pháp nào để trỏ tới siêu dữ liệu "sâu hơn", chẳng hạn như XPath hoặc JSONpath.

2

Nó có thể giống như JSON (P)? (Tôi không chắc chắn về cú pháp chính xác):

$ echo '{user: {id: 123, phone: 123.456.7890}}' |\ 
> curl -X PUT -d @- 'http://127.0.0.1/services/rest/user/' 

Hoặc

$ echo '{phone: 123.456.7890}' |\ 
> curl -X PUT -d @- 'http://127.0.0.1/services/rest/user/123.json' 
Các vấn đề liên quan