2014-12-31 58 views
4

我建立一個RESTful應用與Laravel 4.2,使用資源的控制器,如下所述: https://scotch.io/tutorials/simple-laravel-crud-with-resource-controllersLaravel REST風格的最佳實踐

該應用程序是一個在線出版平臺。 應用程序的一部分允許客戶端上傳圖像並裁剪不同出版物的圖像。 每個圖像可能會標題,標題,藝術家,描述。

通常,RESTful GET-index請求URL將如下所示。 HTTP GET:example.com/image/

每個圖像都會用這樣的URL檢索。 HTTP GET:example.com/image/{id}

圖像編號3將被HTTP DELETE刪除到像這樣的URL。 HTTP刪除:example.com/image/3

但是我的RESTful困境產生,因爲每個圖像必須存儲在預定義的裁剪大小。 因此圖像資源將共享標題,藝術家和描述,將表示必須在四種不同尺寸可檢索: 原來, 1024×768, 640×480, 320×240

預期的需求是每年大約80,000圖片,導致320,000個獨立的圖像文件(每個原始文件+ 3個作物)。

這裏就是我要找的「最佳實踐」的建議......

我應該我的圖像模型模樣,讓客戶解決一個終點的每個裁剪圖像的容易些?

什麼是處理標題,藝術家和描述的共同性質的好方法?

如果我想要檢索原始圖片#3和1024x768中的URL,那麼這些網址會是什麼樣子:example.com/image/ ??? 1024x768:example.com/image/???

如果我想刪除圖像#3的所有裁剪版本,URL的外觀如何: HTTP DELETE:example.com/image/???

感謝您的任何想法,你可以分享!

回答

4

我要說的縮略圖子資源的Image資源;也許是一個Thumbnail資源?因此,你可以有一個URL結構類似如下:

嵌套資源控制器可在Laravel中實現:http://laravel.com/docs/4.2/controllers#restful-resource-controllers(搜索標題「處理嵌套資源控制器」)。

這樣,你可以刪除Image資源時,首先Thumbnail資源發出請求父Image資源,只需設置一個監聽器上Image模型刪除子操縱單個縮略圖資源,而且圖片(及任何縮略圖) 。事情是這樣的:

Image::deleting(function($image) 
{ 
    Thumbnail::where('image_id', '=', $image->id)->delete(); 
}); 
+1

感謝,Laravel的「嵌套」控制器路由是正是我需要的! –

+0

@RayPaseur很高興我可以幫助:) –

1

大小的圖像文件是原始圖像資源的從屬資源。所以大小信息應該是來編號:http://example.com/image/3/1024x768(或者因爲你的分辨率是靜態的,你可以做somethiing像http://example.com/image/3/large

如果要刪除原有的各種規模,DELETE http://example.com/image/3

如果你想刪除單個大小,DELETE http://example.com/image/3/1024x768

如果你想上傳一個新的圖像大小,你可以做,POST http://example.com/image/3(使用代碼來檢查圖像尺寸)

6

我不知道Laravel如何與RESTful API中,但一般在RESTful API中的URL規則有點不同。

另外我發現this文章非常有用。

+2

同意:Vinay Sahni文章整合了很多好的信息在一個地方。謝謝! –