REST的统一界面

时间:2013-06-06 11:26:33

标签: rest

我正在努力,但是使用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调用吗?

谢谢,

克里斯

1 个答案:

答案 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

现在您只需要获取查询参数并在电影控制器中使用它们。