2014-12-31 62 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文章整合了很多好的信息在一个地方。谢谢! –