我有一个REST API,我正在添加一个新功能,允许用户根据他们提供的条形码图像GET
来自资源的一些信息。
我的问题是:在最佳做法方面做到这一点的正确方法是什么?
以下是我对此问题的一些看法。
获取:
使用GET
,我通常会在URI中指定条件:foo?name=bar
,但以相同的方式传递图像数据很可能会因长度(looking at this)而失败。
根据these answers,在正文中传递数据而不是URI似乎也不是一个好的解决方案。
发表:
然而,我可以使用POST
请求,但这不是非常RESTful,因为我只检索信息。
答案 0 :(得分:4)
您的资源将执行两项操作
您可以将条形码图像分析为资源条形码。此资源接受通过 POST 提交的图像的请求分析条形码图像(1)并返回位置标题中可用于检索某些数据的网址(2)
这种方法将您想要实现的两个功能分成两个资源/步骤。
你通过这种方法获益:
答案 1 :(得分:1)
首先,通过POST请求将图像(文件)数据从浏览器传递到Web服务器的唯一方法是。当您正在寻找最佳解决方案时,请注意这一点。
其次,RESTful资源模型的含义是资源具有非常短的字符串或数字的标识符,并且在创建时由服务器分配以供客户稍后使用。
您的问题并不适合REST模型。所以你很清楚继续使用在实践中运作的任何方法。
答案 2 :(得分: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中传递long参数时才有问题, 这是REST的一个限制, 对于重新启动这不是问题,我尝试过一种REST服务,其中服务返回一个XML文件。