如何设计需要处理上传文件需求的restful 查询接口呢
我需要一个实现两个功能,需要使用 restful
风格
功能一:查询 GET
api/documents/
即搜索功能:用户需要上传一个文本文件,通过这个文件去搜索有没有相似的文件,类似论文查重的功能
功能二:新增 POST
api/documents/
用户上传一个文本文件,并作为母本保存
我现在的问题是,查询应该使用 get
操作,但是 get
请求如何上传文件呢?
如果改为 post 的话,会和新增
功能冲突,我该如何解决这个矛盾呢?如何平衡这两者,如何设计 API
呢
简单来说我就是觉得使用POST
来查询不够restful
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
软件工程没有银弹,RESTful 也不是万能灵药。
如果文件比较小,你可以把整个文件流转为 Base64 后拼接在 URL 查询参数里。
如果没啥限制的话,大可不必非得往 RESTful 上靠。
P.S. 如果是我来设计,可能会把文件上传跟查询两个接口分开。比如文件上传是
[POST] /file/upload
,返回一个file_id
字段;然后查询时[GET] /documents?filter=file_content&file_id=myFileId
。RESTful 适合的是对 “资源” 的一系列操作,在操作的对象不能定义成一个资源时就说明他不合适了。
文件上传 是把“文件”当作一个对象来看,那他就应该是一个单独的实体,而不是和其他表单混在一起。
对于你这个需求来说,用户上传文件就应该设计成一个单独的接口,在上传文件后,你可以计算并返回文件的 hash ,然后用 hash 再去检索。