我正在努力,但是使用REST的统一接口的概念。它不限制丰富的数据查询吗?例如,假设我有一个电影实体:
Movie
======
id
directorId
categoryId
使用foregin密钥作为过滤器,使用以下方法构建DAO并不罕见:
MovieRepo.GetByDirector(int directoryId);
MovieRepo.GetByCategory(int category);
根据我对统一界面的理解,我可以使用以下两个Get()方法:
IEnumerable<Movie> Get();
Movie Get(int id)
如果我想使用RESTful Web服务按目录或类别过滤我的查询,我运气不好吗?
IEnumerable<Movie> GetByCategory(int categoryId);
显然我不想在我的数据库中检索所有电影,然后应用过滤器客户端。我错过了什么吗?或者我应该坚持使用RPC调用吗?
谢谢,
克里斯
答案 0 :(得分:2)
您可以按以下方式将网址映射到资源:
with GET
/movies/{movie_id}
/movies/{movie_id}/directors/{director_id}/
/movies/{movie_id}/categories/{category_id}/
然后为每个网址调用您想要的任何方法。
MovieRepo.GetByDirector(int directoryId); # in director controller
MovieRepo.GetByCategory(int category); # in category controller
MovieRepo.GetById(int movie_id); # in movie controller
或者,如果您想使用更像过滤器的算法,可以使用以下网址:
/movies?director=ridley&category=sci-fi
现在您只需要获取查询参数并在电影控制器中使用它们。