2017-01-30 175 views
1

所以...我知道这个问题可能会危险地接近意见。我希望不是,而且REST标准清楚了我要问什么,但如果不是,我会关闭它。“Right”REST URL获取所有资源中的所有资源?

我有一个网站(Django的,与数据存储在Postgres的)与Product(-s)和Category(-ies)每个category可以包含多个product(-s)。

所以,问题是:什么是“正确的”端点(如果有的话)以获得所有类别中的所有产品?

我相信这将清楚得到一个特定类别的所有产品。例如,如果类别ID是24,为了得到它的所有产品,我会写:

http://myserver.com/api/categories/24/products

但所有类别的所有产品在每个如何?

会是http://myserver.com/api/categories/products

会是http://myserver.com/api/categories/all/products

使用某种参数比如http://myserver.com/api/categories?mode=all_products会更好吗?

这个想法是有这样的(JSON格式)的响应

{ 
    "25": [{ 
     "id": 1, 
     "name": "Product 1 in category 25", 
     "price": 100 
    }, { 
     "id": 2, 
     "name": "Product 2 in category 25", 
     "price": 200 
    }], 
    "26": [{ 
     "id": 3, 
     "name": "Product 1 in category 26", 
     "price": 300 
    }, { 
     "id": 4, 
     "name": "Product 2 in category 26", 
     "price": 400 
    }] 
} 

预先感谢您。

+1

它可能只是http://myserver.com/api/products。由于URL的含义是完整的可用产品集合,并且结果的格式不考虑类别。例如:http://www.restapitutorial.com/lessons/restfulresourcenaming.html – 4xy

+0

感谢您的评论,@ 4xy :-)具有特定网址的东西是我已经拥有它来获取所有产品的列表,无论的(或者不按其分类)。 – BorrajaX

+0

'REST标准'? REST只是一种建筑风格,不是标准!接下来,REST并不关心你的URI设计,只是你尊重支持协议(在你的情况下是HTTP),并且这些URI是他们声称的唯一的。像http://someserver.com/foo/bar/adjfajdöaj/sajdkaj就像您提交的URI之一一样(好或坏是基于意见的) –

回答

2

就REST而言,如果您是唯一代表网址中的资源以便它是cacheable(并且遵守HATEOAS但让我们跳过该部分),则关于如何构建您的网址并不重要。随着在我看来说,既然你想获得的所有产品,您的网址应该是这样

GET /products   # to return all products with their associated categories 
GET /category/24/products # to return all products belonging to a particular category 

注: - 虽然网址结构不REST的完全是一个组成部分,但在一个方面设计的网址实体/资源和标识符确实可以更容易地创建RESTful API。结构良好的网址也使它们更容易被客户使用。

+0

虽然对于人来说,结构良好的URI可能更容易解释,并非所有的客户都可以这样做。有人可能会争辩说,指定一个怀孕的资源命名方案可能会干扰[Roy Fielding给出的规则](http://roy.gbiv。com/untangled/2008/rest-apis-must-be-hypertext-driven),因为这可能导致实现者依赖这些路径,因此将他们的客户端紧密地耦合到API,而不是使用响应中找到的URI和关系。 –

+0

我的意思是它使开发人员能够更轻松地开发与API交互的客户端。其次,如果有人要硬编码的网址,url是否可读或不重要。遵循一个最不可思议的约定和原则是没有错的 – hspandher

+1

是的,这就是我正在寻找的......一个_sensible_URL模式......我知道它们只是URL,因此,我可以使用任何我感觉到的就像...我只想提供一些关于如何制作“合理”网址的建议。谢谢 :) – BorrajaX