当前位置: 首页 > 知识库问答 >
问题:

多部分/表单数据和RESTful体系结构?

白子昂
2023-03-14

有几次我遇到了一个需要创建RESTful API的问题,但是需求中也指出“应该可以使用API上传文件”。。在过去的几次中,我通过简单地允许客户端将包含文件内容的多部分/表单数据发送到我的RESTful API来解决这个问题。。然而因此,这种方法让我怀疑这是否是正确的方法。RESTful指南明确指出,您应该只能对一个资源进行CRUD,但多部分/表单数据的性质是多个资源(例如,1个多文件..或1个文件和一组元数据,等等)。现在,我可以简单地将endpoint限制为在多部分/html" target="_blank">表单数据中只允许一个“内容”,然后将其与正确的url关联,但这会破坏多部分内容类型的用途。。或者我可以允许多个资源的C(R)UD操作,或者我可以将整个请求视为一个单一资源(一个包含文件、元数据等的资源。但是,对于GET,不可能获得与请求期间发送的内容相同的响应,因为据我所知,您无法获得多部分/表单数据,但您可以获得单个文件或单个JSON/XML等)有没有人以一种“简洁”的方式解决了这个问题,既与REST相结合,又不将多部分限制为一个“资源”?或者我不应该简单地使用multipart并对文件使用其他东西,这样就可以将文件上传和“text/json/xml/etc上传”分开?

共有1个答案

靳富
2023-03-14

REST是一种架构风格。

使用REST架构约束设计的主要应用程序是万维网。

在网络上,上传文件的一种常见方法是使用超文本标记语言表单,将enctype设置为Multipart/form-data,以及使用type=file的输入控件。

任何通用组件都知道应该做什么,因为所有有用的位都已标准化——表单的超媒体表示(由服务器提供)定义了客户端构造适当HTTP请求所需的所有参数。

RESTful指南明确指出,您应该只能对单个资源进行CRUD

REST受到大量语义扩散的影响。当你开始试图将不同作者的想法结合起来时,事情会变得非常混乱。

REST并不意味着CRUD-REST意味着所有资源都以相同的方式理解消息。

HTTP(同样符合REST约束)定义了许多不同的方法,供客户端在向服务器传递预期语义时使用。对于远程创作语义,GET、PUT(PATCH)、DELETE是我们向文档传递远程更改所需的全部内容,但HTTP的统一接口并不止于此——我们还有许多其他标准方法。

当然,这个列表包括POST,这并不意味着“CRUD”。实际意义更接近这些语义学,不值得标准化。

 类似资料:
  • 问题内容: 我一直在使用与杰克逊结合使用Apache CXF来消费和产生JSON文件的Web服务。 但是,服务的一种方法应该能够保存从移动应用程序上传的图像,该图像向我的Web服务发出多部分/表单数据POST请求,而且我不知道如何在我的内部处理这种内容类型上下文。我们通常创建“ Request”和“ Response”对象来使用和产生JSON,但是,在这种情况下,这恐怕不起作用。 这是请求格式:

  • 通常,我需要通过JSOUP将数据以响应multipart/form-data的形式发送到站点 作为一个示例,使用一个简单的窗体来sgeniriruet您的查询。 <表单操作=«localhost:8000»方法=«post»enctype=»多部分/表单数据» <输入类型=»文本»名称=»文本»值=»文本默认值» <输入类型=»文件»名称=»文件1» <输入类型=»文件»名称=»文件2» 提交 通

  • 我目前正在尝试解析我通过Chrome中的Postman插件发送的。然而,我得到的输出如下: 当我尝试调试时,会得到这个输出。当我尝试时,我得到一个空数组,所以我假设数据的格式不正确(只是一个字符串)。在我写我自己的算法之前,我想确定我没有用这个算法重新发明轮子。我做错什么了?或者,如果没有,是否存在一些CakePHP3函数来处理这个问题? 更新 我发现了代码中的错误,路由过程似乎以某种方式将pos

  • 问题内容: 我正在编写一个RESTful API。我在使用不同的动词上载图像时遇到麻烦。 考虑: 我有一个对象,可以通过对URL的发布/放置/删除/获取请求来创建/修改/删除/查看。如果有要上载的文件,则请求是多部分形式;如果只有文本要处理,则请求是application / xml。 为了处理与对象相关的图像上传,我正在做类似的事情: 这里的主要问题是在尝试处理放置请求时,显然$ _POST不包

  • 问题内容: 我正在尝试通过带有POST请求的照片上传 根据自述文件,我应该能够做到这一点 问题是,这不起作用。我收到测试服务器的回复,说它转储了0个post变量。 我已经确认该HTML小页面服务器处于工作状态 所以问题是,请求模块在做什么?有没有更好的方法来发送节点? 问题答案: 经过更多研究后,我决定使用。这使得分段上传非常容易。

  • 我正在尝试通过使用多部分数据主体的JMeter构建HTTP请求。 我有一个HTTP头管理器,其内容类型设置为多部分/表单数据;边界=AaB03x。我选择了“将多部分/表单数据用于POST”。 然后我创建了一个数据主体, 当我运行这个程序时,我发现请求没有正确地发送正文,而是发送了一些随机数据, 发布数据: 并给出错误响应, 我的第二个问题是:请求的第3部分发送一个要上载的文件。我可以通过某种方式传