Laravel RESTful最佳实践

4
我正在使用Laravel 4.2构建一个RESTful应用程序,使用资源控制器,如此处所述:https://scotch.io/tutorials/simple-laravel-crud-with-resource-controllers 该应用程序是一个在线发布平台。 应用程序的一部分允许客户上传图像并为不同的出版物裁剪图像。每个图像可以用标题,艺术家,描述进行标记。
通常,RESTful GET-index请求URL应如下所示。 HTTP GET:example.com/image/
每个图像将通过以下URL检索。 HTTP GET:example.com/image/{id}
图像3将通过HTTP DELETE删除到类似于此URL的位置。 HTTP DELETE:example.com/image/3
然而,我的RESTful困境在于每个图像必须存储在预定义的裁剪尺寸中。因此,图像资源将共享标题,艺术家和描述,并且将有表示必须以四种不同大小检索: 原始的, 1024x768, 640x480, 320x240
预计需求每年约为80,000张图片,共计320,000个独立的图像文件(每个图像有原始尺寸和三个依次缩小的版本)。
这里我需要“最佳实践”建议...
我的图像模型应该是什么样子,才能让客户端方便地检索每个裁剪图像的终端?
处理标题,艺术家和描述的共同性的好方法是什么?
如果我想在原始大小和1024x768中检索图像#3,则URL会是什么样子: 原始:example.com/image/??? 1024x768:example.com/image/???
如果我想删除图像#3的所有裁剪版本,则URL会是什么样子: HTTP DELETE:example.com/image/???
感谢您能分享的任何想法!
4个回答

7
我不知道Laravel如何与Restful API一起工作,但总的来说,在Restful API中URL的规则略有不同。 此外,我发现这篇文章非常有用。

2
同意:Vinay Sahni的文章将许多有用的信息整合在一起。谢谢! - Ray Paseur

4

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

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

这样,您就可以操作单独的缩略图资源,但也可以通过对父Image资源发出请求来处理图片(以及任何缩略图) - 只需在Image模型上设置监听器,以便在删除Image资源时首先删除子级Thumbnail资源。示例如下:

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

1
谢谢,Laravel的“嵌套”控制器路由正是我所需要的! - Ray Paseur
@RayPaseur 很高兴我能帮到你 :) - Martin Bean

1
调整大小的图像文件是原始图像资源的从属资源。因此,大小信息应该在id之后:http://example.com/image/3/1024x768(或者由于您的分辨率是静态的,您可以做类似这样的事情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(使用代码检查图像大小)

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接