RESTful API讨论资源 - 图像下载

时间:2014-01-30 14:50:30

标签: api rest resources restful-architecture api-design

我的问题非常简单,我正在设计一个应用程序(在Ruby on Rails BTW中),它也将有一个RESTful API。

在设计应用程序的过程中,我遇到了什么是资源的问题:“下载图像”。

我找到了2个选项:

  1. 有一个名为ImagesController的控制器和一个实际返回要下载的文件的show动作。(GET请求)

  2. 有一个名为ImageDownloadsController的控制器和一个创建动作!(POST请求)

  3. 我选择第二个的原因是因为对我来说,图像控制器的显示动作更有意义的是返回要在浏览器或带有图像的模板上显示的图像URL。

    另外,因为当我设计API时,我认为它会更容易,更有意义,它与我的应用程序的大多数匹配。我的意思是API忠实于我在APP上设计的内容。因此,API上的控制器操作与APP上的大多数操作匹配。

    我认为,对于设计而言,我在ImageController#show上的APP会返回一个文件而在我的API上会返回一个URL。

    相反,我希望在我的APP上有一个名为ImageDownloadsController的控制器,其中create返回文件。在我的API上有一个ImagesController,其中show返回url!我还是不喜欢资源名称ImageDownload!

    我想听听你对此的看法,为什么你认为如果可能的话,一个选项比另一个更好。

2 个答案:

答案 0 :(得分:1)

从期望的角度来看,如果我盲目地(没有RTM)开发客户端,我会期望在使用REST API时使用该动词获取图像,因为这是常用的方式。

现在,在您的情况下,您希望偏离它,以便它与您的应用控制器匹配。那很好,特别是如果你是唯一一个将使用REST API服务的人,但如果其他人会为它开发客户端,那么如果你想要一致地使用REST方法,我会选择你的第一个解决方案。

答案 1 :(得分:1)

我认为这取决于谁将使用您的API。

  • 如果您的API将由您的内部团队使用,那么请使用更可测试且与您的应用程序架构一致的解决方案。
  • 如果您的API是公开的,那么您应该将您的API视为"开发人员的GUI"并使其尽可能可用。实现这一目标的最佳方法之一是进行可用性研究 - 即向不熟悉API的不同开发人员询问他们希望用于下载图像的方法。
顺便说一句,我同意Kay Tsar的意见 - 如果我下载了一张图片,我会使用" GET"方法