我正在嘗試設計一個類似RESTful的文件系統服務,而複製/移動操作正在給我帶來一些麻煩。RESTful複製/移動操作?
首先,上傳新文件使用一個PUT該文件的最終URL來完成:
PUT /folders/42/contents/<name>
的問題是,如果新的文件已經在不同的URL駐留在系統上?
複製/移動理念1:與自定義標題看跌期權。
這類似於S3's copy。看起來一樣的上傳,但與自定義頁眉認沽:
PUT /folders/42/contents/<name>
X-custom-source: /files/5
這是好的,因爲它很容易在複製更改文件名/移動時間。但是,S3不提供移動操作,可能是因爲使用此方案的舉動不會是冪等的。
複製/移動思想2:POST到父文件夾。
這類似於Google Docs copy。個帖子與XML內容描述源文件的目標文件夾:
POST /folders/42/contents
...
<source>/files/5</source>
<newName>foo</newName>
我也許可以張貼到該文件的新URL更改其名稱..?否則,我會在XML內容中指定一個新名稱,這會放大此想法的RPC性。這也是不符合上傳操作理念1.
最終我在尋找的東西,很容易使用和理解是一致的,所以除了上述的新思路批評當然歡迎!如果資源已經存在,那麼你更新的資源,並返回200 如果資源不然後創建並返回存在
對不起,我的意思是如果新文件已經駐留在系統上的另一個URL。也就是說,我不想重新上傳文件。我只是想重新安置。 – ladenedge 2010-06-10 21:39:10
我們用POST發送到父容器。這似乎是新手最容易理解的方法。感謝您的想法! – ladenedge 2010-07-20 17:38:57
你應該在郵件正文中發送URL參數 – Tarion 2013-02-20 14:18:32