如果请求的字段不存在,则进行适当的REST响应

时间:2016-09-30 13:22:03

标签: rest error-handling

如果未设置fields,我会返回所有可能的车辆字段。如果为fields提供了一个数组,我只返回那些字段。例如,以下查询:

curl -X GET 'http://example.com/api/cars?fields=name&fields=color&fields=cost'

应返回所有车辆[{"name":"Ford", "color":"blue", "cost":10000},...]的列表。

现在,另一个请求,但这次还包括汽车马力。

curl -X GET 'http://example.com/api/cars?fields=name&fields=color&fields=cost&fields=hp'

但是应用程序不支持马力。我应该:

  • 只返回可能的内容?即[{"name":"Ford", "color":"blue", "cost":10000},...]
  • 返回所有请求的字段,但包含null表示不受支持的字段,即[{"name":"Ford", "color":"blue", "cost":10000, "hp":null},...]
  • 不返回任何结果,但会返回错误吗?
  • 做点什么吗?

3 个答案:

答案 0 :(得分:1)

我将返回HTTP错误代码400 Bad request以及错误JSON对象,例如{"error":"Unknown field: 'horsepower'"},因为您实际上并不知道客户端想要做什么。也许他们要求一个不存在的领域,或者他们在其中一个领域犯了拼写错误。

如果您默默地忽略该错误,客户端将很难检测到它。最好只返回错误并让客户处理它。

答案 1 :(得分:0)

处理上述案件没有严格的指导原则。这一切都取决于您的要求。 A)如果您想严格检查参数,那么您可以发送 400 Bad Request

B)如果你不想严格检查参数,那么在没有hp字段的情况下返回,这在大多数情况下会发生。

C)你不应该把丢失的字段作为NULL发送,因为用户可以发送任何垃圾,这会增加你的处理时间。

答案 2 :(得分:0)

http://example.com/api/cars?fields=name&fields=color&fields=cost&fields=hp

识别资源......

  

但应用程序不支持马力。

也就是说,目前没有http://example.com/api/cars?fields=name&fields=color&fields=cost&fields=hp的可用表示。

Ergo:404 Not Found

  

404(未找到)状态代码表示源服务器未找到目标资源的当前表示,或者不愿意透露该目标资源是否存在。

您的原始服务器碰巧采用提供的URI并将其映射到处理程序这一事实与其密切相关。

请注意,您无需让客户端处于黑暗状态

  

状态代码的4xx(客户端错误)类表示客户端似乎有错误。除了在响应HEAD请求时,服务器应该发送一个表示,其中包含错误情况的解释,以及它是暂时的还是永久的。

在这种情况下,该表示可以解释hp不受支持,如果您想让客户有机会对其进行投票,则提供相关跟踪问题的链接,等等。