当前位置: 首页 > 知识库问答 >
问题:

REST API是否应该在响应体中返回异常?

公冶同
2023-03-14

这方面的最佳实践是什么。NET与Web API?特别是WebRESTAPI。当异常发生时,RESTAPI是否应该在响应体中返回异常

当然,我会返回500或类似的HTTP状态。但是当我用这个错误代码响应时,最佳实践是什么?或者更好的是,规范或RESTAPI对此有何规定?

  • 返回异常(我所做的)

共有3个答案

司寇琨
2023-03-14

无论如何是的,您应该在响应的主体中包含异常的表示。异常将是错误的最佳解释,它将是帮助用户纠正错误的最有帮助的。我建议所有错误的响应代码为400,但是400范围内的任何数字都是可以接受的。

我做了一些研究,发现最常见的/标准使用这种形式的JSON结构:

{
   "error": {
      "code": "400",
      "message": "main error message here",
      "target": "approx what the error came from",
      "details": [
         {
            "code": "23-098a",
            "message": "Disk drive has frozen up again.  It needs to be replaced",
            "target": "not sure what the target is"
         }
      ],
      "innererror": {
         "trace": [ ... ],
         "context": [ ... ]
      }
   }
}

其中很多都是可选的,但如果您需要它们,它们是可以选择的。关于这个结构,重要的一点是错误是在成员“error”下的对象中描述的。

这是OASIS数据标准OASIS OData提出的格式,似乎是最标准的选择,但是在这一点上似乎没有任何标准的高采用率。

细节在我关于JSON REST API错误处理的博客文章中讨论过

沈淇
2023-03-14

我有这个建议。

>

  • 该错误需要由应用程序(API)中的某些过滤器处理。这个过滤器将获得意外的错误,在超文本传输协议状态代码等于500的JSON中转换错误。
  • 返回的错误需要具有相同的JSON格式,如下所示:

    {
        code: 12321312,
        message: "A fatal error occurred",
        details: "An unexpected information was passed as parameter to the API."
    }
    

    错误格式需要提供信息。当您在过滤器中获得错误时,您可以使用生成的代码(错误代码,如UUID)将错误保存在数据库中,并在JSON中返回code。为了有一个好的API,使用错误代码将是一个很好的特性,并将帮助您识别问题。

  • 谈渊
    2023-03-14

    返回异常(我所做的)-

    返回空的反应体?-

    返回一个空的默认JSON对象?-

    别的东西?-

     类似资料:
    • 问题内容: 我做了异步。现在我可以使用了。 这是示例代码: 所以这里的问题是回报承诺,因为我可以使用它吗? 编辑 当我等待时,它将按顺序运行;当我删除等待时,它将运行? 问题答案: 通常不与promises一起使用,因为很少有这种需求。如果在状态更新()之后调用的方法依赖于更新的状态(),则它可以通过其他方式(例如,作为参数)访问它。 使用回调并且不返回承诺。由于很少需要这样做,因此创建未使用的承

    • 我目前正在一个后端有Spring,前端有Angularjs的网站上工作,我们已经讨论了后端响应以处理前端的消息对话框,我有一个问题要问: 假设我有一个API: 若客户机发出一个带有无效参数(如字符串)的请求,那个么应该从服务器返回哪个响应代码?HTTP 400错误的请求和响应正文包含消息“fromTime和toTime应采用时间戳格式”,还是HTTP 200包含相同的消息? 我看到了一些Googl

    • 使用Guzzle,我正在使用JSON格式的一些外部API,通常我获取数据 $data = $request- 但是我无法从这个不同的api中获取数据。数据似乎没有出现在“响应体”中。 这个api调用有效:https://i.ibb.co/80Yk6dx/Screenshot-2.png 这不起作用:https://i.ibb.co/C239ghy/Screenshot-3.png

    • 我正在尝试调用FlickR API,但由于response.body()返回null而遇到困难。 我不确定它是否与我的JSON/POJO映射相关,但我无法弄清楚当我调用Flickr时如何访问来自改版的响应。我知道我的调用已经成功完成,因为我实际上能够通过日志拦截器查看JSON。 型号: 活动 }

    • 我使用的是Spring版本4(Spring data),我想将Object作为JSON返回,我想知道以下代码即使不使用xmlRootElement注释用户类也能工作: 任何机构都可以解释吗?当我需要注释要返回为JSON的对象类时,响应体/响应实体是否自己完成工作?

    • 问题内容: 就像一个人在这里问到但他的解决方案是调用其他函数 …我想知道是否有可能拥有一个不调用a的函数第二个功能基于异步请求的响应,但仅当异步请求响应时。 可能是这样的: 不调用另一个函数,这有可能吗? 我要实现的目标是拥有一个可以用一些参数调用的函数,该函数将返回异步Web服务(如FB)的响应。 问题答案: 简而言之,没有。您不能让异步函数同步返回有意义的值,因为该值当时不存在(因为它是在后台