3

我慢慢开始理解 REST 并且有一件事让我感到困惑。

我知道 REST 中的大部分内容都是“资源”。所以我想知道在用户注册/登录的情况下我们指的是哪种资源?

users吗?那么这是否意味着一个 POST onusers将注册一个新用户。如果是这种情况,那么我如何验证用户身份?users带有编码密码/用户名对的 GET ?

我真的很困惑。

鉴于我刚刚开始了解 REST,我的理解可能完全错误。

任何帮助表示赞赏!

谢谢!

4

4 回答 4

2

对于 REST 来说,这是一个不寻常但常见的问题。继续思考资源。

当您登录时,您要求服务器为您创建一个会话以访问某些资源。所以在这种情况下,要创建的资源将是一个会话。因此,url 可能是/api/sessions并且带有会话对象(可能只是一个由用户名或密码以及可能是 UUID 组成的对象)的 POST 到该 url 将创建一个会话。在真正的 REST 中,您可能会在/api/sessions/{UUID}指向一个新会话,但实际上(出于安全目的)您可能只是注册一个会话 cookie。

如果我要自己实现登录表单,那是我个人的登录表单方法,但我总是倾向于使用Spring 安全性来完成这项工作,所以这个要求从来没有真正考虑过。

于 2012-10-15T09:40:48.480 回答
1

我正在做类似的事情,这是我迄今为止采取的解决方案。欢迎任何建议:)

users专门用于注册和帐户修改。

  • GET /users/{id}例如,获取个人资料页面的用户
  • PUT /users使用用户名和密码创建一个新用户。实际上,这应该发送一封带有链接的电子邮件,该链接可以通过 GET 方法确认注册。
  • POST /users/{id}修改用户(例如更改密码)
  • DELETE /users/{id}

对于身份验证,我倾向于认为我请求的资源是令牌或身份验证。我试图避免使用“会话”这个词,因为它应该是反 RESTful 的,但如果您只是为您的客户端创建一个实际的服务器端会话的错觉,我想这很好。

  • PUT /authentication/使用用户名/密码返回 Set-Cookie 和对 user_id / 散列值。也许它应该是 POST。没有把握
  • DELETE /authentication/{user_id}只是删除 cookie 并且用户退出。也许代替user_id它应该是一个独特的token_id.
于 2012-10-23T10:10:50.333 回答
0

可以使用 restful 方法创建、读取、更新和删除资源,例如: https ://cwiki.apache.org/S2PLUGINS/restful-crud-for-html-methods.html

因此,如果您想管理您的用户,这将是一种比较安静的方法。

如果您想对管理数据集中的用户进行身份验证,您需要设计或选择一个 restful 身份验证机制,请参见 http://de.slideshare.net/sullis/oauth-and-rest-web-services http ://www.thebuzzmedia.com/designing-a-secure-rest-api-without-oauth-authentication/

要快速了解这些问题,您可能需要查看 dropwizard: http ://dropwizard.codahale.com/

于 2012-10-15T09:27:48.783 回答
-2

一个资源可能有一个或多个 URI,但一个 URI 将只有一个资源

因此,在对用户进行身份验证时,您正在处理已注册的用户,而在注册时,您正在处理尚未注册的用户(资源)。

您所需要的只是一种将其处理到您的服务器的方法。

这是一个取自 SUGARCRM REST Web 服务实现的示例。REST 就像对您的 SERVER 的 http 请求。

例如,在实现 REST Web 服务时。每个 REST 请求都将指向同一个文件说

www.your_domain.com/Rest.php?json={your_json_method:'method',params:'watever'}

Json 中的哪里是您作为参数发送的请求

请求验证用户 {method:'SignUp', username:'abc', pass:'pass', confirm_pass:'pass'} 请求注册用户 {method:'Login', username:'abc', pass:'pass'}

通过这种方式,您可以拥有任意数量的参数

记住 JSON 不是必须使用的。您可以使用简单的获取参数进行查询

于 2012-10-15T05:15:44.637 回答