一个端点的响应具有一组不同的字段是否正确?
例如:
有一个端点/orders
,它返回有关订单的信息(假设-42个字段),并且该信息显示在用户的帐户网页上。
在某个时候,我们还有另一个网页需要(出于自身目的)有关用户尚未付款的订单的信息。该请求将是这样的-/orders?unpaid=True
在这种情况下,网页仅需要4个字段而不是42个字段。我应该只在响应中放入这四个字段,还是为任何目的保留一种响应格式会更好?
答案 0 :(得分:1)
在大多数情况下,基于GET请求参数做出决定不是一个好主意。无需费力即可操纵GET参数。 话虽如此,有时我会使用GET参数来决定用户看到的内容,也就是我已经知道该特定事件的结果是什么。 例如,如果用户在登录时提供了无效的凭据,则我的后端已经知道该凭据无效。但可以说,我没有其他方法可以将错误消息传递给前端供用户显示。然后,我会做类似的事情:
https://example.com/login.php?failed_message=Failed!No user found!
我们在这里不做任何决定。我们只知道,如果login.php
是使用GET参数调用的,则登录必须失败。因此,我们从后端重定向到该URL。
答案 1 :(得分:1)
目前尚无明确的准则来处理像您这样的案件,所有讨论似乎都带有偏见。
但是,您似乎打算使用查询参数unpaid
来有选择地过滤掉所有已付款的订单,因此可以从某种意义上将其作为查询参数。
但另一方面,它会返回不同类型的响应-甚至可能是完整(已付费?)订单数据的子集。换句话说,如果您决定根据查询参数返回不同的数据类型,则会使您的API有点不清楚。
所以我建议采用以下方法:
/orders -- always data with 42 fields
/orderSummaries -- always data with 4 fields
/orders?unpaid=True -- always data with 42 fields
/orderSummaries?unpaid=True -- always data with 4 fields
因此,让查询参数仅影响结果集的过滤和排序,而不影响返回的数据类型。