我正在按照REST样式创建一个Web服务,所以我使用的是JAX-RS。但是,问题在于更为一般的形式,因此技术无关紧要。
假设您的系统中有三个资源。
测验,问题和问题反馈。现在假设您为测验资源创建路径:/quiz
一个测验对象有一个问题列表,每个问题都有一个反馈列表。
我还有一个问题的路径:/questions
您可以POST
对该问题的子资源(这是正确的术语吗?)反馈,所以请说:/question/1/feedback
但是这条路径是否也可以通过测验获得?对此有任何规定,还是由开发人员决定(当然是......,但通常是这样)?
示例:/quiz/questions/1/feedback
。我想问的是边界在哪里。您是否应该在嵌套路径中使用相同的操作,就像它们处于“顶级”路径时一样?
答案 0 :(得分:4)
我们一直在使用Web服务实现中的组合与聚合规则。基本前提是合成的资源的生命周期完全由其父资源管理。而那些聚合的只是从关联的角度来管理
因此,给定父资源,我们(通常)将HTTP谓词映射到子资源上的管理操作,如下所示:
Composition Aggregation POST create associate GET read read PUT update reassociate DELETE delete disassociate
对于复合GET,我们定义了足够的端点来完全查询子资源。对于聚合GET,我们只返回足够的信息来定义实际端点以进行完整查询。
如果我们编写Quiz API,我们就会
但不是: