我正在使用Jax-RS Jersey开发简单的API。我们假设我正在考虑某些国家/地区商店销售商品的域名。
我的设计包括以下两个电话:
他们都应该返回一个项目列表,第一个应该返回在该国家/地区销售的所有商品,第二个应该只返回商店编号1销售的商品。
我当然有两个资源,一个处理所有项目请求的ItemResource,以及一个处理所有关于商店的请求的StoreResource。
@Path("items")
class ItemResource {
@GET
public List<Item> getAllItems(){
}
@Path("stores")
class StoreResource
@GET
@Path("/{storeId}/items")
public List<Item> getItemsSoldByStore(@PathParam("storeId") long storeId) {
}
我想要做的是将第二个请求传递给ItemResource,以避免StoreResource
和模型类Item
或专门为管理项目而创建的数据库接口(如DAO)之间的耦合。
我知道我可以将ItemResource视为子资源或StoreResource的嵌套资源,但关键是这并非总是如此,因为有时我想调用ItemResource而不传递商店ID,以获取所有项目(这是第一个请求http://foo.com/webapi/items)的情况。
我希望将@Path("items")
注释保留在ItemResource
上,以便它处理对/ items端点的每个请求。
在这种情况下,正确的设计是什么?谢谢你的帮助。
答案 0 :(得分:0)
您可以通过从父资源返回资源来创建嵌套资源。
// Parent resource
@Path("stores")
class StoreResource {
@GET
@Path("/{storeId}/items")
public List<Item> getItemsSoldByStore(@PathParam("storeId") long storeId) {
return ItemResource(storeId);
}
}
// nested resource
class ItemResource {
@GET
@Path("{storeId}")
public List<Item> getAllItems(@PathParam("storeId")){
// return your items
}
}