4

我有一个 REST API,并且我正在添加一个新功能,该功能允许用户GET根据他们提供的条形码图像从资源中获取一些信息。

我的问题是:就最佳实践而言,这样做的正确方法是什么?

以下是我对这个问题的一些想法。

得到:

使用GET,我通常会像这样在 URI 中指定标准:foo?name=bar,但是以相同的方式传递图像数据很可能会由于长度而失败(查看这个)。

根据这些答案,在正文而不是 URI 中传递数据似乎也不是一个好的解决方案。

邮政:

但是,我可以使用POST请求,但这不是很 RESTful,因为我只是在检索信息。

4

3 回答 3

4

您的资源将做两件事

  1. 分析条形码图像并获取一些 id
  2. 使用上面的 id 向从某些(数据)源检索的客户端提供信息

您可以将分析条形码图像建模为资源BarCodes该资源接受带有通过POST提交的图像的请求,分析条形码图像 (1) 并在位置标头中返回一个 URL,该 URL 可用于检索一些数据 (2)。

这种方法将您想要在两个资源/步骤中实现的两个功能分开。

您可以通过这种方法获得:

  • 符合 REST 的接口
  • 您可以决定异步处理条形码图像提取任务,并在位置标头中仅返回一个 URL 以检索有关条形码提取过程的状态
  • 条码分析和信息检索功能分离
于 2012-04-07T14:30:39.550 回答
1

首先,将图像(文件)数据从浏览器传递到 Web 服务器的唯一方法是通过 POST 请求。在寻找最佳解决方案时请注意这一点。

其次,RESTful 资源模型的含义是资源具有非常短的字符串或数字的标识符,并且由服务器在创建时分配以供客户端以后使用。

您的问题不适合 REST 模型。所以你很清楚可以继续使用任何在实践中有效的方法。

于 2012-04-07T13:30:10.617 回答
0

在 RESTful 服务上,资源使用一组固定的操作进行操作:

PUT : creates a new resource, which can be then deleted using DELETE
GET : retrieves the current state of a resource
POST: transfers a new state onto a resource

在您的情况下,您应该寻找GET操作。具有大量输入数据的请求无法在 URI 中编码的问题(即错误 414:URO 太长))只有当您必须在 URI 中传递长参数时才会出现问题,这是 REST 的一个限制,用于检索这不是问题,我尝试了一个 REST 服务,该服务返回一组 XML 文件。

于 2012-04-07T13:11:47.167 回答