根据 GET 请求参数更改响应是否可以?
Is it OK to change the response depending on the GET request parameters?
如果一个端点的响应有一组不同的字段是否正确?
例如:
有端点 - /orders
,其中 returns 有关订单的信息(假设 - 42 个字段),并且该信息显示在用户的帐户网页上。
在某些时候,我们有另一个网页需要(出于自身目的)有关用户尚未支付的订单的信息。请求将是这样的 - /orders?unpaid=True
在这种情况下,网页只需要 4 个字段而不是 42 个。我应该只将这四个字段放在响应中,还是最好保留一种响应格式用于任何目的?
大多数时候,根据 GET 请求参数做出决定并不是一个好主意。 GET 参数可以在不付出太多努力的情况下进行操作。
话虽如此,有时我会使用 GET 参数来决定用户看到的内容,也就是当我已经知道该特定事件的结果时。
例如,如果用户在登录时提供了无效的凭据,我的后端已经知道它是无效的。但是比方说,我没有任何其他方法可以将该错误消息传递到前端以供用户显示。然后我会做类似的事情:
https://example.com/login.php?failed_message=Failed!No user found!
我们不在这里做任何决定。我们只知道如果用GET参数调用login.php
,那一定是登录失败。因此,我们从后端重定向到此 URL。
没有明确的指导方针来处理像你这样的案例,而且所有的讨论似乎都很有偏见。
但是,您似乎打算使用查询参数 unpaid
来选择性地过滤掉所有已付款订单,因此从这个意义上说,将其作为查询参数是可以的。
但另一方面,它 return 是不同类型的响应 - 甚至它可能是完整(付费?)订单数据的子集。换句话说,如果您决定根据查询参数 return 不同的数据类型,这会使您的 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
所以让查询参数只影响结果集的过滤和排序,而不影响您 return 的数据类型。
如果一个端点的响应有一组不同的字段是否正确?
例如:
有端点 - /orders
,其中 returns 有关订单的信息(假设 - 42 个字段),并且该信息显示在用户的帐户网页上。
在某些时候,我们有另一个网页需要(出于自身目的)有关用户尚未支付的订单的信息。请求将是这样的 - /orders?unpaid=True
在这种情况下,网页只需要 4 个字段而不是 42 个。我应该只将这四个字段放在响应中,还是最好保留一种响应格式用于任何目的?
大多数时候,根据 GET 请求参数做出决定并不是一个好主意。 GET 参数可以在不付出太多努力的情况下进行操作。 话虽如此,有时我会使用 GET 参数来决定用户看到的内容,也就是当我已经知道该特定事件的结果时。 例如,如果用户在登录时提供了无效的凭据,我的后端已经知道它是无效的。但是比方说,我没有任何其他方法可以将该错误消息传递到前端以供用户显示。然后我会做类似的事情:
https://example.com/login.php?failed_message=Failed!No user found!
我们不在这里做任何决定。我们只知道如果用GET参数调用login.php
,那一定是登录失败。因此,我们从后端重定向到此 URL。
没有明确的指导方针来处理像你这样的案例,而且所有的讨论似乎都很有偏见。
但是,您似乎打算使用查询参数 unpaid
来选择性地过滤掉所有已付款订单,因此从这个意义上说,将其作为查询参数是可以的。
但另一方面,它 return 是不同类型的响应 - 甚至它可能是完整(付费?)订单数据的子集。换句话说,如果您决定根据查询参数 return 不同的数据类型,这会使您的 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
所以让查询参数只影响结果集的过滤和排序,而不影响您 return 的数据类型。