我正在尝试确定应该使用PUT还是POST通过ASP.NET WebAPI上传文件?
我阅读了PUT vs. POST for files upload RESTful api to be built using Zend Framework给出的答案,这有点促进了POST进行文件上传,但我认为这两者都是合法的。
基本上,我有一个API,允许最终用户通过以下接口将由多张幻灯片组成的演示文稿从一个角度应用程序发送到一个使用ASP.NET WebAPI设计的后端服务:
POST: api/v1/presentations
PUT : api/v1/presentations/{presentationId}
GET : api/v1/presentations/{presentationId}
虽然这很好用,但我现在需要使用户能够将文件附加到演示文稿中:每张幻灯片最多1个文档,整个演示文稿2个视频(1个演示文稿,1个背景)。
这些文件将托管在第三方服务上,我基本上只会得到一个id,然后获取代表该文件的字节数组(从前端来看,我们实际上并不想看到由a给出的ID第三方服务,因此我们希望坚持使用幻灯片ID /演示文稿ID来获取文件)。
从前端的角度来看,这些文件是演示文稿的一部分,但对于后端我不太确定。
基本上,我可以提出以下API设计:
文档(每张幻灯片最多一张)
POST: api/v1/presentations/{presentationId}/slides/{slideId}/document
GET : api/v1/presentations/{presentationId}/slides/{slideId}/document
视频(每个演示文稿最多两个)
旨在代替图像背景的背景视频:
POST: api/v1/presentations/{presentationId}/background-video
GET : api/v1/presentations/{presentationId}/background-video
演示视频(带有视频播放器):
POST: api/v1/presentations/{presentationId}/presentation-video
GET : api/v1/presentations/{presentationId}/presentation-video
请注意:目前不应该删除第3方服务上的视频({ting GET
时只需更新新版本并获取最新版本)即可。
不是超级RESTful的,另一个解决方案是使用(这次仅考虑PUT
而不考虑POST
):
文档
PUT : api/v1/documents/{slideId}
GET : api/v1/documents/{slideId}
视频
背景视频:
PUT : api/v1/presentation-videos/{presentationId}
GET : api/v1/presentation-videos/{presentationId}
演示视频:
PUT : api/v1/background-videos/{presentationId}
GET : api/v1/background-videos/{presentationId}
但是我不确定这实际上是否更好(从REST的角度来看)。
实际上哪个更好?