将 multipart/form-data 内容类型用于 RESTful POST api 是一个好的实践吗?

2023-12-30

我遇到一种情况,我必须编写一个 api 来创建资源,并且在我需要接受的数据字段中是一个基本上是 html 文件内容的字符串。正如我所见,我可以选择将整个事物构造为 json 对象(其中该字段是带有 urlencoded html string 的字符串字段),以及将内容类型设置为 multipart/form-data 其中每个字段和 html 字符串( UTF-8 编码)是消息的一部分。
不使用 json 是我不舒服的事情,因为我觉得不构建我要创建的实体的内容违反了 REST 标准,因此消费者会丢失信息,因为他们无法立即查看我的内容关于向其提供哪些数据的 api 定义。但实际上 multipart/form-data 可以更好、更高效地处理 html 文件内容等内容,因为我不必对其进行 urlencode,并且还可以控制 char 编码。
在当前环境下并坚持 RESTful 原则的更好方法是什么?还有其他我应该注意的权衡吗?解析一个嵌入了巨大字符串字段(~ 200 Kb)的 json 怎么样?
EDIT:- 我正在阅读一些关于 SO 的类似问题,一种突出的方法是两步方法,即使用元数据进行第一次调用来创建实体,然后将文件作为更新过程上传到创建的实体,其中我们使用多部分/表单数据。在这种情况下,我想,我要问的是,我在单个 api 调用中将元数据和文件作为多部分数据发送的方法是如何合理的,其中每个元数据字段实际上是多部分消息中的一部分,就像文件一样。


将文件上传到 REST API 的规范方法是使用 multipart/form-data。正如W3推荐指南所说:

提交时应使用内容类型“multipart/form-data” 包含文件、非 ASCII 数据和二进制数据的表单。

Multipart/form-data 在表示二进制数据方面比 Base64 具有优势。坚持REST/Http理念,简化API客户端的开发。

从表单返回值:multipart/form-data https://www.ietf.org/rfc/rfc2388.txt

W3推荐指南 http://www.w3.org/TR/html401/interact/forms.html#h-17.13.4.2

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

