一个最佳实践问题。如果您正在设计 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/...
(来指示资源的层次结构,但这取决于你。