首页 > 解决方案 > 我应该设计我的 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 的常见做法是什么。任何建议表示赞赏。

标签: formsapibackend

解决方案


推荐阅读