【问题标题】:REST api for field validation用于字段验证的 REST api
【发布时间】:2017-01-29 08:04:56
【问题描述】:

我必须创建几个 Web 服务来验证给定字段的可能值。我正在考虑有类似的东西:

POST /entity/fieldName body { fieldValues }

如果参数无效,POST 将返回 400(错误请求),否则返回 422(不可处理实体)。但是我不太喜欢 422 响应部分,因为它使请求总是返回错误。另一方面,由于我只是在做验证,而且这是一个 POST,我不想在服务器上实际创建一个新资源(即返回 200)。是否有另一个更适合此的 HTTP 方法/API 端点?对于它的价值,我将检查 <fieldName> 的实体字段是否在给定范围内具有其值。

【问题讨论】:

  • 好吧,因为端点是用于验证目的,我认为如果实体无效(而不是400 bad request) 和 200 OK 如果实体有效。
  • @BackSlash,但不使用 POST 并返回 200 是否意味着已在服务器上创建了新资源?因为这样的事情实际上不会发生。
  • 我认为“A new resource has been created”是201 Created。 200 OK 对我来说意味着“请求已处理并且一切正常”。不过我绝对不是REST专家,还是等别人的答案/cmets吧
  • @BackSlash,谢谢!你是对的,我认为 - 我突然进入了这个 stackoverflow.com/questions/1860645/…

标签: java web-services rest validation


【解决方案1】:

如果您所做的只是验证,那么我认为您应该通过验证错误发送422,并通过验证成功发送200。 POST 并不意味着您必须始终创建一个新实体。

POST 方法执行的操作可能不会导致 可以通过 URI 标识的资源。在这种情况下,无论是 200 (OK) 或 204 (No Content) 是适当的响应状态,具体取决于 关于响应是否包含描述 结果。

如果在源服务器上创建了资源,则响应 应该是 201(已创建)并包含一个描述 请求的状态并引用新资源,以及位置 标题(参见第 14.30 节)。

【讨论】:

    【解决方案2】:

    我更喜欢google's api error response style

    所以我的服务以 json 或 xml 和 400 Bad request 错误代码发送错误响应:

    {
      "status": "INVALID_REQUEST",
      "type": "ERROR_MSG",
      "data": {
        "request": "/v2/data?age=23d",
        "errors": [
          "age: not a number"
        ]
      },
      "time": -1
    }
    

    否则200 和相应的消息

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-26
      • 2017-03-12
      • 2019-06-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多