使用内部锚点过滤 REST API 表示是不是有意义?

Posted

技术标签:

【中文标题】使用内部锚点过滤 REST API 表示是不是有意义?【英文标题】:Does it make sense to use internal anchors for filtering a REST API's representation?使用内部锚点过滤 REST API 表示是否有意义? 【发布时间】:2011-02-02 19:44:04 【问题描述】:

作为my previous question 关于用于检索网络论坛资源的统计信息的 REST URI 的后续行动,我想知道是否可以使用内部锚点作为过滤器提示。请参见下面的示例:

a) 获取所有统计信息:

GET /group/5t7yu8i9io0op/stat
 
    group_id: "5t7yu8i9io0op",
    top_ranking_users: 
      [  user: "george", posts: 789, rank: 1 , 
         user: "joel", posts: 560, rank: 2   ...]
      ,
    popular_topics: 
      [ ... ]
    ,
    new_topics: 
      [ ... ]
    

b) 只获取热门话题

GET /group/5t7yu8i9io0op/stat#popular_topics
 
    group_id: "5t7yu8i9io0op",
    popular_topics: 
      [ ... ]
    

c) 只获取排名靠前的用户

GET /group/5t7yu8i9io0op/stat#top_ranking_users
 
    group_id: "5t7yu8i9io0op",
    top_ranking_users: 
      [  user: "george", posts: 789, rank: 1 , 
         user: "joel", posts: 560, rank: 2   ...]
    

或者我应该使用查询参数吗?

【问题讨论】:

【参考方案1】:

不确定您到底要做什么,但请确保您了解服务器看不到片段标识符,它们被客户端连接器截断。

见:http://www.nordsc.com/blog/?p=17

【讨论】:

【参考方案2】:

我从未见过以这种方式使用锚点 - 这很有趣。话虽如此,我建议使用查询参数有几个原因:

    它们是标准的 - 您的 api 的消费者会很喜欢它们。没有什么比处理古怪的 api 更烦人了。

    许多框架会自动解析查询参数并将它们设置在请求对象(或框架/http 服务器库中存在的任何类似物)的字典中。

【讨论】:

【参考方案3】:

我认为这样更有意义:

/group/5t7yu8i9io0op/stat/top_users
/group/5t7yu8i9io0op/stat/popular_topics
/group/5t7yu8i9io0op/stat/new_topics
/group/5t7yu8i9io0op/stat/user/george

【讨论】:

【参考方案4】:

不,您不能这样做,因为正如 Jan 指出的那样,服务器永远不会看到该片段标识符。从字面上看,这部分 url 不会到达服务器。

【讨论】:

以上是关于使用内部锚点过滤 REST API 表示是不是有意义?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Django Rest 过滤器限制查询结果

基于 If-Modified-Since 标头修改 REST API 表示是不是有效?

REST api 版本控制(仅版本表示,而不是资源本身)

keycloak rest api查询是不是有Not条件

使用 BitBucket REST API 过滤分支

WooCommerce REST API - 按修改日期过滤订单