如果请求的字段不存在,则正确的REST响应

如果请求的字段不存在,则正确的REST响应,rest,error-handling,Rest,Error Handling,如果未设置字段,我将返回所有可能的汽车字段。如果为字段指定了一个数组,则只返回这些字段。例如,以下查询: curl -X GET 'http://example.com/api/cars?fields=name&fields=color&fields=cost' 应返回所有汽车的列表[{“名称”:“福特”,“颜色”:“蓝色”,“成本”:10000},…] 现在,另一个要求,但这一次还包括汽车的马力 curl -X GET 'http://example.com/api/cars

如果未设置
字段
,我将返回所有可能的汽车字段。如果为
字段
指定了一个数组,则只返回这些字段。例如,以下查询:

curl -X GET 'http://example.com/api/cars?fields=name&fields=color&fields=cost'
应返回所有汽车的列表
[{“名称”:“福特”,“颜色”:“蓝色”,“成本”:10000},…]

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

curl -X GET 'http://example.com/api/cars?fields=name&fields=color&fields=cost&fields=hp'
但是应用程序不支持马力。我应该:

  • 只返回可能返回的内容?ie
    [{“名称”:“福特”,“颜色”:“蓝色”,“成本”:10000},…]
  • 返回所有请求的字段,但对于不支持的字段,包括
    null
    ,例如
    [{“名称”:“福特”,“颜色”:“蓝色”,“成本”:10000,“惠普”:null},…]
  • 不返回任何结果,但返回错误
  • 做点别的吗

我会返回一个HTTP错误代码
400错误请求
以及一个错误JSON对象,比如
{“error”:“Unknown field:'horsepower'”}
,因为您不知道客户端想要做什么。可能他们正在请求一个不存在的字段,或者可能他们在其中一个字段中犯了拼写错误


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

处理上述情况没有严格的指导原则。这完全取决于你的要求。 A) 如果需要严格检查参数,则可以发送400个错误请求

B) 如果您不想严格检查参数,则返回不带hp字段的字段,这在大多数情况下都会发生

C) 您不应该发送带有空字段的内容,因为用户可以发送任何垃圾,这将增加您的处理时间

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
此时可用

因此:

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

您的源服务器碰巧获取了提供的URI并将其映射到处理程序,这一事实与此无关

请注意,您不需要让客户蒙在鼓里

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


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

谢谢。谢谢。我来回奔波,感谢你给我一个简单的答案,并解释原因。谢谢你的非理性之声。让我仔细考虑一下。事后看来,我认为(但不确定)我应该将
?fields=name&fields=color&fields=cost&fields=hp
更改为
?fields[]=name&fields[]=color&fields[]=cost&fields[]=hp