2017-03-09 66 views
0

我的REST API格式:REST URL格式正确

http://example.com/api/v1.0/products - get all products 
http://example.com/api/v1.0/products/3 - get product with id=3 

此外,产品可以orginized成产品组。

什么是正确的方法,根据REST最佳实践来获取所有产品组:

http://example.com/api/v1.0/products/groups 

http://example.com/api/v1.0/productgroups 

...

另一种选择?

回答

1

我不能RISHABH瑞里同意,因为http://example.com/api/v1.0/products/groups可能导致歧义。

我会把我的钱放在http://example.com/api/v1.0/productgroups甚至更​​好http://example.com/api/v1.0/product_groups(更好的可读性)。

我有过类似的讨论在这里:Updating RESTful resources against aggregate roots only

问:关于/产品/功能/或产品功能的东西, 有这个达成共识?你知道有什么好的来源来确保 这不仅仅是品味的问题吗?

答:我认为这是误导。 我期望在所有产品中获得所有功能 ,而不是获得所有可能的功能。但是,要 说实话,很难找到任何源,直接谈论这个 问题,但有一堆物品,人们不要尝试 创建嵌套的资源,如/产品/功能,但这样做 separately

所以,我们不能肯定http://example.com/api/v1.0/products/groups将返回所有可能的组或只是与所有现有产品相关的所有组(怎么样尚未与该产品尚未连接一组?)。

为避免这种歧义,您可以在文档中添加一些注释。但你可以准备http://example.com/api/v1.0/product_groups,一切都很清楚。

+0

有没有一般的规则,但看看这两个微软azure休息api网址,一直到op.- https://management.azure.com/subscriptions/$subs/resourceGroups/$resGrp/providers/Microsoft.Compute/virtualMachines/rishabhvm/start?api-version = 2015-05-01 https://management.azure.com/subscriptions/$subs/resourceGroups/$res_grp/providers/Microsoft.Compute/virtualMachines/rishabhvm?api-version=2015 -05-01 又如另一个例子,想想以后他是否想要获取关于“产品”实体中某个其他项目的信息。由此他必须为同一类别中的不同项目建立不同的关键字。 –

+0

@RishabhSoni情况并非如此。来自Azure的示例显示模式'/ resources/$ id/sub_resource/$ subresource_id/...'问题是关于'/ resources/subresources'。要获取有关一个子资源的信息:'/ products/$ id/product_group'。另:'/ products/$ id/price'等等。 'Product_groups'是一个字典。你能解释并发症吗?我不确定我们是否在谈论同一点。 –

+0

@RishabhSoni'Product_groups'是一本字典。 '/ products/$ id/product_group'可能会链接到'product_groups/$ id'。资源之间的关系,这是休息的本质。 –

1

如果您正在为您的客户开发Rest API,则不应该依赖id。而是建立一个有意义的缩写并将它们映射到服务器端的实际ID。

如果这不可行,而不是使用 http://example.com/api/v1.0/products/3您可以使用http://example.com/api/v1.0/products?product_id=3,然后您可以在文档中提供“product_id”说明。基本上告诉客户使用product_id的方法。 在短网址必须是有意义的,遵循pattern.The可变部分必须通过URL查询

有了这个(部分?或者POST有效载荷之后)发送方法来查询服务器也很重要。如果客户端正在尝试向服务器获取某些内容,则应使用“GET”http请求,如果它正在上传新信息,则使用类似POST http请求;如果正在更新或创建新资源,则使用“PUT”请求。

所以通过这个类比http://example.com/api/v1.0/products/groups更合适,因为它遵循一个模式(产品中的组),而productgroups更像是一个没有模式的关键字。

类似于模式的目录更容易理解。就像在文件系统(C:\ Program Files \ WinRAR)中一样,每个部分都让我们更加普遍化。

您还可以自定义这个特定基团 - http://example.com/api/v1.0/products/groups?id=3

+0

感谢您的回答,但我的问题主要是关于'/ products/groups'和'/ productgroups'模式和规则如何确定。 – alexanoid

+0

@alexanoid,看看编辑是否解决你的查询。 –