JAX-RS:我可以拥有既是资源又是子资源的实体(资源)?

时间:2015-09-18 16:46:50

标签: rest java-ee jpa jax-rs restful-architecture

我考虑如何在JAX-RS中设计我的RESTful Web服务,我遇到了一些问题。 我有具有ServicePoints的Provider,而ServicePoint实体具有由provider_id和service_point_no组成的复合键。如此逻辑似乎有:

/providers/1/service-points/3 

但我也可以独立于提供商检索服务点,以获取给定位置的所有服务点。

/service-points // all 
/service-points?location=CountryName 

但在第一种方法中我会:

@Path("/") 
class ServicePointResource { /* ... */ } 

当然,我可以通过多种方式定义它来解决这种情况,例如:

@Path("/providers") 
class Provider { 

    @Path("/{providerId}/service-points")
    public ServicePointResource getServicePointResource() { } 

     @Path("/")
     class ServicePointResource { 
          // here implemented subresource sepcific code 
     } 

} 

@Path("/service-points")
class ServicePointResource { 
   // here emplemented resource sepcific code 
 } 

或只是:

@Path("/") 
class ProviderServicePointResource { 
  // here subresource specific code
} 

 @Path("/service-points")
 class ServicePointResource {
  // here resource specific code 
 } 

子资源方法似乎很自然,但在某些情况下使用ServicePoint就像全局资源一样,在没有Provider划分的情况下访问它似乎也很重要。 我也可以在这里使用:

/service-points/1+3  // to represent composite key 
/providers/1/service-points/3 // but it seems more natural 

任何提示?

1 个答案:

答案 0 :(得分:0)

如果您认为服务点是主要资源而提供商是次要的,您可以使用

/service-point/id // service point by id
/service-point?provider=id // all service point of provider

你也可以使用像这样的矩阵参数

/service-point;id=x;provider=y

这样你可以组合任意数量的参数。 如果你认为服务点和提供者都是主要资源,我会留下两条路径:

/service-point/id
/provider/id1/service-point/
/provider/id1/service-point/id2