【问题标题】:How to pass filter arguments to GET requests in REST APIs?如何将过滤器参数传递给 REST API 中的 GET 请求?
【发布时间】:2016-06-22 10:44:35
【问题描述】:

我正在构建一个 RESTful 网络服务:

  • GET /clients 下,我正在获取所有已知客户的列表。
  • GET /clients/1 下,我正在获取clientId 1 的客户端对象。

一切都应该如此。

这些客户端有一个名为authorized 的属性。在我的 Web UI 上管理这些,我为授权和未经授权的客户分开了表格。当然,我不想为了显示未经授权的客户端而从服务器加载所有客户端。

问题是,如何通过 RESTful URL 过滤客户端?因为我想做一个合适的 RESTful API,所以查询参数不是一个选项。

我已经考虑过另外做 GET /unauthorizedClientsGET /authorizedClients 但这似乎不对,因为我仍然会使用 DELETE/clients/%clientId%` 来删除一个客户端。

我想不出一个令人满意的方法来解决这个问题。欢迎提供有关如何解决此问题的任何提示。

【问题讨论】:

    标签: rest restful-architecture restful-url


    【解决方案1】:

    我只是想知道是什么阻止了您使用查询参数。它们是过滤 REST API 中的资源集合的最合适方法。使用查询参数不会使您的 API less RESTful.

    你可以有以下:

    • 授权:GET /clients?status=authorized
    • 未经授权:GET /clients?status=unauthorized

    另一种选择是:

    • 授权:GET /clients/authorized
    • 未经授权:GET /clients/unauthorized

    不过,您确实应该考虑查询参数。

    【讨论】:

    • 是的,+1 查询参数!
    【解决方案2】:

    我会选择/clients/unauthorized/clients/authorized。您需要定制资源 URI,例如 directories

    这样,针对/client/[id] 资源删除客户端没有任何问题。

    【讨论】:

    • 是的,这正是我们一直在寻找的。谢谢!
    • @HerrDerb if clients authorizedunauthorized 都被认为是具有不同状态的单一资源,这个答案没有意义。更好的是使用查询参数。
    • @HerrDerb 实际上,这绝对是主观的。你的观点和我的观点……你都知道
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-07
    • 2015-08-27
    • 2020-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多