一个最佳实践问题。如果您正在设计RESTful接口,您将如何区分子类型。例如。你的应用有动物(每只动物由它的动物ID识别)与狗和鸟的亚型,其中每个亚型有其特定的子资源。例如。狗有尾长和鸟翅长(无论它是什么)。您会选择哪些(或者您有更好的方法)方法吗?
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
答案 0 :(得分:3)
假设不同的子类之间没有ID串通,我建议如下。
GET /animals/:id
有这样的回应。 (这个例子是JSON,但可以很容易地成为XML / etc)
{
"id": "xyz",
"type": "dog",
"tailLength" 400
}
这使它保持简单和RESTful。
答案 1 :(得分:1)
这真的是个人偏好的问题。
我个人避免将信息放在查询字符串中,如同选项3一样,因为我倾向于将查询字符串用于非分层信息。 (this question接受的答案说前两个更正确,而最受欢迎的答案表明它确实无关紧要。)
缓存也是一个因素,因为代理可能不会缓存包含查询字符串的资源(请参阅Google's advice on leveraging proxy caches)。
我想我会选择第二个,或者可能是混合(/animals/dogs/...
)来表示资源的层次结构,但这取决于你。