具有单向关系的REST API设计

时间:2013-08-17 20:45:21

标签: java spring rest

我正在尝试构建REST API,并且在如何表示多对1单向关系方面有点不知所措。

我有4个组件代表汽车的4个部分(发动机,变速箱,车轮,车身)。

现在很明显,组件实体不需要汽车实体,只有汽车关心组件。

我想知道的是处理汽车资源的REST输入的最佳方式。

1)我是否应该要求将完整的模型提交给服务(例如,包括与完整转移实体的传输)?

2)调整进来的数据只接受所需实体的ID(例如engine_id,transmission_id)?

我对此感到有点困惑,并且在谷歌搜索后无法找到一个好的例子。

public class Engine
{
    private Integer id;
    // Engine specific stuff
}

public class Transmission
{
    private Integer id;
    // Transmission specific stuff
}

public class Wheels
{
    private Integer id;
    // Wheels specific stuff
}

public class Body
{
    private Integer id;
    // Body specific stuff
}


public class Car
{
    @Id
    private Integer id;

    @ManyToOne
    @JoinColumn(name="engine_id")
    private Engine engine;

    @ManyToOne
    @JoinColumn(name="transmission_id")
    private Transmission transmission;

    @ManyToOne
    @JoinColumn(name="wheels_id")
    private Wheels wheels;

    @ManyToOne
    @JoinColumn(name="body_id")
    private Body body;
}

2 个答案:

答案 0 :(得分:0)

1)否。汽车显然属于您的问题域,您应该将它们视为这样并识别它们。您还应该具有允许检索具有特定engine_id的所有汽车的功能,等等。根据你如何陈述问题,如果所有4个id都定义了一辆汽车,那就不明确了。

2)如果我正确理解您的问题,是的,ID是REST设计的关键部分。这并不意味着您无法显示下级对象列表甚至搜索列表。

答案 1 :(得分:0)

让用户首先构建有效的Transmission,Engine,Body和Wheels。然后要求他们在构建Car时将ID或URL传递给这些资源。