我想开发一个带有可重用API和REST风格的网站;一个应该很好的套件。 让我们说每个用户都可以存储他们喜欢的书籍的信息。所以我有很多用户,他们每个人都可以有很多书。
正如我想的那样,我会通过以下某种要求获得书籍清单:
GET /book
但是
用户应仅列出存储在服务器上的他的书籍,而不是所有书籍。那么如何正确地做到这一点?
当我阅读许多SO Q& A时,使用带有cookie和会话ID的标准身份验证似乎并非RESTful(就像它在PHP或其他人中常见),因为它保留了服务器上的状态。 然后,第一个请求(GET / book)不会返回任何结果(用户未登录),并且在记录之后,它将返回该用户的书籍列表。
我遇到的另一个解决方案是将凭据附加到每个请求,例如:
GET /book?user=john&pass=1234
尽管有TLS(HTTPS)要求(由于明文数据),但它似乎是错误的。似乎冗余,带宽浪费,每次请求验证等。
我的问题是:
如果我没有错,怎么做这个好方法?从良好的编程角度和性能/网络使用情况来看都是如此?
也许REST不适合用户拥有的数据?
编辑: OAuth和类似的解决方案似乎太复杂了(我认为它们也增加了开销?)。
答案 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标头。