将 multipart/form-data 内容类型用于 RESTful POST api 是一个好的实践吗? 的相关文章

  • 如何根据域名更改视图格式

    我想知道是否有任何方法可以根据域名更改相同 Rails 应用程序的视图格式 例如 www domain com gt respond to format html api domain com gt respond to format xm
  • JSON 解析错误:需要“STRING”

    我在用JSONLint http jsonlint com 解析一些 JSON 我不断收到错误 错误 第 1 行解析错误 产品 需要 STRING 却得到 未定义 这是代码 product code Abc123 description S
  • 使用 PHP PayPal REST API 退款?

    我正在开发一个集成到 PayPal 的 REST API 中的 PHP 应用程序 我正确处理了事务并将事务 ID 保存到 MySQL 数据库中 我现在正在尝试退款 但无法让它停止给出 传入 JSON 请求未映射到 API 请求 错误 有人对
  • 通过标识引用对象的标准方法(例如循环引用)?

    JSON 中是否有通过身份引用对象的标准方法 例如 具有大量 可能是循环 引用的图形和其他数据结构可以被合理地序列化 加载吗 Edit 我知道做一次性解决方案很容易 列出图中所有节点的列表 然后 我想知道是否有一个标准的 通用的解决方案来解
  • 扩展(十进制,例如 400.1、401.4 等)HTTP 状态代码从何而来?

    我越来越多地看到十进制样式 HTTP 状态代码的激增 而且我似乎找不到任何 RFC 或其他 IETF 建议 甚至 W3C 草案或除 Microsoft IIS 文档之外的其他内容 请参阅https support microsoft com
  • JSON 到 hashmap (杰克逊)

    我想将 JSON 转换为 HashMapJackson http jackson codehaus org 这是我的 JSON String json Opleidingen name Bijz trajecten zorg en welz
  • 从 Twitter API 2.0 获取 user.fields 时出现问题

    我想从 Twitter API 2 0 端点加载推文 并尝试获取标准字段 作者 文本 和一些扩展字段 尤其是 用户 字段 端点和参数的定义工作没有错误 在生成的 json 中 我只找到标准字段 但没有找到所需的 user fields 用户
  • PrototypeJS 版本 1.6.0.2 覆盖 JSON.parse 和 JSON.stringify 并破坏 socket.io 功能

    基本上 socket io 使用 nativeJSON 来编码和解码数据包 而我的问题是我必须使用这个版本的原型来改变 JSON 行为 当我应该进入服务器时 如下所示 socket on event function a b c 我明白了s
  • 使用 Javascript/JQuery 的 JSON 对象的差异

    我在 Javascript 中有两个 JSON 对象 除了数值之外 它们都是相同的 它看起来像这样 var data eth0 Tx 4136675 Rx 13232319 eth1 Tx 4 Rx 0 lo Tx 471290 Rx 47
  • 写入 JSON 会产生 TypeError: dump() 需要至少 2 个参数(给定 1 个)

    我正在尝试加载 json 文件 更新它并写回来 这是我的尝试 但出现错误 类型错误 dump 至少需要 2 个参数 给定 1 个 with open employees json as data file employees json lo
  • 我可以从 HTTP 请求中找到无线接入点的 BSSID(MAC 地址)吗?

    假设有人在咖啡店里无线连接到互联网 并向 johnsveryownserver com 发送 HTTP 请求 服务器端 有什么方法可以确定我的MAC地址吗 无线接入点他们连接到什么 请注意 我对他们机器的 MAC 地址不感兴趣 如果我无法使
  • 用数组反向查找对象

    假设我有一个这样的对象 resourceMap a 0 1 2 3 4 5 6 7 8 9 10 b 11 12 c 21 23 d 54 55 56 57 510 确定是否的最佳方法是什么resourceId 21将会 c 我们不知道钥匙
  • 使用 Swift(使用 SwiftJWT)和 REST API 连接到 Apple Store Connect - 失败并出现 401

    我正在尝试通过他们的 REST API 连接到 Apple Store Connect 虽然这在几天前有效 但我无法弄清楚为什么它停止工作 现在我无法通过身份验证 即我发出的服务器响应的每个请求都是 401 我是否遗漏了什么 我做什么 生成
  • 纯文本形式的 Google+ 关注者

    如何以纯文本形式获取 google plus 关注者 JSON 或 XMLhttps developers google com api latest people get https developers google com api l
  • Zoopla 沙箱出现 cURL http 标头错误

    我正在为房地产经纪人开发代码 以通过他们的数据源将房产上传到 Zoopla 我在将所需的配置文件添加到所需的 http 标头时遇到问题 文档中唯一的示例是来自 Linux 的测试 echo branch reference test cur
  • PowerShell JSON 添加值格式

    我正在向 json 文件添加数据 我这样做是通过 blockcvalue connectionString server localdb mssqllocaldb Integrated Security true Database data
  • Ajax调用完成后执行函数

    我是 Ajax 新手 我尝试在使用 for 循环时使用 Ajax Ajax 调用之后 我正在运行一个使用 Ajax 调用中创建的变量的函数 该函数只执行两次 我认为 Ajax 调用可能没有足够的时间在循环开始之前进行调用 有没有办法在运行
  • 尝试在后台使用 AsyncTask 解析 JSON 时强制关闭

    我是 Android 开发新手 正在研究 json 数据 我设法让解析工作 我想显示一个 ProgressDialog 我读到我需要使用 AsyncTask 但由于某种原因 一旦我将相同的工作代码放入 doInBackground 中 即使
  • 使用来自Processing-JS的JSON

    我想使用编写一个应用程序处理 JS http processingjs org 并且我希望能够使用服务器端数据加载它 我还没有编写服务器端 所以我可以使用任何东西 但似乎明显的 AJAX 事情是使用 JSON 将数据上传到页面中 如何从我的
  • 加载腌制字典对象或加载 JSON 文件哪个更快? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 什么更快 A Unpickling 加载 一个 pickled 字典对象 使用pickle load or B 使用以下命令将 JSON

