用于用户数据的RESTful API

时间:2014-10-03 11:59:55

标签: web-services rest http

我想开发一个带有可重用API和REST风格的网站;一个应该很好的套件。 让我们说每个用户都可以存储他们喜欢的书籍的信息。所以我有很多用户,他们每个人都可以有很多书。

正如我想的那样,我会通过以下某种要求获得书籍清单:

GET /book

但是

用户应仅列出存储在服务器上的他的书籍,而不是所有书籍。那么如何正确地做到这一点?

当我阅读许多SO Q& A时,使用带有cookie和会话ID的标准身份验证似乎并非RESTful(就像它在PHP或其他人中常见),因为它保留了服务器上的状态。 然后,第一个请求(GET / book)不会返回任何结果(用户未登录),并且在记录之后,它将返回该用户的书籍列表。

我遇到的另一个解决方案是将凭据附加到每个请求,例如:

GET /book?user=john&pass=1234

尽管有TLS(HTTPS)要求(由于明文数据),但它似乎是错误的。似乎冗余,带宽浪费,每次请求验证等。

我的问题是:

如果我没有错,怎么做这个好方法?从良好的编程角度和性能/网络使用情况来看都是如此?

也许REST不适合用户拥有的数据?

编辑: OAuth和类似的解决方案似乎太复杂了(我认为它们也增加了开销?)。

2 个答案:

答案 0 :(得分:1)

您可以添加第一个强制REST方法来获取身份验证令牌,因此您可以在所有其他REST请求中使用此令牌并使用它来过滤结果。

答案 1 :(得分:0)

使用Authorization标头传递凭据信息。如果OAuth过于复杂,请使用基于SSL的基本身份验证...如下所示:

GET /user HTTP/1.1

Authorization: Basic ZmlkZGxlcnBpYW5pc3Q6aGVsbG93b3JsZA==
Accept: application/json
(other headers here)

虽然我绝对推荐用户特有的网址,例如:

GET /users/fiddlerpianist/books HTTP/1.1

请注意,在无状态RESTful服务中,没有登录或注销的概念。每次请求都会从客户端传递Authorization标头。