我们正在使用REST API开发服务器,它接受和响应JSON。问题是,如果您需要将图像从客户端上传到服务器。
注意:我也在谈论一个用例,其中实体(用户)可以有多个文件(carPhoto, licensePhoto),也有其他属性(名称,电子邮件……),但当你创建新用户时,你不发送这些图像,它们是在注册过程之后添加的。
我知道这些解决方案,但每一个都有一些缺陷
1. 使用multipart/form-data代替JSON
好: POST和PUT请求是尽可能rest的,它们可以包含文本输入和文件。
缺点:它不再是JSON,与multipart/form-data相比,它更容易测试,调试等
2. 允许更新单独的文件
创建新用户的POST请求不允许添加图像(这在我们的用例中是可以的,我在开始时说过),上传图片是通过PUT请求作为multipart/form-data来完成的,例如/users/4/carPhoto
好:一切(除了文件上传本身)都保留在JSON中,很容易测试和调试(你可以记录完整的JSON请求,而不用担心它们的长度)
缺点:这不是直观的,你不能POST或PUT实体的所有变量一次,而且这个地址/users/4/carPhoto
可以被认为是一个集合(REST API的标准用例看起来像这个/users/4/shipments
)。通常你不能(也不想)GET/PUT实体的每个变量,例如users/4/name。您可以在用户/4处使用get获取名称并使用PUT更改名称。如果在id后面有东西,它通常是另一个集合,比如users/4/reviews
3.使用Base64
将其作为JSON发送,但使用Base64编码文件。
好:与第一个解决方案相同,它是尽可能RESTful的服务。
缺点:再一次,测试和调试是非常糟糕的(身体可以有兆字节的数据),有增加的大小和处理时间-客户端和服务器
我很想用解不。但它也有它的缺点……谁能给我一个更好的“什么是最好的”解决方案?
我的目标是使基于rest的服务包含尽可能多的标准,同时我希望使它尽可能简单。