文件上传的 REST 设计[关闭]

2024-03-31

我想为文件上传服务创建一个 REST API,允许用户:

  1. 打开一个会话
  2. 上传一堆文件
  3. 关闭会话

然后,回来处理他们在上一个会话中上传的文件。

为了方便处理有关每个文件的数据以及处理文件本身的内容,这是我正在考虑使用的 URI 方案:

/sessions/
/sessions/3
/sessions/3/files
/sessions/3/files/5
/sessions/3/file/5/content
/sessions/3/file/5/metadata

这将允许文件元数据与文件内容分开处理。在这种情况下,文件上只允许使用 GETcontent和文件metadata,并且要更新任一文件,必须放置一个新文件。

这有道理吗?如果没有,为什么以及如何才能更好?


为什么需要会议?是出于身份验证和授权的原因吗?如果是这样我会使用httpbasic http://en.wikipedia.org/wiki/Basic_access_authentication使用 SSL 或digest http://en.wikipedia.org/wiki/Digest_access_authentication。因此,没有开始或结束会话,因为 http 是无状态的,并且每个请求都会发送安全标头。

上传资源的建议是直接映射为私有文件系统


# returns all files and subdirs of root dir
GET /{userId}/files
GET /{userId}/files/file1
GET /{userId}/files/dir1
# create or update file
PUT /{userId}/files/file2



当上传文件内容时,您将使用多部分内容类型 http://www.w3.org/Protocols/rfc1341/7_2_Multipart.html.

评论后修改答案

我将通过在上传有效负载内引入链接(到文件内容)来设计您想要的文件内容和有效负载分离。它简化了资源结构。

表示“上传”资源:


{
  "upload-content" : "http://storage.org/2a34cafa" ,
  "metadata" : "{ .... }" 
}

资源行动:


# upload file resource
POST /files
-> HTTP 201 CREATED 
-> target location is shown by HTTP header 'Location: /files/2a34cafa

# /uploads as naming feels a bit more natural as /files
POST /sessions/{sessionId}/uploads
-> HTTP 201 CREATED
-> HTTP header: 'Location: /sessions/{sessionId}/uploads/1
-> also returning payload

# Updating upload (like metadata)
/PUT/sessions/{sessionId}/uploads/1 


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

文件上传的 REST 设计[关闭] 的相关文章

  • REST 中子资源和路径变量冲突?

    设计路径解析可能含糊不清的 REST API 是否被认为是不好的做法 例如 GET animals id Returns the animal with the given ID GET animals dogs Returns all a
  • 不用AJAX,前台同步拖放文件上传?

    我有一个定期的网站
  • 为什么 WADL 的使用缓慢? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Apache FileUpload API 中的 InputStream 已关闭

    这是一个非常具体的问题 我希望这里有人对 FileUpload API 有很好的了解 如果您使用过此 API 您应该知道 当超过文件的最大大小时 将无法读取下一项 因为会抛出 FileSizeLimitExceededException 并
  • 当 Spring 控制器中接受 text/csv 标头时抛出异常时出现 406

    我有一个控制器 其方法返回文本 csv 这对于正常的成功案例来说效果很好 但是如果抛出异常 并且我有一个标题Accept text csv 我收到 406 响应 例如 RequestMapping value foo method Requ
  • Laravel 中的 PATCH Ajax 请求

    是否可以向 Laravel 发出 Ajax PATCH 请求 或者我是否仅限于 POST Laravel 在输入隐藏字段中使用 PATCH 但是 我没有使用表单元素 只是在单击时 通过 Ajax 请求 应该部分更新记录的按钮 这条路线会是什
  • iPhone RESTful Web 服务

    然而 甚至不确定标题是否正确 我想做的是使用标准 NSURLConnection 类来处理调用我的 web 服务的响应 我使用 POST 方法更新数据库 使用 GET 方法从数据库检索行 我遇到的问题是这两个操作可能同时发生 因此处理请求的
  • 在应用程序中注册API

    通过 django rest framework 我正在使用DefaultRouter 我想为多个应用程序提供 API 所以我的问题是我能否以 django 方式执行此操作 并将我的路由器注册放入每个应用程序 URLconf 中 并让它们显
  • 如何向最终用户隐藏 REST API Url?

    是否可以隐藏我通过 AJAX 用于填充页面数据的 REST URL 我不希望其他人从我的 REST API 获取和使用 但需要使用它在我的网站中显示内容 如何向最终用户隐藏我的 REST API URL 无法在 JavaScript 中向最
  • 当用户在springboot中调用注册休息API时如何获取oAuth2访问令牌?

    目前我正在研究 Springboot 安全性 这对我来说相当新 我跟着youtube视频教程 当我使用以下代码片段时 我成功获取了 oauth2 access token SpringBootApplication public class
  • 如何进行 REST 式更新?

    如果我有一个对象 请说Employee 我想提供两种不同的更新方式 更新绩效评级或更新联系信息 构建 API 的 REST 式方式是什么 我认为正确的方法是 POST 我担心的是 对于用户来说 首先获取对象的两个部分 绩效评级和联系信息 仅
  • 从 Office 365 日历获取所有事件

    我需要获取 Office 365 日历中的所有事件 当前 GET 请求 https graph microsoft com v1 0 users https graph microsoft com v1 0 users userPrinci
  • 是否应该在 REST API PUT 请求中传递资源及其相关资源的所有字段?

    假设我有一个票证和评论资源 门票可以有很多评论 在您的更新端点中HTTP PUT api tickets
  • 在 C# 控制台应用程序中使用 HttpClient 使用 WEB API

    我使用 MySQL 数据库在 Visual Studio 2015 中创建了一个 Web API API 运行完美 所以我决定做一个控制台client http www c sharpcorner com article web api w
  • 来自复杂对象的 spring RestTemplate POST 参数

    我正在尝试使用 postForObject 方法使用restTemplate 来测试我们的REST 服务 单元测试 Test public void testPostOrder String url BASE URL orders Orde
  • 如何在 Codeigniter 中我自己的控制器中生成 API 密钥

    只是想提一下 我确实是 API 开发 概念 结构 最佳实践 方面的新手 我对它一点也不熟悉 所以如果您发现我正在使用 Phil 请原谅我可悲的愚蠢问题Sturgeon 的 REST API 服务器 Curl 库和 REST API 客户端这
  • 为什么“FormDataMultiPart”类型参数被区别对待

    我正在编写一个小网络应用程序 将文件上传到网络服务器 我一切正常 但令我感到困惑的是 几乎所有从客户端 浏览器 发送的参数都必须在服务器端注入单词 FormDataParam except FormDataMultiPart类型参数 有人可
  • 如何更新 Sencha Touch 中的嵌套列表/树存储?

    我有一个嵌套列表 必须根据用户在 Ext Carousel 中选择的内容填充新数据 TreeStore load newData this does not work TreeStore removeAll this works 似乎文档和
  • SIM800C GSM AT 命令如何以编程方式上传 .amr 音频文件

    我拼命尝试将一些音频文件上传到SIM800C的内部存储器 到目前为止 这是我能够做到的 但上传的文件似乎无效 并且不播放任何声音 但与AT FSLS C 我可以看到该文件就在那里 以下是我使用的 AT 命令 AT FSCREATE tts2
  • 如何将 .xlsx 文件上传到 jenkins 作业

    如何将 xlsx 文件作为构建参数上传到 jenkins 作业 我尝试使用文件参数 但我发现该文件正在丢失其扩展名或原始格式 有什么方法可以从 jenkins UI 将 excel 文件上传到 jenkins 作业吗 In the file

随机推荐