【问题标题】:REST API and polymorphismREST API 和多态性
【发布时间】:2016-12-12 08:59:33
【问题描述】:

我在 JAVA 中有类层次结构,应该可以通过 angularJS SPA 应用程序的 rest API 获得这些层次结构(数据保存在 PostgreSQL DB 中)

类层次结构如下:

  • PERSON BASE ABSTRACT CLASS 包含姓名和年龄
  • CHILD EXTENDS PERSON 包含最喜欢的电视节目
  • PARENT EXTENDS PERSON 包含孩子列表
  • GRANDPARENT EXTENDS PERSON 包含父母列表

UI 看起来像一个层次结构树,您可以在其中查看和编辑所有数据。

我可以想到三种方法来对此进行建模:

  1. 一个具有层次结构的端点 /grandparent:id/parents:id/children:id
    示例
    发布 /grandparent/1/parents/2/children
    为了创造一个新的孩子

优点:更易读,更安静 缺点:实现起来很复杂,当我编辑一个孩子时,我不关心所有的层次结构,我最多需要直接的父级来创建它, 但对于编辑,子 ID 足以在数据库中找到它

  1. 三个端点:/grandparents:id、/parents:id、/children:id
    发布 /children?parentID=2

优点: ? 缺点:很多重复

3.一个端点/人(在请求/响应JSON中,使用type字段表示类和一个parentID字段。

发布/人 { 姓名 .. 类型:儿童 父母身份:2 }

优点: 多态性 缺点:不太安宁?

你怎么看?

【问题讨论】:

  • 我喜欢多态的(几乎是 JSON-RPCish)。 REST 仅在恕我直言之前有效。尤其是有时您必须从 url 和其他时间(或同时)有效负载中提取参数时。最后......是什么让你如此确定投票会给出正确的答案?两个字:总统选举。 :)
  • 为什么你认为第三个是“更少的 RESTful”?它要么是 RESTful,要么不是。 URL 签名是 RESTful 的正交问题。
  • 您可以将 2 组合在一起,具有 /people/:id 端点和 /people/:id/parents。然后您可以轻松引用每个人(确保您可以添加另一个端点/people/:id/grandparents,但恕我直言,这似乎是多余的)

标签: java angularjs json rest polymorphism


【解决方案1】:

我认为你应该只有一个“人”端点和一个“人”端点。

人员端点将返回符合条件的人员 ID 的列表。例如 'has_children' = true 将返回所有父母。 'has_parents' = false 将返回所有试管婴儿等。

'person' 端点将返回有关特定人员的详细信息,给定特定的 id。在这里,您会看到眼睛颜色、性别、孩子 person_ids 列表、父母 person_ids 列表,也许还有孙子 person_id 列表。有关此人的任何其他详细信息都将在此处显示。

如果扩展类没有添加任何您无法从 person 类中简单获得的重要功能,您可能需要考虑重构 Java 代码。

基本上你在这里处理人的“节点”。

查看 Graph Commons API 可能您的大部分工作都已为您完成。

【讨论】:

    猜你喜欢
    • 2018-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多