根据消费者的不同,拥有不同的REST接口是否正确?

时间:2014-01-17 04:07:51

标签: api rest architecture restful-architecture

假设我们有一个帐户资源的REST接口

Admin/Account/Get
[Authorize(Admin)]
public ActionResult Get(id)
{
    if(id > 0)
       return _userService.Get(id);
    else
       return _userService.GetAll();
}
public ActionResult Post(account)
{
    return _userService.Save(account);
}

此Rest接口最初是为使用服务器的Admin而创建的。所以起初只是一个私人api。 什么是更好的?要为同一资源创建不同的接口,但对于公共API(不同的使用者),如下所示:

Account/Get
[Authorize]
public ActionResult  Get()
{
    return _userService.Get(user.Id);
}

或者为此相同的资源创建相同的界面

Account/Get
[Authorize(Admin, Users)]
public ActionResult  Get(id)
{
  if(admin){
     if(id > 0)
         return _userService.Get(id);
     else
         return _userService.GetAll();
   } else {
         return _userService.Get(user.Id);
   }
}
public ActionResult Post(account)
{
   if(admin)
       return _userService.Save(account);
   return null;
}

不管消费者如何,最好为同一资源提供相同的接口。或者,如果消费者拥有不同的权限,最好使用不同的rest API?为什么呢?

1 个答案:

答案 0 :(得分:0)

一般来说,由于更具体的接口更脆弱,因此通用接口比许多特定接口更少更好,即消费者中的每一个小变化都可能也改变特定接口。它们在服务器端也很难维护,因为进行更改意味着您现在必须更新更多接口(更不用说让旧版本保持活动状态)

尝试推广到单个界面或至少推广到消费者群体/类型