REST API命名约定

时间:2012-11-05 16:35:43

标签: api rest naming

鉴于此URI:

/myapp/books/status/{status}

例如:

/myapp/books/status/new 

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

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

/myapp/books/notstatus/new

我想归还所有书籍的集合,除了那些具有一定地位的书籍。

请建议......

2 个答案:

答案 0 :(得分:5)

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

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

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

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

我喜欢这种方法的原因是,如果您想要为所有具有多条信息的图书添加支票,例如状态为新且条件良好的图书,它会在以后打开您的选项。

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

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

答案 1 :(得分:2)

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

  • 查询字符串参数
  

的myapp /书?状态=新

  

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

  • 在URI中,也很好
  

的myapp /书籍/状态/ {状态}

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

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

它允许公开预过滤的集合,然后使用此类查询从客户端过滤它。在暴露集合的情况下,我正在使用OData查询。