正确上传不正确的 CSV 文件的 HTTP REST API 状态代码

Posted

技术标签:

【中文标题】正确上传不正确的 CSV 文件的 HTTP REST API 状态代码【英文标题】:Correct HTTP REST API status code for incorrect CSV file upload 【发布时间】:2021-06-14 07:05:57 【问题描述】:

我目前正在使用 REST API 端点通过 csv 文件上传批量创建实体。

POST /entity/csv
Content-Type: multipart/form-data

使用表单数据

key value
file binary

当后台无法解析csv文件时,当前返回400状态码,但客户端发送的请求实际上是正确的。

在我看来,这不是要走的路,它应该返回 200,并提供有关解析问题的其他信息。目前,解析错误在 400 响应正文上。

解析失败时,400状态码有什么情况吗?例如。 “必填字段为空 - 第 43 行”

对此有何共识?

我作为前端开发人员问这个问题,因为我正在编写前端逻辑,用于在 catch 块内向用户显示解析错误,这对我来说似乎很奇怪。

【问题讨论】:

【参考方案1】:

对此有何共识?

状态码是“通过网络域传输文档”的元数据。

如果您正在处理类似...的请求

POST /entity/csv HTTP/?.?
Content-Type: text/csv

a,b,c....

那么您要遵循的准则可能就是RFC 4918中的准则

如果正文实际上不是 CSV 文档,则使用 400 Bad Request 如果正文是错误 CSV 文档,则使用 422 Unprocessable Entity。

在实践中,虽然 400、422、403 等...之间存在语义差异,但尚不清楚通用客户端可以对这些差异做任何事情。

对于任一代码,响应的主体都是“包含错误解释的表示”。正是在这个地方,您可以记录解析器遇到的问题。


它想要成为 4xx 而不是 2xx 的原因是缓存和cache-invalidation。

【讨论】:

您好,我必须澄清一下:内容类型是多部分/表单数据。请求正文为 file: 。我编辑了原始问题

以上是关于正确上传不正确的 CSV 文件的 HTTP REST API 状态代码的主要内容,如果未能解决你的问题,请参考以下文章

登录csv文件的正确方法是啥?

需要保存为CSV格式上传身份号,从Excel复制文本过去,CSV里后几位都是000,怎么办?必须要保存为CSV上传

phpMyAdmin CSV 上传替换数据不起作用

Pandas DataFrame 在 Jupyter Notebook 中无法正确显示

XML to csv 做正确的 xslt

转换为 csv 文件后读取数据帧会在 Scala 中呈现不正确的数据帧