2010-06-30 27 views
5

Tôi không chắc chắn làm thế nào tôi nên đi về việc cập nhật các thuộc tính cá nhân của một tài nguyên REST. Hãy xem xét ví dụ sau:Tôi nên cập nhật tài nguyên REST như thế nào?

# HTTP GET to /users/1.xml 
<?xml version="1.0" encoding="UTF-8" ?> 
<response> 
    <user> 
     <id>1</id> 
     <name>John Doe</name> 
     <email>[email protected]</email> 
    </user> 
</response> 

Tôi nên tạo điều kiện thuận lợi cho việc cập nhật email của John như thế nào? HTTP PUT đến với tâm trí, nhưng tôi sẽ gây khó khăn cho khách hàng của mình bằng cách yêu cầu một XML hoàn chỉnh (phù hợp với phản hồi HTTP GET) để sửa đổi tài nguyên.

Phương pháp PUT yêu cầu thực thể kèm theo được lưu trữ theo số được cung cấp Yêu cầu-URI. Nếu số Yêu cầu-URI tham chiếu đến tài nguyên hiện có là , thực thể được đính kèm NÊN được coi là phiên bản sửa đổi của một máy chủ gốc trên máy chủ gốc .

Còn cách nào khác không?

Trả lời

7

Nếu khung máy chủ của bạn là đủ để xử lý nó linh hoạt, bạn có thể làm:

Request: 
PUT /users/1/email 
Content-Type: text/plain 

[email protected] 

Response: 
200 OK 
Content-Location: /users/1 

Bằng cách sử dụng một URL để tham khảo email như tài nguyên riêng của mình, bạn có thể PUT trực tiếp đến nó sử dụng một định dạng đơn giản như văn bản/đồng bằng. Trong phản hồi, url Content-Location cung cấp cho khách hàng một dấu hiệu cho thấy thay đổi đã có tác động đến tài nguyên người dùng.

Phương pháp PATCH cũng là một cách khác để bạn có thể thực hiện cập nhật một phần. Đây là một phương thức mới được giới thiệu và chưa có định dạng chuẩn để gửi các tài liệu XML khác nhau. Vì vậy, nếu bạn thực hiện cách tiếp cận này, bạn sẽ không tìm thấy nhiều hướng dẫn.

Điều khác cần xem xét là REST hoạt động tốt nhất với các bản cập nhật hạt lớn. Nếu bạn thấy mình cần phải thực hiện những loại thay đổi nhỏ này, thì có thể bạn cần phải suy nghĩ lại kiến ​​trúc phân tán của mình.

Các vấn đề liên quan