1

我正在使用 Zend Framework 1.12.3 开发一个 REST API。

我有三种不同的资源:课程、科目和教授。每个班级可能分配了多个科目,每个科目可能分配了一个或多个教授。

架构将是这样的:

classes:
    class:
        id: 123
        name: foo
        subjects:
            subject:
                id: 14
                name: Chemistry
                professors:
                    professor:
                        id: 741
                        name: Jeremy Clarkson
                    professor:
                        id: 963
                        name: Richard Hammond
            subject:
                id: 16
                name: Physics
                professors:
                    professor:
                        id: 753
                        name: James May

我想知道列出所有科目和教授的最佳方法,包括已分配和未分配的(在实际分配的页面上)。

我应该只返回指定的科目和教授,然后将这些 id 交叉引用到包含所有科目和教授的数组吗?

或者我应该返回一个包含所有科目和教授的数组,每个科目和教授都有一个“分配”变量设置为 0 或 1?

在其他 API 中,我看到处理分配给某些项目的用户是使用第一种方法完成的(API 仅返回分配用户的 ID,然后客户端应用程序使用包含所有用户的数组交叉引用这些 ID )。这是关于作业的最佳做法吗?

4

3 回答 3

1

我建议使用前一种方法,因为与后一种方法相比,显示简洁的主题/教授列表所需的数据集非常小。如果您还没有这样做,我建议您使用 JSON 作为数据格式。这使得从客户端 JS 调用此方法并创建有趣的表示变得非常容易。

根据主题/教授层次结构的初始列表,很容易按照您的建议将 ID 与来自另一个呼叫的完整集合进行匹配,或者对集合中的每个教授 ID 进行呼叫并获取有关该个人的详细信息。如果您通过 AJAX 执行它们,您甚至可以并行运行它们:Parallel asynchronous Ajax requests using jQuery

于 2013-10-08T00:42:14.290 回答
1

我认为您应该在尝试创建服务之前直接获得对象模型。也许这是一种文化问题(我是荷兰人),但似乎模型中缺少某种名册对象,并且将是为其编写服务的资源。

于 2013-10-08T22:58:59.850 回答
1

如果 REST API 仅为关系创建资源是没有意义的。这里一个主题,教授一个班级是一种资源。

一个主题可以分配一个或多个教授,但它不需要包含有关其他教授的信息。同样,从教授的角度来看,它应该只包含有关分配给它的科目的信息。

发送列表、教授和科目(或依次包含科目列表的课程列表)。让他们以您在模式样本中放置的方式引用教授的主题。同样,为什么教授可以为他们分配学科类的参考资料。

对于作业页面。将列表中的一个视为主要列表(较小的一个是个好主意)并使用它来交叉引用另一个。

这样,如果您在某个时候想要有关单个教授的信息。教授列表中的一个元素/文档/模型可以为您提供所需的一切,反之亦然。

于 2013-10-08T20:19:55.453 回答