Laravel RESTful 最佳实践


Laravel RESTful best practices

我正在使用资源控制器使用 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 删除:example.com/image/3

然而,我的 RESTful 困境出现了,因为每个图像都必须以预定义的裁剪大小存储。因此,图像资源将共享标题、艺术家和描述,并且具有必须以四种不同大小检索的表示形式: 源语言 1024x768, 640x480, 320×240

预期需求约为每年 80,000 张图像,从而产生 320,000 个单独的图像文件(每个原始 + 3 个裁剪)。

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

我的图像模型应该是什么样子,才能允许客户端解决端点以便轻松检索每个裁剪的图像?

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

如果我想检索原始图像 #3 和 1024x768 的图像,URL 会是什么样子: 原文:example.com/image/??? 1024x768:example.com/image/???

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

感谢您分享任何想法!

我不知道Laravel如何与Restful API一起工作,但总的来说,Restful API中的URL规则略有不同。

  • 获取单个对象 - http://example.com/images/{id} - 使用方法 GET
  • 获取列表 - http://example.com/images - 使用方法 GET
  • 插入/创建一个新对象 - http://example.com/images - 使用方法 POST
  • 删除 - http://example.com/images/{id} - 使用方法 DELETE
  • PUT -
  • http://example.com/images/{id} - 使用方法 PUT
  • 获取带有一些参数的单个对象 - http://example.com/images/{id}?type=small - 使用方法 GET

我也发现这篇文章非常有用。

我认为

缩略图是Image资源的子资源;也许是Thumbnail资源?因此,您可以拥有如下所示的 URL 结构:

  • http://example.com/image/{id}
  • http://example.com/image/{id}/thumbnail/{small|medium|large}

嵌套资源控制器可在 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();
});

大小的图像文件是从属于原始图像资源的资源。 所以大小信息应该在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(使用代码检查图像大小)

我不知道

什么是"最佳"做法。

从我的角度来看,遵循OASIS开放数据协议(OData)版本4.0是一种很好的做法

查看 http://www.odata.org/getting-started/basic-tutorial 了解更多信息