【问题标题】:REST API naming conventionREST API 命名约定
【发布时间】:2012-11-05 16:35:43
【问题描述】:

给定这个 URI:

/myapp/books/status/{status}

例如:

/myapp/books/status/new 

这将返回所有标记有此状态的图书。

返回所有未标记为特定状态的书籍的正确 URI 是什么?

/myapp/books/notstatus/new

我想退回所有书籍的集合,除了具有特定状态的书籍..

请指教...

【问题讨论】:

    标签: api rest naming


    【解决方案1】:

    我建议使用查询参数来过滤您的图书列表资源的状态:

    myapp/books/?status=new
    myapp/books/?status=not_new
    

    两个查询都返回相同的资源(书籍列表),您只是在该列表中过滤掉您想要的类型,因此使用查询参数是有意义的。我使用状态前缀 not_ 进行反向查询,但您可以使用任何您想要的约定。

    REST 不要求您避免获取参数(似乎有些人认为获取参数是巫术),只是不要使用它们进行虚假 RPC 调用 :)

    我喜欢这种方法的原因是,当您可能想要为所有包含多条信息的书籍添加检查时,它会为您提供更多选择,例如状态为新且状况良好的书籍。

        myapp/books/?status=new&condition=good
    

    如果您尝试将其分解为 url 段而不是查询参数,它会很快变得混乱。

    【讨论】:

      【解决方案2】:

      据我所知,有几种方法,它们都是正确的(从 REST 角度来看):

      • 查询字符串参数

      myapp/books?status=new

      myapp/books?$filter=status eq 'new'

      • 在URI中,也不错

      myapp/books/status/{status}

      我个人更喜欢查询字符串或 OData。

      当特定技术(ASP.NET Web API、WCF 数据服务,由非 Microsoft 提供的服务也应该是等效的)有助于避免为此类查询编写任何代码时,OData 尤其有用。

      它允许公开预过滤的集合,然后使用这样的查询从客户端过滤它。在公开集合的这种情况下,我使用的是 OData 查询。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-07-21
        • 2021-07-01
        • 1970-01-01
        • 2018-11-15
        • 1970-01-01
        • 2019-12-05
        • 2020-10-21
        • 1970-01-01
        相关资源
        最近更新 更多