使用内部锚来过滤RESTAPI有意义吗;谁的代表?

使用内部锚来过滤RESTAPI有意义吗;谁的代表?,rest,api-design,Rest,Api Design,作为关于RESTURI的后续内容,我想知道是否可以使用内部锚作为过滤提示。见下例: a) 获取所有统计信息: GET /group/5t7yu8i9io0op/stat { group_id: "5t7yu8i9io0op", top_ranking_users: { [ { user: "george", posts: 789, rank: 1 }, { user: "joel", posts: 560, rank: 2 } ...]

作为关于RESTURI的后续内容,我想知道是否可以使用内部锚作为过滤提示。见下例:

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 }  ...]
    }
}

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

我从来没有见过锚被这样使用过——这很有趣。尽管如此,我还是建议使用查询参数,原因如下:

  • 它们是标准的——您的api的消费者将对它们感到满意。没有什么比处理古怪的api更烦人的了

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


  • 我认为更合理的做法是:

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

    不确定您到底想做什么,但请确保您理解服务器看不到片段标识符,它们被客户机连接器切断


    请参阅:

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