2009-05-13 3 views
3

Как реализовать поддержку копирования-вставки в RESTful?Как реализовать копию пасты ресурса в REST?

Предположим, у меня есть ресурс книжного магазина. И книги в каждом магазине

http://mydomain.com/rest/book-stores/1 
http://mydomain.com/rest/book-stores/1/books/12 

Мне нужен клиент, чтобы иметь возможность вызывать копию копии книги в другой магазин.

Реализация следующее:

PUT http://mydomain.com/rest/books/1/copy-paste 

кажется очень RPC как. Есть ли у вас какое-либо предположение, как эта операция может быть смоделирована с помощью RESTful?

+2

Что это значит? Копировать откуда? Вставить туда, где? Вы говорите о всей стороне сервера? – dustyburwell

+0

хороший комментарий, я обновлю вопрос – LiorH

+0

Этот [вопрос] (http://stackoverflow.com/questions/5555620/how-to-move-a-rest-resource) показывает неплохой пример перемещения ресурса. – ssedano

ответ

9
+2

действительно решает проблему, но для этого требуется два обратных перехода к серверу. – LiorH

+1

Нет, вы не могли бы это сделать за одну поездку. Все, что вам нужно, это URI для элемента, который вы хотите скопировать, и поместить эту информацию в сообщение URI нового объекта. – kemiller2002

+1

Является ли производительность такой проблемой, вы не можете сделать два обратных перехода на сервер? KISS –

0

У меня было бы так, чтобы пользователь выполнил команду PUT для выполнения действия.

Так что что-то вроде переменной в данных формы содержит правильное действие для выполнения.

+0

-1: Это не менее вызов RPC, чем исходный вопрос. Он попросил RESTful-способ, и положить действие в тело - нет. –

+0

На самом деле, я думаю. REST означает, что объект находится по адресу URL и всегда может повторно получить доступ к этому элементу, перейдя по этому URL-адресу. Событие POST показывает, что вызывающий объект хочет выполнить действие над этим элементом. – kemiller2002

+0

Однако RESTful указывает, что HTTP-глагол (GET, PUT, DELETE) и т. Д. Указывает на действие, которое необходимо выполнить. Помещение действия в тело POST - это RPC-стиль, а не RESTful. –

1

Это только проблема, если ваши ресурсы организованы так, чтобы имитировать иерархическую систему. Как файловая система.

Я предпочитаю неиерархические ресурсы. «Путь» к файлу будет просто свойством файла. Для копирования-вставки существует два варианта.

  1. Если вам действительно нужна другая ссылка «путь», добавьте еще одну запись для свойства «путь». Тот же самый точный файл находится в «обеих» папках.

  2. Если вам нужна новая версия файла, эффективно изменив изменения после этого, создайте новый ресурс (другой URI) с другим свойством «путь».

  3. Чтобы переместить, просто измените свойство «путь».

Если вы должны настаивать на иерархическом, просто подражайте, как файловая система копирует и вставляет.

Копия проста. GET для копирования ресурса.

Вставить POST, потому что вы создаете новый ресурс, новый URI.

Если вам нужно сделать ход, вероятно, вам нужно УДАЛИТЬ старый ресурс.

Если вы хотите, вы можете указать местоположение в запросе удаления, позволяя серверу перенаправлять пользователей, которые ищут перемещенный ресурс в своем прежнем местоположении.