2009-11-17 33 views
5

Tôi có giao diện phía máy khách cho phép người dùng thực hiện nhiều chỉnh sửa đối với đường viền giống cây. Tôi xem xét tổng hợp các hồ sơ tạo nên đường viền đó, tính tổng thể, một tài nguyên đơn lẻ (/ phác thảo/39) mặc dù các phần của nó có thể được truy cập dưới dạng các tài nguyên riêng biệt thông qua các URL khác nhau.Phương pháp hay nhất để cập nhật tài nguyên có cấu trúc thông qua REST?

Vấn đề là người dùng có thể chỉnh sửa các nút hiện có trong đường viền cũng như thêm các nút mới vào đường viền. Thông thường, khi bạn chỉnh sửa một cái gì đó bạn PUT thay đổi của nó và khi bạn thêm một cái gì đó mới bạn POST nó; tuy nhiên, trong một số trường hợp, bạn sẽ muốn bao gồm tất cả các thay đổi - bao gồm cả việc thêm và chỉnh sửa - trong một giao dịch duy nhất. Một số cách thực tế mà mọi người đã xử lý này là gì?

Mặc dù các phác thảo đã tồn tại và một PUT có vẻ thích hợp, nhúng cho biết thêm vi phạm idempotence của PUT. Tôi không chắc rằng POST có vẻ phù hợp không. Vì mục đích thiết kế, tôi đã quyết định không lưu từng bản cập nhật riêng biệt mà người dùng thực hiện mặc dù tôi đoán điều này cung cấp một giải pháp. Tuy nhiên, phải có những người khác đã giải quyết vấn đề của tôi hoặc có ý tưởng về nó.

Trả lời

1

Có cách nào bạn có thể tạo thêm idempotent không? Ví dụ. nếu các nút có khóa tự nhiên thì khi khách hàng cố thêm nút lần thứ hai bạn không thể làm gì cả.

+0

Không có khóa tự nhiên, nhưng điều này dẫn tôi để xem xét rằng máy chủ (hoặc khách hàng) có thể món ăn ra các hướng dẫn tạm thời khi tôi tạo các nút mới. Bằng cách này, một bản ghi sẽ được nhận dạng bằng id và guid của nó. Bằng cách sử dụng các guids, tôi không kết thúc tiêu thụ id nếu người dùng không cam kết toàn bộ giao dịch. Trên ghi chú đó, nó đặt ra câu hỏi về việc sử dụng một guid làm PK thay vì một hạt giống nhận dạng. Sẽ cho nó một số suy nghĩ. Cảm ơn. – Mario

+0

Thú vị! Mừng vì tôi có thể giúp. –

+0

Sau khi điều tra thêm, tôi đã quyết định PUT chỉ đúng khi bạn đang cắt tài nguyên toàn bộ. Vì tôi chỉ PUTting trở lại delta (thêm/cập nhật/xóa các nút), tôi nghĩ rằng nó có ý nghĩa hơn để PUT rằng delta trở lại một URL tài nguyên phụ, tương tự như đề xuất tài nguyên phụ giao dịch của bạn. Tôi chưa từng tìm hiểu chi tiết. – Mario

0

Cách thực hiện: tạo tài nguyên mới:/phác thảo/39/giao dịch và POST giao dịch của bạn với tài nguyên đó, ví dụ:

POST "addNode = node1, addNode = node2, editNode = node3, newName = foobar" đến/phác thảo/39/giao dịch

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