对 Restful 架构进行分组

Posted

技术标签:

【中文标题】对 Restful 架构进行分组【英文标题】:Grouping a Restful Architecture 【发布时间】:2013-04-02 06:06:10 【问题描述】:

假设我有一个照片库,有一个类似这样的数据库(Word 中的匆忙模型 ^_^):

我已经为它编写了一个 rest API。但是我对如何映射某个场景感到困惑……

/api/galleries - Lists all of the categories available
/api/galleries/:categoryID – Lists all of the galleries for this category
/api/galleries/:categoryID/:galleryID – Returns all of the info for a gallery
/api/galleries/:categoryID/:galleryID/images – Returns all images for a gallery

现在,我的问题是,如果我想在一个页面上列出所有画廊和所有图片怎么办?就目前而言,我必须调用 /api/galleries/ :categoryID/:galleryID/images/ 用于每个画廊。

您认为这样做的最佳做法是什么?也许完全删除图片资源,然后将图片合并到 /api/gallery/:categoryID/:galleryID 查询的结果中?或者也许创建一个名为“show-all”或其他东西的单独资源?即 /api/galleries/:categoryID/all/show-all 并返回与图像结合的信息?

【问题讨论】:

【参考方案1】:

我绝不是该主题的专家,但对我来说,您的 api 似乎有缺陷。

怎么了

例如这个位置在说谎。

/api/galleries - Lists all of the categories available

我希望它返回一个画廊列表。

/api/galleries/:categoryID

我希望在这里传递画廊 ID。

我的建议

有一个更干净的 api。

/api/galleries                     // get all galleries
/api/galleries?expand=images       // get all galleries with the images
/api/galleries/:id                 // get a specific gallery
/api/galleries/:id?expand=images   // get a specific gallery with the images

/api/galleries/categories          // get all galleries categories
/api/galleries/categories/:cat     // get all galleries in a category

....

通过使用参数,API 不会因为您可能拥有的各种选项而变得杂乱无章。保持简洁。

这是一个关于 REST api 设计的非常好的视频的链接http://www.stormpath.com/blog/designing-rest-json-apis

还有

我认为不需要单独的 info 表。如果您将该信息添加到您的 gallery 表中,它将使数据库更简单。

【讨论】:

现在刚刚实现。 /api/galleries/categories/:cat 会提供画廊资源的索引,还是会返回画廊的数据(如 /api/galleries/)?谢谢 我会返回该类别中的画廊集合。【参考方案2】:

为什么不这样使用。

/api/galleries - Lists all of the categories available
/api/galleries/:categoryID – Lists all of the galleries for this category
/api/galleries/:categoryID/info/:galleryID – Returns all of the info for a gallery
/api/galleries/:categoryID/images/:galleryID – Returns all images for a gallery
/api/galleries/:categoryID/images – Returns all images for a all galleries

【讨论】:

以上是关于对 Restful 架构进行分组的主要内容,如果未能解决你的问题,请参考以下文章

初撩RESTful

前后端分离开发,RESTful 接口如何设计

Java Web学习总结(44)—— RESTful 架构和 RESTful API 设计总结

Java Web学习总结(44)—— RESTful 架构和 RESTful API 设计总结

理解RESTful架构

Django中的RESTful