随机推荐

  • 是否可以从主机程序执行单个 lua 语句?

    我正在尝试将基于 lua 的脚本系统嵌入到我的游戏引擎中 我希望脚本能够同时具有阻塞和非阻塞命令 例如 character walkTo 24 359 Blocks until character arrives c 35 Non bloc
  • GCC:为什么无法在 -std=c11 -Wall 下编译干净的 printf("%f\n", f16) ?

    示例代码 include
  • Eclipse Android 应用程序:使用真实证书签名运行

    有没有一种方法可以让运行按钮使用真正的签名证书而不是调试证书 我想避免在安装开发副本之前从模拟器中卸载 共享用户 应用程序 我已经知道我可以导出签名副本 但我更喜欢自动构建签名副本 在模拟器上运行 我假设您正在使用 Eclipse 首先 通
  • 通过powershell获取IIS日志位置?

    我正在编写一个脚本 希望能够在 IIS 服务器之间轻松移动以分析日志 但这些服务器将日志存储在不同的位置 一些在 C 一些在 D 一些在 W3SVC1 中 一些在 W3SVC3 中 我希望能够让 powershell 自行查找此信息 而不必
  • 从整数序列生成表达式文字列表

    我想将整数序列映射到表达式文字序列 以便将后者用作图中的刻度线标签 例如 lbls lt lapply 2 2 function i expression i pi plot axis 1 at seq 2 2 pi labels lbls
  • Apache Spark 中的驱动程序何时不会运行某个操作?

    我刚刚开始使用 Spark 并且在任务的概念上遇到了困难 任何人都可以帮助我理解何时某个操作 例如减少 不在驱动程序中运行 从火花教程中 使用函数 func 聚合数据集的元素 其中 接受两个参数并返回一个 该函数应该是 具有交换性和结合性
  • 使用 SqlCe 和 EntityFramework 进行插入和更新的语法

    VS 2008 SqlCe 3 5 我正在尝试学习 EntityFramework 但无法让基本的插入和更新工作 当我包含 SqlCe 数据库 sdf 时 向导会创建 Test edmx designer vb 文件 由此我创建了我的数据上
  • jquery.tokeninput 必需

    我有这个很棒的小插件正在运行 但我需要要求至少选择一个名称 我通常使用jquery validate 但是 验证插件似乎不适用于使用 tokeninput 的字段 有人有答案吗 一如既往 非常感谢您的帮助 NewMessage valida
  • 处理 std::thread::hardware_concurrency()

    In my question https stackoverflow com questions 27887654 synchronise push back and stdthread about std thread 我被建议使用std
  • lucene 4.0 快照中缺少的功能

    我正在尝试使用 lucene 4 0 快照版本 但是此版本中缺少 StandardAnalyzer 有人知道如何替换它吗 在给出的示例代码中Lucene总结 http search lucene com jd lucene org apac
  • C# 低级鼠标钩子和表单事件处理

    我正在使用 VS 2010 生成的简单表单 其中包含 2 个按钮 开始和停止 Start 使用 SetWindowsHookEx 触发 WH MOUSE LL stop 停止钩子 挂钩工作正常 我设法用双击 替换 鼠标中键单击 我遇到的唯一
  • 反应悬念/懒惰延迟?

    我正在尝试使用新的 React Lazy 和 Suspense 来创建后备加载组件 这效果很好 但回退只显示几毫秒 有没有办法添加额外的延迟或最短时间 以便我可以在渲染下一个组件之前显示此组件的动画 现在懒惰导入 const Home la
  • Symfony 1.4:使用 SetAttribute 在会话中存储数组

    我想知道是否有人知道如何将数组存储到用户会话中 这是存储单个属性的方法 this gt getUser gt setAttribute something something 文档说 用户属性可以存储任何类型的数据 字符串 数组和关联数组
  • MVC 4 bool 的自定义模板(剃刀)

    我正在使用 twitter bootstrap 框架 因此为了让 EditorFor 和 DisplayFor 方法输出我需要的内容 我为字符串 文本 密码等每种类型创建了自定义模板 对于我的登录页面 我想要一个 RememberMe bo
  • C# - 比较两个 SecureString 是否相等

    我有一个带有两个密码框的 WPF 应用程序 一个用于密码 另一个用于第二次输入密码以进行确认 我本来想用PasswordBox SecurePassword得到SecureString的密码 但我需要能够比较两个密码框的内容 以确保在接受密
  • CSS如何设置div高度100%减去nPx [重复]

    这个问题在这里已经有答案了 我有一个包装 div 其中包含 2 个彼此相邻的 div 在这个容器上方 我有一个包含我的标题的 div 包装器 div 必须是 100 减去标头的高度 标题大约为 60 像素 这是固定的 所以我的问题是 如何将
  • 如何在Python中从字符串中提取表情符号和标志?

    import emoji def emoji lis string entities for pos c in enumerate string if c in emoji UNICODE EMOJI print Matched c c e
  • ASP.NET MVC - 将参数传递给控制器

    我有一个控制器 其操作方法如下 public class InventoryController Controller public ActionResult ViewStockNext int firstItem Do some stuf
  • Jekyll,在 html 中包含带有布局的 markdown

    我有一个由几张 幻灯片 组成的网站 每个都有固定的结构 供某些脚本使用 但内容可变 我将其托管在 github 上 现在尝试使用 Jekyll 来更轻松地添加新幻灯片 我已经将每张幻灯片放在不同的 html 文件中 并将其包含在主页中 in
  • 将 multipart/form-data 内容类型用于 RESTful POST api 是一个好的实践吗?

    我遇到一种情况 我必须编写一个 api 来创建资源 并且在我需要接受的数据字段中是一个基本上是 html 文件内容的字符串 正如我所见 我可以选择将整个事物构造为 json 对象 其中该字段是带有 urlencoded html strin