12

我已经多次通读文档并到处寻找这个问题的答案,但都没有找到答案。具体来说,我查看了为服务定义服务Cornice API以及为资源定义资源。

我目前正在构建一个 REST API,其结构与此类似:

GET /clients             # Gets a list of clients
GET /clients/{id}        # Gets a specific client
GET /clients/{id}/users  # Gets a specific clients users

解决此问题的最佳方法是什么?我应该使用服务还是资源或两者兼而有之?而且,如果两者兼而有之,如何?

4

2 回答 2

7

资源是高层次的便利,服务提供低层次的控制。

我自己只是在学习檐口。查看源代码,资源在内部创建服务,一个用于项目,一个用于集合(如果指定了集合路径)。该资源还为使用 http 动词作为名称或以 collection_[verb] 形式定义的每个方法添加视图到服务。

因此,除了资源是定义服务的一种简洁、结构化的方式之外,几乎没有什么区别。

于 2014-03-28T13:13:43.560 回答
6

资源装饰器使用集合的 url,以及对象的 url 模式。

collection_path=/rest/users 路径=/rest/users/{id}

资源装饰器最好用在视图类中,您可以在其中对对象使用 get/put/post/delete 方法,以及对集合使用 collection_get、collection_put 等。我这里有一些例子:

https://github.com/umeboshi2/trumpet/blob/master/trumpet/views/rest/users.py

由于我大量使用资源装饰器和视图类,我还没有发现对服务功能的需求,但它允许您创建包装视图可调用函数的 get、put、post 装饰器。

如果您在客户端使用backbone.js,则资源装饰器和url 示例可以很好地与Backbone 集合和模型配合使用。

于 2014-02-11T21:18:18.417 回答