【问题标题】:REST API URI Design for users and sessions?用户和会话的 REST API URI 设计?
【发布时间】:2013-08-20 07:54:47
【问题描述】:

我是 REST 设计的新手,所以我想在这里提供一些建议。

这是我目前所拥有的:

GET    /api/users                 //all users
GET    /api/users/123             //specific
GET    /api/users/me              //get your own profle 
POST   /api/users/me/session      //start new session (login)
DELETE /api/users/me/session      //ends the current session (logout)

我想知道这里的会话/登录/退出内容。 我在这里的想法是正确的,还是应该以其他方式设计成更加 REST'ish?

还有,注册用户呢,应该是:

POST /api/users

即使它也开始一个新会话?

【问题讨论】:

    标签: rest asp.net-web-api service-design


    【解决方案1】:

    我建议避免使用会话一词并使用身份验证(如身份验证)。术语会话给人的印象是服务器端会话通常与 REST 相悖。

    以下是好的:

    GET    /api/users                 //all users
    GET    /api/users/123             //specific
    GET    /api/users/me              //get your own profile 
    

    对于身份验证,您可能有这个:

    POST   /api/auth                  //username/password required. auth_token is sent back
    DELETE /api/auth                  //auth_token is sent in HTTP header
    

    【讨论】:

      【解决方案2】:

      REST 是无状态的,这意味着服务器不需要在连接的应用程序上保持活动状态。引用Roy Fielding:

      All REST interactions are stateless. That is, each request
      contains all of the information necessary for a connector to
      understand the request, independent of any requests that may
      have preceded it
      

      对用户进行身份验证的一种常用方法是将“秘密”或访问令牌添加到请求的身份验证标头中,您可以使用例如OAuth

      此外,当您添加身份验证标头时,无需区分:

      GET    /api/users/123             //specific
      GET    /api/users/me              //get your own profile 
      

      如果请求的用户令牌与身份验证标头中的令牌匹配,您可以简单地检查服务器端,因此您返回“我”配置文件。而POST /api/users 确实是一种将用户添加到系统的方法。因此:

      GET    /api/users     //all
      GET    /api/user/{id} //a user
      PUT    /api/user/{id} //update
      POST   /api/user      //Add new user
      DELETE /api/user/{id} //Remove user
      

      【讨论】:

      • 即使我会使用秘密令牌和标头。我仍然需要一些“InvalidateToken”请求才能注销,对吧?
      • @RogerAlsing 否。如果客户端不发送令牌,则请求未通过身份验证。从服务器的角度来看,没有“登录”和“注销”。但是,如果您愿意,您可以在客户端上制作它的错觉。
      • 也就是说,您实际上可以组合多种方法。例如将 .net WebApi 堆栈与 SignalR (signalr.net) 一起使用是非常常见的一种持久消息传递框架,允许您将更新推送到客户端。你可以例如在这些经过身份验证的持久连接之一中使用 REST 调用。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-10-19
      • 2012-01-07
      • 1970-01-01
      • 1970-01-01
      • 2017-12-13
      • 2017-08-11
      • 1970-01-01
      相关资源
      最近更新 更多