2015-01-18 20 views
7

Tôi đang làm việc trên một API REST REST cho danh sách các mục menu điều hướng, khá nhiều cho mục đích học tập. Cho đến thời điểm này mọi thứ trong API khá đơn giản vì tôi chỉ phải sửa đổi các mục đơn lẻ thông qua công cụ cổ điển /collection/{id}.Làm thế nào để cập nhật thứ tự của nhiều mục thông qua REST API?

Nhưng bây giờ Tôi muốn thay đổi thứ tự của danh sách các mục được lưu trữ trong các lĩnh vực order của cơ sở dữ liệu của tôi và dĩ nhiên Tôi không muốn làm một yêu cầu đối với từng mục trình đơn.

Vì vậy, cách nào là một cách thích hợp/phổ biến thực tiễn tốt nhất để làm điều này?

Tôi có thể tưởng tượng gửi yêu cầu PUT tới /collection với cặp khóa-giá trị id trong dữ liệu đã gửi nhưng Laravel (mà tôi sử dụng để tạo API) không cho phép điều này. Tôi chắc chắn có thể chơi xung quanh hạn chế đó nhưng tôi đoán có lý do hợp lý rằng điều này là không được phép.

Một ý tưởng khác là gửi yêu cầu PUT tới /collection/{ids} bằng danh sách ID được phân cách bằng dấu phẩy nhưng tôi cũng phải gửi danh sách khóa-giá trị ID và giá trị đơn đặt hàng của chúng có vẻ khá dư thừa và do với điều đó cũng hơi bẩn.

Vậy điều gì thực sự sẽ là phương pháp tốt nhất?

+1

Sử dụng PATCH để cập nhật một phần trường trong bản ghi và gửi một loạt yêu cầu sau đó chỉ cần lặp qua chúng trong laravel và cập nhật các bản ghi tương ứng – Rafael

+0

PATCH âm thanh thực sự khá hữu ích, tôi dường như đã giám sát phương pháp đó. Nhưng điều đó vẫn không thực sự giải quyết được vấn đề của tôi - hoặc bạn có ý nghĩa gì bởi một loạt các yêu cầu? – Loilo

+0

Bạn có đang sử dụng biểu mẫu hoặc phần tử AJAX không? – Rafael

Trả lời

1

Tôi khuyên bạn nên xác định tuyến đường mới với đường dẫn tài nguyên:/collection/reorder.

Điều này cho phép gửi bằng cách sử dụng phương pháp POST danh sách các phần tử có vị trí mới của chúng. Nội dung sẽ có dạng như sau:

{ 
    "element1": 4, 
    "element2": 1, 
    (...) 
} 

"element1" là định danh của phần tử và giá trị tương ứng, thứ tự mới của phần tử đó.

Bạn có thể nhận thấy định dạng dữ liệu bạn cần gửi cho phương pháp này có thể phụ thuộc vào công cụ bạn sử dụng trong giao diện người dùng để sắp xếp lại danh sách (ví dụ, để kéo thả).

Hy vọng điều đó sẽ hữu ích. Thierry

+0

Điều đó thực sự hữu ích. Tôi đã không chắc chắn nếu nó thích hợp để xác định một tuyến đường mới cho một cái gì đó không thực sự là một mô hình hoặc bộ sưu tập. Cảm ơn! – Loilo

+0

Tôi thường sử dụng phương thức POST của tài nguyên/bộ sưu tập/để thêm phần tử vào bộ sưu tập. Có lẽ liên kết này có thể giúp bạn: https://templth.wordpress.com/2014/12/15/designing-a-web-api/. –

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