【问题标题】:Specifing parameters in REST API GET request在 REST API GET 请求中指定参数
【发布时间】:2015-07-02 21:09:08
【问题描述】:

我希望能够在 ONE 请求中指定产品的图像大小,对此我有不同的想法,他们是:

mysuperstore.com/api/categories/40/products/53?width=100&height=100

我认为这是不好的做法,因为不清楚宽度和高度是什么意思,也许有产品的物理尺寸。

另一个变种是:

mysuperstore.com/api/categories/40/products/53/image?width=100&height=100

看起来还不错,但是在这种情况下我必须发出两个请求,它似乎是另一个资源id(图像)。

第一个请求是针对产品的

  mysuperstore.com/api/categories/40/products/53/

第二个是图片地址

mysuperstore.com/api/categories/40/products/53/image?width=100&height=100

是的,我不需要返回原始图像(数据),只需返回 URL。
我正在使用 Slim 框架在 PHP 服务器上创建 API。我发现了一个带有可选参数的 API 请求示例

$app->get('/archive(/:year(/:month(/:day)))', function ($year = 2010, $month = 12, $day = 05) use ($app) {
    echo sprintf('%s-%s-%s', $year, $month, $day);
    print_r($app->request()->get());
});

所以前面的 URL 将匹配这个例子,我可以在一个请求中传递所有必需的参数。

所以我的问题是这样做是否是一个好习惯,也许这个 URL 可能会让不熟悉 API 的人感到困惑。

  mysuperstore.com/api/categories/40/products/53/image?width=100&height=100

所以我在问比我更有经验的人,我的目标是创建无需阅读大量 API 文档即可清楚理解的 API。我的 API 应该遵循所有最佳实践。

这就是我问这个问题的原因,我希望有人可以帮助我。

【问题讨论】:

    标签: php android api http slim


    【解决方案1】:

    我会这样做:

    mysuperstore.com/api/categories/40/products/53/?image[width]=100&image[height]=100
    

    【讨论】:

    • 谢谢,我会听从你的建议的。
    【解决方案2】:

    我认为它与 SLIM 框架无关,而更多的是一个设计实现问题。您可以随时查看此guide API 设计最佳实践。

    对于您关于图像的问题,您可以遵循苹果或谷歌指南,他们使用 image_name[WIDTH]x[HEIGHT].jpeg ,例如:

    http://a4.mzstatic.com/us/r30/Purple7/v4/c2/36/25/c2362536-f6fc-4ef6-2a03-9b899ca00af9/screen480x480.jpeg

    图像是预先生成的,可在 CDN 上使用。取决于您必须处理的呼叫数量,但动态生成新图像可能会非常消耗负载。至少你应该存储/缓存已经生成的图像。

    【讨论】: