我在AngularJS中有一个原型解决方案,它使用以下数据结构:
$scope.clients = [
{ client:"Client1", projects:[
{ project: "Project1", items:[
{ item: "This is the first item" },
{ item: "This is the second item" }
]},
{ project: "Project2", items:[
{ item: "This is the third item" },
{ item: "This is the fourth item" }
]}
]},
{ client:"Client2", projects:[
{ project: "Project4", items:[
{ item: "This is the fifth item" },
{ item: "This is the sixth item" }
]}
]}
];
我希望实现后端,我不确定API是否应该为客户端提供上述嵌套数据结构,或者它是否应该提供项目的平面结构,然后AngularJS客户端应用程序然后创建嵌套结构。以下是API可用的扁平结构示例:
[
{ client: "Client 1", project: "Project 1", item: "This is the first item." },
{ client: "Client 1", project: "Project 1", item: "This is the second item.", },
{ client: "Client 1", project: "Project 2", item: "This is the third item.", },
{ client: "Client 2", project: "Project 4", item: "This is the fourth item.", }
];
最佳方法是什么?另外,对API设计有什么好的参考吗?
答案 0 :(得分:2)
如果您正在使用JSON,那么“application / hal + json”标准绝对值得一看。
您可以在此处阅读所有详细信息:http://tools.ietf.org/html/draft-kelly-json-hal-05
Matthew Weier O'Phinney还有一个非常好的演示文稿,其中包含如何使用PHP后端的示例代码:http://www.zend.com/en/resources/webinars/(向下滚动到“构建RESTful ZF2应用程序”网络研讨会)。
基本上,它是一组允许在您的响应中链接和嵌入数据的约定,这正是您在此需要的。
希望有所帮助!
答案 1 :(得分:1)
我通常发现在我的应用程序中不将我的API响应转换为不同的格式会很有帮助。如果嵌套结构在您的页面上很有用,并且它在其他地方也会继续有用,我会坚持下去。您不希望处于将API响应从一种格式转换为另一种格式的情况,因此请使用具有内聚性且易于理解的内容。
IMO,嵌套结构看起来更好,因为您不必在前端进行分组和关联。如果可能的话,我倾向于更喜欢我的API响应需要很少的“按摩”才能在我的页面上下文中工作。
就API设计而言,如果您正在寻找一些标准,this question's answer对标准API设计和响应格式有一些很好的参考。