Laravel RESTful最佳实践

时间:2014-12-31 18:12:26

标签: php image rest symfony laravel-4

我正在使用资源控制器使用Laravel 4.2构建RESTful应用程序,如下所述: https://scotch.io/tutorials/simple-laravel-crud-with-resource-controllers

该应用是一个在线发布平台。 该应用程序的一部分允许客户上传图像并裁剪图像以用于不同的出版物。 每个图像都可以标记为标题,艺术家,描述。

通常,RESTful GET索引请求URL看起来像这样。 HTTP GET:example.com/image /

将使用这样的网址检索每个图片。 HTTP GET:example.com/image/{id}

图像编号3将通过HTTP DELETE删除到这样的URL。 HTTP DELETE:example.com/image/3

然而,我的RESTful困境的出现是因为每个图像必须以预定义的裁剪尺寸存储。 因此,图像资源将共享标题,艺术家和描述,并且将具有必须以四种不同尺寸检索的表示:   原版的,   1024×768,    640×480,    320×240

预计需求量约为每年80,000张图像,产生320,000张单独的图像文件(原始版本+每幅3幅作品)。

这是我在寻找“最佳实践”建议的地方......

我的图像模型应该是什么样的,以允许客户端寻址一个终点,以便轻松检索每个裁剪的图像?

处理标题,艺术家和描述的共同性质有什么好方法?

如果我想在原始版本和1024x768版本中检索图像#3,网址会是什么样子:   原文:example.com/image / ???   1024x768:example.com/image / ???

如果我想删除Image#3的所有裁剪版本,网址会是什么样子:   HTTP DELETE:example.com/image / ???

感谢您分享的任何想法!

4 个答案:

答案 0 :(得分:7)

我不知道Laravel如何使用Restful API,但一般来说,Restful API中的URL规则有点不同。

我发现this文章非常有用。

答案 1 :(得分:4)

我认为缩略图是Image资源的子资源;也许是一个Thumbnail资源?因此,您可以使用以下URL结构:

在Laravel中可以实现嵌套资源控制器:http://laravel.com/docs/4.2/controllers#restful-resource-controllers(搜索“处理嵌套资源控制器”标题)。

这样,您可以通过发出父Image资源请求来操纵单个缩略图资源,还可以处理图像(以及任何缩略图) - 只需在Image模型上设置一个监听器来删除子{删除Thumbnail资源时首先{1}}资源。像这样:

Image

答案 2 :(得分:1)

大小调整的图像文件是原始图像资源的从属资源。所以大小信息应该在id:http://example.com/image/3/1024x768之后(或者因为你的解析是静态的,你可以像http://example.com/image/3/large那样做一些事情)

如果要删除原始尺寸和所有尺寸,请删除http://example.com/image/3

如果要删除单个尺寸,请删除http://example.com/image/3/1024x768

如果您想上传新图片尺寸,可以执行POST http://example.com/image/3(使用代码查看图片尺寸)

答案 3 :(得分:0)

我不知道什么是“最佳”做法。

从我的观点来看,遵循OASIS开放数据协议(OData)4.0版是一个好习惯

有关详情,请参阅http://www.odata.org/getting-started/basic-tutorial