验证后加载RESTful对象

时间:2017-09-15 08:08:14

标签: rest web-services api-design

我想知道在验证过程之后加载RESTful对象的最佳做法是什么。

例如,我有一个应用程序,登录后,它需要检索人员,地点和其他一些帐户相关信息的列表。以下哪项是最佳做法?

A 即可。应用程序调用POST / api / v1 / login之后应返回:

{
    "token": "xxxxx.yyyyyyy.xzzzzzzzzz",
    "persons": [
        {"id": 1, "name": "John"},
        {"id": 2, "name": "Paul"},
        {"id": 3, "name": "George"},
        {"id": 3, "name": "Ringo"}
    ],
    "places": [
        {"id": 1, "name": "London"},
        {"id": 2, "name": "New York"},
    ],
    "lastLogin": "2017-09-10 13:00:00"
}

这种方法似乎使应用程序开发人员更容易,因为他们不必单独调用来获取。但是,它似乎确实紧密耦合。

即可。或者应该只返回

{
    "token": "xxxxx.yyyyyyy.xzzzzzzzzz"
}

并且app应该使用例如

分别加载其他数据
GET /api/v1/persons
GET /api/v1/places
GET /api/v1/lastlogin

这种方法看起来更干净,但对应用程序开发人员来说可能更难。并且会有一些额外的请求开销,特别是如果你加载了很多不同的模型。

C 即可。或者,我应该只有一个名为 / api / v1 / loginWithData 的调用,它返回带有数据的标记,还有一个单独的 / api / v1 / login ,它只返回令牌?这种方法具有两者的优点,但似乎它会使api命名空间变得混乱。

如果您能发送可以解释的链接,我会非常感激。所以我可以向他们学习。

1 个答案:

答案 0 :(得分:1)

请注意,如果我们讨论第三方应用,那么他们应该永远不会拥有用户凭据和身份验证令牌。他们只是从用户那里获得访问密钥,当他们为他们提供某些权限时,或者通过更受限制的API,每个请求都由用户签名。如果您正在谈论会话而不是无状态令牌,那么您应该检查OAuth和Fielding论文以了解基础知识。

如果您开发实际的客户端,使其不是第三方应用程序,则令牌必须在Authorization标头或cookie中而不是正文中。我会使用POST /api/v1/auth链接为您提供数据源的GET /api/v1/user/136链接。或者,如果您使用自定义MIME类型,则返回一个空体。