我是REST架构设计的新手,但我认为我已经涵盖了它的基础知识.
从RESTful调用返回对象时遇到问题.如果我发出请求,例如http:// localhost / {type A}/{id},我将从具有指定id的数据库返回A的实例.
我的问题是当A包含B对象的集合时会发生什么?目前,我生成的XML返回A,其中包含B对象的集合.可以想象,如果B类型具有C对象的集合,那么返回的XML将最终成为一个非常复杂的对象图.
我不能100%肯定,但这感觉违反了RESTful原则,XML for A应该返回A的字段等以及它所拥有的B集合的URI集合.
对不起,如果这有点令人困惑,我可以尝试详细说明.这似乎是一个相对基本的问题,但我无法确定哪种方法更"REST".
干杯,
Aidos
一个重要的RESTful原则是一切都有URI.
你有这样的URI.
/ A /和/ A/id /获取A和特定A的列表.A响应包括B的ID.
/ B /和/ B/id /获取B和特定B的列表.B响应包括C的ID.
/ C /和/ C/id /获取C和特定C的列表.
您可以通过一系列查询重建ABC结构.你得到A,然后得到相关的B. 获得B时,您将获得所引用的各种C.
编辑
没有什么能阻止你多回来.
例如,您可能具有以下类型的URI.
/flat/A/id/
,/flat/B/id/
并/flat/C/id/
返回"平坦"(即无深度)结构.
/deep/A/id/
,/deep/B/id/
并/deep/C/id/
返回完整深度的结构.
这/deep/A/id/
将是整个结构,在一个大的嵌套XML文档中.对于可以处理它的客户来说很好. /flat/A/id/
将只是平面文档中的顶级.最适合无法处理深度的客户.
没有任何迹象表明您的REST界面不能是关系型的.
/ bookstore/{bookstoreID}
/ bookstore/{bookstoreID}/books
/ book/{bookID}
基本上,您与数据库架构的对应关系是1:1.
除了形成儿童名单的多对多关系.例如,/ bookstore/657/books应返回书籍ID或URL列表.然后,如果您想要特定书籍的数据,您可以调用第3个URL.
这只是我的头脑,请讨论优点.