用户和会话的RESTAPI URI设计?

用户和会话的RESTAPI URI设计?,rest,asp.net-web-api,service-design,Rest,Asp.net Web Api,Service Design,我是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) D

我是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)
我想知道这里的会话/登录/退出功能。 我在这里的想法是正确的,还是应该以其他方式设计,使其更具休息性

另外,关于注册用户,应该是:

POST /api/users

即使它也会启动一个新会话?

我建议避免使用术语session并使用auth(如在身份验证中)。术语session给人的印象是服务器端会话,通常与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

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

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

此外,添加身份验证标头时,不需要区分:

GET    /api/users/123             //specific
GET    /api/users/me              //get your own profile 
由于您只需检查服务器端请求的用户的令牌是否与身份验证头中的令牌匹配,因此返回“me”配置文件。而
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”请求才能注销,对吗?@rogerasing No。如果客户端不发送令牌,则该请求未经身份验证。从服务器的角度来看,没有“登录”和“注销”。然而,如果你愿意,你可以在客户机上制造假象,也就是说,你实际上可以结合多种方法。例如,将.net WebApi堆栈与signer()一起使用是非常常见的,signer()是一个持久消息传递框架,允许您将更新推送到客户端。例如,您可以在其中一个经过身份验证的持久连接中使用REST调用。
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