RESTful 子类型资源



一个最佳实践问题。如果您正在设计 RESTful 接口,您将如何区分子类型。例如,您的应用程序具有动物(每个动物都由其 animalId 标识(,其子类型为狗和鸟,其中每个子类型都有其特定的子资源。例如,狗有尾巴长度和鸟翅膀长度(无论它可能是什么(。您会选择这些(或者您有更好的(方法中的哪一种?

1)
/animals/{animalId}/tail-length (400 when animal is bird)
/animals/{animalId}/wings-length (400 when animal is dog)
2)
/dogs/{animalId}/tail-length
/birds/{animalId}/wings-length
3)
/animals?type=dog/{animalId}/tail-length
/animals?type=bird/{animalId}/wings-length

假设不同子类之间没有ID串通,我会推荐以下内容。

GET /animals/:id

有了这样的回应。(这个例子是JSON,但可以很容易地是XML/etc(

{
  "id": "xyz",
  "type": "dog",
  "tailLength" 400
}

这使它保持简单和休息。

这实际上是个人喜好的问题。

我个人避免像选项 3 那样将信息放在查询字符串中,因为我倾向于将查询字符串用于非分层信息。(这个问题的公认答案说前两个更正确,而最赞成的答案说这真的无关紧要。

缓存也是一个因素,因为代理可能不会缓存包含查询字符串的资源(请参阅 Google 关于利用代理缓存的建议(。

我想我会选择第二个,或者可能是混合(/animals/dogs/...(来指示资源的层次结构,但这取决于你。

最新更新