【发布时间】:2017-05-19 18:42:25
【问题描述】:
我有一个 MySQL 数据库和一个在 Tomcat 上运行的 SpringBoot 应用程序。这是我的一个个人项目,也是我设计 REST 服务的第一次体验。我一直在尝试创建我的 POJO 来匹配数据库,但是这个特定的对象引起了一些疑问。
以下是主数据库表:
- 播放器(ID、描述)
- 广告系列(ID、描述)
- 资源(id、描述、resource_type_id)
- resource_type(id、描述)
- 组件(ID、描述)
...以及以下联结表:
- player_resource(id, player_id, resource_id):一个玩家可能有很多资源,一个资源可能属于很多玩家。
- campaign_resource (id, campaign_id, resource_id):一个活动可能有很多资源,一个资源可能属于很多活动。
- resource_component(id, resource_id, component_id):一个资源可能有很多组件,一个组件可能属于很多资源
我有点不知道应该如何设计我的 JSON 响应以及专门为 Resource 对象设计的相应 POJO。
到目前为止,我的想法是拥有三个独立的 URI:
- .../api/resources/{uuid}:返回具体的资源。
- .../api/campaigns/{uuid}/resources:返回提供的广告系列中可用的资源。顺便说一句,玩家存在于战役的范围内,所以这个特定的 API 最终决定了玩家在他们存在的过程中可以获得什么。
- .../api/players/{uuid}/resources:返回玩家当前在其库存中拥有的资源。
我为 Resource 创建了一个 POJO:
public class Resource {
private String resourceId;
private String shortDescription;
private String longDescription;
private ResourceType resourceType;
private List<Component> components;
// getters and setters
}
我为 CampaignResource 和 PlayerResource 创建了两个额外的 POJO:
public class CampaignResource {
private String campaignResourceId;
private Resource resource;
// getters and setters
}
public class PlayerResource {
private String playerResourceId;
private Resource resource;
// getters and setters
}
我希望 URI #1 和 #2 返回相同的布局,但我对 URI #3 存在冗余问题。 URI #2 可能会返回 10 个资源,这很好且符合预期,但 URI #3 可能会返回数百个,具体取决于玩家携带的物品。
调用 URI #3 时我真正需要的唯一信息是 player_resource_id、resource_id 和 resource_type_id 字段。我不需要知道资源由哪些组件组成,因为使用 URI #1 或 URI #1 以更易于管理的方式返回该信息。
我害怕创建单独的“基础”资源 POJO,因为我觉得有义务遵循某种形式的规范建模。我可以使用 JsonView 之类的东西并根据它是 URI #1、#2 还是 #3 来分离 Resource RowMappers 吗?我可以实现某种形式的分页,但它仍然有很多冗余数据。一位资深的 REST 开发人员会如何处理这个问题?
【问题讨论】: