Jersey服务和持久层

问题描述:

我正在开发一个简单的问答服务(Jersey JAX-RS)。有了这项服务,我已经拿出了以下资源(可能会增加)。Jersey服务和持久层

  • GET | POST ------------- /问题
  • GET | PUT | DELETE - /问题/(编号)
  • GET | POST ---- -------- /问题/ {ID} /回答
  • GET | PUT | DELETE - /问题/ {} questionId /答案/ {} answerId

这是迎合我的资源类所有上述路径。

@Path("/questions") 
public class QuestionResource { 
    @Inject 
    private QuestionService questionService; 

    @GET 
    ...<list of questions> 

    @POST 
    ...<a new question> 

    @Path("{id}") 
    ...<a question> 

    @PUT  
    @Path("{id}") 
    ...<update a question> 

    @DELETE 
    @Path("{id}") 
    ...<delete a question> 

    @GET 
    @Path("{id}/answers") 
    ...<list of answers> 

    @POST 
    @Path("{id}/answers") 
    ...<a new answer for a question> 

    @GET 
    @Path("{questionId}/answers/{answerId}") 
    ...<an answer for a question> 

    @PUT 
    @Path("{questionId}/answers/{answerId}") 
    ...<update an answer for a question> 

    @DELETE 
    @Path("{questionId}/answers/{answerId}") 
    ...<delete an answer for a question> 
} 

这有相应的服务和持久层 - QuestionService/QuestionServiceImpl和QuestionRepository/QuestionRepositoryImpl。但是,我有些困惑,我应该把哪些服务和重新投入用来处理最后五个请求的方法。我是否应该将它们都放到问题服务和存储库或其他类别中 - 回答服务和存储库?

我正在考虑后者由于答案和问题的多对一关系(JPQL NamedQuery - 选择一个FROM答案WHERE a.question.id = questionId)。这意味着我的QuestionResource中除了QuestionService之外还会有AnswerService。那会没事的。

请赐教。谢谢。

+0

我觉得你应该把你方法的主要资源,就像如果你想那么一个特定问题的答案,你的主要资源是问题,你应该把方法的问题类等。 –

+0

谢谢你的快速回答。你介意解释一下为什么? –

+0

我想我不应该包含这个“我正在考虑后者由于答案和问题的多对一关系(JPQL NamedQuery - 选择一个FROM回答一个WHERE a.question.id = questionId)”。对我的问题。它看起来不相关。 –

  • 在RESTful API中的一切是一个资源,当谈到 关系你认为是主要的资源和其他资源或者 换句话说资源和子资源。

  • 在你的情况答案是子资源,因为你的答案资源不可能没有问题或在 换句话说,你的资源的一个依赖于其他 一个主要资源。绝对是你的答案取决于问题