关于restful 查询API设计问题
[Rout("/user/find/{userId}"),"GET"]
[Rout("/user/find/{barthday}","GET")]
[Rout("/user/find/{loginId}"),"GET"]
[Rout("/user/find/{Addtime,endTime}"),"GET"]
[Rout("/user/......."),"POST"] //省略其他的
public class User
{
public int UserId{ge;set;}
public DateTime BarthDay{get;set;}
public string LoginId{get;set;}
public DateTime AddTime{get;set;}
}
这个对User资源设计是NET中的RSET风格,java中应该也有类似的模式,这里且先不说这个资源是否设计的是否合理,我们把问题聚焦在“一个资源多条件查询”场景下(所谓的Query filter),由于服务端对应User资源查询就一个GET方法,比如:
public object Get(User request)
{
//TODO:完成查询
}
,那么如何来识别这些多条件查询而组成对应的SQL语句呢?
if(....)
sql ="";
//或者是 return findByUserId(userId)
else
sql =""
//或者是 return findByLoginId(LoginId)
....
吗?感觉很别扭,且会出现很多分流的分支,而传统的RPC接口对这些多条件查询,会产生多个方法与之对应,比如, findByUserID...(userId),findByLoginId(loginId)这样子,好不好不说,但至少语义很清楚。没有分支条件。
那么在RestFul 这个模式下,这中场景该如何设计?板桥大叔,指点啊
[该贴被bingyang于2014-06-28 15:27修改过]
[该贴被bingyang于2014-06-28 15:29修改过]