如果请求的字段不存在,则正确的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},…]
- 不返回任何结果,但返回错误
- 做点别的吗
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