我有一个 Java 组件,它扫描一组文件夹(输入/处理/输出)并返回 JSON 格式的文件列表。
相同的 REST URL 是:
GET http://<baseurl>/files/<foldername>
现在,我需要对每个文件执行某些操作,例如验证、处理、删除等。我不确定为这些操作设计 REST URL 的最佳方法。 由于它是直接文件操作,因此我没有文件的任何唯一标识符,除了它们的路径。所以我不确定以下是否是一个好的 URL:
POST http://<baseurl>/file/validate?path=<filepath>
编辑:理想情况下,我希望使用类似/file/fileId/validate 的东西。但是文件的唯一唯一 ID 是它的路径,我认为我不能将它用作 URL 本身的一部分。
最后,我不确定要使用哪个 HTTP 动词来执行诸如验证之类的自定义操作。
提前致谢!
问候, 阿南德
最佳答案
当你实现像 http:///file/validate?path 这样的路由时在为资源服务建模时,您对资源中的操作进行了编码,这不是预期的效果。
您可以对读取操作执行以下操作
获取 http://api.example.com/files将返回所有文件作为 URL 引用,例如
http://api.example.com/files/path/to/first
http://api.example.com/files/path/to/second
...
获取 http://api.example.com/files/path/to/first将返回文件的验证结果(为了便于阅读,我使用 JSON)
{
name : first,
valid : true
}
那是简单的只读部分。现在到写操作:
删除 http://api.example.com/files/path/to/first当然会删除文件
对文件处理进行建模是困难的部分。但是您可以将其建模为顶级资源。这样:
发布http://api.example.com/FileOperation?operation=somethingweird将创建一个虚拟文件处理资源并执行由 URL 参数 'operation' 给出的操作。将这些文件操作建模为资源使您可以异步执行操作并返回一个结果,该结果提供有关操作过程等的附加信息。
可以看看Amazon S3 REST API有关如何建模资源的更多示例和灵感。我强烈推荐阅读 RESTful Web Services
关于http - 设计合适的 REST URI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8293132/