forms - 我应该设计我的 API 来接收 JSON 作为一个层次结构的孩子吗?
问题描述
我正在设计一个从前端接收表单发布请求的 API。前端表单包含常规表单字段和文件上传字段。让我们从 show 中说一个微不足道的前端的行为如下
<form>
<input type="file" name="image">
<input type="text" name="field_1">
<input type="text" name="field_2">
</form>
将导致以下发布请求:
Content-Disposition: form-data; name="image"
Content-Type: application/octet-stream
===CONTENT OF THE IMAGE===
Content-Disposition: form-data; name="field_1"
value of field 1
Content-Disposition: form-data; name="field_2"
value of field 2
但是另一位后端开发人员坚持我们应该将除图像之外的所有字段包装到一个json
对象中,以便请求看起来像
Content-Disposition: form-data; name="image"
Content-Type: application/octet-stream
===CONTENT OF THE IMAGE===
Content-Disposition: form-data; name="body"
{
"field_1": "value of field 1",
"field_2": "value of field 2"
}
我们的后端技术是 Spring/Boot,因此后一种设计将大大简化我们的控制器签名,例如
public EmptyResponse acceptFormInput(
@RequestPart EmptyResponse body,
@RequestPart("file") MultipartFile file
)
在我看来,Controller 应该直接反映我们的 API 的样子。并且控制器签名应该反映 API 声明。但那位开发人员认为嵌套 API 设计也是 W3C 标准的一部分(虽然在草案中),因此应该是可行的。(W3C 计划)
我无法弄清楚设计此类 API 的常见做法是什么。任何建议表示赞赏。
解决方案
推荐阅读
- android - 位图绘制:java.lang.RuntimeException:Canvas:试图绘制太大的位图
- r - R在保留格式的同时从控制台复制到单词
- ios - 无法同时满足 Swift 中的约束运行时错误
- java - ~/Library/Android/sdk/ndk-bundle 的 NDK 在 Flutter 中没有 source.properties 文件
- wordpress - 如何更改 WordPress 多站点上丢失的电子邮件消息?
- android - 如何在 Jetpack Compose 中实现 list multiSelect?
- azure-devops - MSBuild中使用RoboCopy复制文件的问题
- extreact - 为什么使用 ExtReact 在函数中查询不更新值但获取初始值
- qt - QdialogbuttonBox 标题翻译不起作用
- python - 在熊猫中将时间转换为UTC