【问题标题】:HTTP request always add error and warning in response bodyHTTP 请求总是在响应正文中添加错误和警告
【发布时间】:2021-05-09 04:05:37
【问题描述】:

我正在开发一个可通过 rest api 访问的 java 后端。例如,有创建和更新产品的资源。根据用户的不同,产品可以具有不同的属性,我使用哈希图以动态方式处理这些属性(因此哪些产品具有哪些属性在其他地方定义)。属性可以是名称、来源、供应商、金额等。

示例:

public class Product
    int id;
    Set<ProductProperty>;

产品应通过 REST API 更新,并在正文中发送 JSON:

{productId: 1
supplier: XY
amount: 23
productCode: ZZ}

我遇到的问题是可以删除产品的特定属性。当然,所有其他属性都应相应更新。对于失败的属性,我想将错误返回给请求者。所以我的想法是返回一个 200 响应,它在响应正文中有一个 JSON 对象,例如:

{[errors: 
    {
        "productCode": "ZZ",
        "errorText": "Code lenght is less than 12 digits",
    },
    {
        "foobarProperty": "123124124",
        "errorText": "Property doest not exist for this product",
    }
]}

这样我就可以在 UI 中显示错误(稍后将通过 react 进行设置),以便用户知道哪些属性无法更新以及原因。所以我想知道这是否是一个好方法,或者是否有我还不知道的最佳实践。

如果我想得更多,可以说产品也应该被退回,是否可以将产品设置为 json,包括错误部分:

       {
            productId: 1 
            supplier: XY
            amount: 23
            productCode: YY}, // has the updated prop
       },        
       {
            [errors: 
            {
                "productCode": "ZZ",
                "errorText": "Code lenght is less than 12 digits",
            },
            {
                "foobarProperty": "123124124",
                "errorText": "Property doest not exist for this product",
            }
       ]}

【问题讨论】:

  • 如果确实是错误情况,那么您可能需要考虑返回有效负载但带有 400 Bad Request code。

标签: java rest http error-handling


【解决方案1】:

在我看来,你不应该把这两种东西混在一起。您应该保持简单,请求失败或成功。这样,与 HTTP 错误代码的映射变得更加直观。此外,您应该考虑这样一个事实,即用户可能希望一起更改所有属性,并假设可以更新一些属性并在某种“错误”消息中传递其他属性可能是危险的。

您应该考虑的另一个方面是 REST API 的可用性。如果您的客户端不是通过您的 UI 而是通过一些 CLI 工具(例如 curl)调用您的 API,该怎么办?伪装成 SUCCESS (200),当实际上它是部分成功时,可能会导致客户产生错误的印象,认为他们的请求没有问题。

【讨论】:

  • 如果我的请求失败,那只是因为它根本无法处理。例如,由于缺乏授权。我已经想过要不要把所有的字段一起处理。情况并非如此,所以我只会返回失败的字段。没有 UI 的 REST API 基本上是我的计划。用户界面仅适用于“小”更改。
猜你喜欢
  • 2019-07-17
  • 1970-01-01
  • 2021-03-01
  • 1970-01-01
  • 2018-08-19
  • 1970-01-01
  • 2017-05-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多