2

我正在为 REST 统一接口的概念而苦苦挣扎。不限制数据的丰富查询吗?例如,假设我有一个 Movie 实体:

Movie
======
id
directorId
categoryId

使用外键作为过滤器,使用以下方法构建 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 调用?

谢谢,

克里斯

4

1 回答 1

2

您可以将 url 映射到资源,如下所示:

with GET
/movies/{movie_id}
/movies/{movie_id}/directors/{director_id}/
/movies/{movie_id}/categories/{category_id}/

然后为每个 url 调用你想要的任何方法。

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

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

于 2013-06-06T11:52:53.940 回答