我正在一个研究小组工作,我们打算通过RESTful API发布我们在网络上开发的一些算法的实现。大多数这些算法适用于中小型数据集,在许多情况下,我们服务的用户可能希望在同一数据集上运行多个查询(具有不同的参数),因此对我来说,允许用户上传他们的数据似乎是合理的。数据集提前并在以后的查询中引用它们。从这个意义上讲,数据集可以是我的API中的资源,而算法可以是另一种算法。
我的问题是:我应该如何让用户上传自己的数据集?我不能简单地让用户将他们的数据上传到/dataset/dataset_id
,因为让用户发明他们自己的dataset_id
可能会导致ID冲突,并且用户会意外地覆盖彼此的数据集。 (我相信最常用的数据集ID之一是test
)。我认为理想的方法是拥有一个专用的URL(如/dataset/upload
),用户可以在其中发布数据集,响应将包含存储数据集的唯一ID,但我不确定它是否存在不违反REST的基本原则。处理此类情景的首选方式是什么?
答案 0 :(得分:3)
根据this,您不应该使用专用URI,而应将POST作为/ dataset /作为创建处理。
答案 1 :(得分:1)
你的想法并没有违反REST的原则:)
首选方法是使用POST并将路径返回到Location头中新创建的资源。
在你的情况下。客户端POST到/ dataset。服务器生成标识符并返回Location-header中数据集的引用:
位置:/ dataset / 1234
响应状态应为201(已创建)