2016-09-21 70 views
2

我必须创建几个Web服务来验证给定字段的可能值。我考虑有这样的:用于现场验证的REST API

POST /entity/fieldName body { fieldValues } 

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

+0

嗯,终点是*验证目的*在我看来,它应该返回** 422不可处理的实体**如果实体无效(而不是** 400错误请求**)并且** 200 OK **如果实体有效。 – BackSlash

+0

@BackSlash,但不使用POST并返回200意味着服务器上已创建新资源?因为没有这样的事情会发生。 – asenovm

+3

我认为“已创建新资源”是** 201 Created **。 200 OK表示“请求已处理,一切正常”给我。但我绝对不是REST专家,所以让我们等待别人的回答/评论 – BackSlash

回答

1

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

POST方法执行的操作可能不会导致可由URI标识的 资源。在这种情况下,根据 确定响应是否包含描述结果的实体,200 (OK)或204(无内容)是适当的响应状态。

如果资源已经在源服务器上创建的,则响应 应该是201(创建)和包含其描述请求的 状态,指的是新的资源的实体,和一个位置 报头(见第14.30节)。

1

我喜欢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和相应的消息