【问题标题】:Laravel RESTful best practicesLaravel RESTful 最佳实践
【发布时间】:2014-12-31 18:12:26
【问题描述】:

我正在使用 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, 320x240

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

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

我的图像模型应该是什么样子才能让客户处理一个端点以便轻松检索每个裁剪的图像?

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

如果我想在 Original 和 1024x768 中检索 Image #3,URL 会是什么样子: 原文:example.com/image/??? 1024x768:example.com/image/???

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

感谢您分享任何想法!

【问题讨论】:

    标签: php image rest symfony laravel-4


    【解决方案1】:

    我不知道 Laravel 如何与 Restful API 配合使用,但总的来说,Restful API 中 url 的规则有点不同。

    我还发现this 的文章非常有用。

    【讨论】:

    • 同意:Vinay Sahni 的文章将很多有用的信息整合到一个地方。谢谢!
    【解决方案2】:

    我认为缩略图是Image 资源的子资源;也许是Thumbnail 资源?因此,您的 URL 结构可能如下所示:

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

    这样,您可以通过向父 Image 资源发出请求来操作单个缩略图资源,也可以操作图像(以及任何缩略图)——只需在 Image 模型上设置一个侦听器以首先删除子 Thumbnail 资源删除 Image 资源时。像这样的:

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

    【讨论】:

    • 谢谢,Laravel 的“嵌套”控制器路由正是我所需要的!
    • @RayPaseur 很高兴我能帮上忙 :)
    【解决方案3】:

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

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

    如果你想删除单个尺寸,DELETE http://example.com/image/3/1024x768

    如果你想上传新的图片尺寸,你可以这样做,POST http://example.com/image/3(使用代码检查图片尺寸)

    【讨论】:

      【解决方案4】:

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

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

      更多信息请见http://www.odata.org/getting-started/basic-tutorial

      【讨论】:

        猜你喜欢
        • 2018-07-09
        • 1970-01-01
        • 2013-03-14
        • 2021-07-03
        • 2016-03-23
        • 1970-01-01
        • 2020-05-22
        • 2014-06-23
        • 2018-09-05
        相关资源
        最近更新 更多