身份验证后正在加载 RESTful 个对象
Loading RESTful objects after authentication
我想知道在身份验证过程后加载 RESTful 对象的最佳做法是什么。
例如,我有一个应用程序,登录后,它需要检索人员、地点列表和其他一些与帐户相关的信息。以下哪项是最佳做法?
A。在应用程序调用 POST /api/v1/login 之后它应该 return:
{
"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"
}
这种方法似乎让应用程序开发人员更容易,因为他们不必单独调用来获取。但是,它似乎是紧耦合的。
B。或者它应该 return 只是
{
"token": "xxxxx.yyyyyyy.xzzzzzzzzz"
}
应用程序应单独加载其他数据,例如,
GET /api/v1/persons
GET /api/v1/places
GET /api/v1/lastlogin
这种方法看起来更简洁,但对于应用程序开发人员来说可能更难。并且会有一些额外的请求开销,特别是如果您要加载很多不同的模型。
C。或者,我是否应该只调用一个名为 /api/v1/loginWithData 的调用,其中 return 是带有数据的令牌,以及一个单独的调用 /api/v1/login 哪个 return 是令牌?这种方法兼具两者的优点,但它似乎会使 api 命名空间混乱。
如果您能发送可以解释的链接,我将不胜感激。
请注意,如果我们谈论的是第 3 方应用程序,那么它们永远不应拥有用户凭据和身份验证令牌。他们只是从用户那里得到一个访问密钥,当他们给他们一些特权或通过更受限制的 API 时,每个请求都由用户签名。如果您谈论的是会话而不是无状态令牌,那么您应该查看 OAuth 和 Fielding 论文以了解基础知识。
如果您开发实际客户端,使其不是第 3 方应用程序,则令牌必须在授权 header 或 cookie 中传输,而不是在 body 中传输。我会使用 POST /api/v1/auth
link 为您的数据源提供 GET /api/v1/user/136
link。或者,如果您使用自定义 MIME 类型,则 return 为空 body.
我想知道在身份验证过程后加载 RESTful 对象的最佳做法是什么。
例如,我有一个应用程序,登录后,它需要检索人员、地点列表和其他一些与帐户相关的信息。以下哪项是最佳做法?
A。在应用程序调用 POST /api/v1/login 之后它应该 return:
{
"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"
}
这种方法似乎让应用程序开发人员更容易,因为他们不必单独调用来获取。但是,它似乎是紧耦合的。
B。或者它应该 return 只是
{
"token": "xxxxx.yyyyyyy.xzzzzzzzzz"
}
应用程序应单独加载其他数据,例如,
GET /api/v1/persons
GET /api/v1/places
GET /api/v1/lastlogin
这种方法看起来更简洁,但对于应用程序开发人员来说可能更难。并且会有一些额外的请求开销,特别是如果您要加载很多不同的模型。
C。或者,我是否应该只调用一个名为 /api/v1/loginWithData 的调用,其中 return 是带有数据的令牌,以及一个单独的调用 /api/v1/login 哪个 return 是令牌?这种方法兼具两者的优点,但它似乎会使 api 命名空间混乱。
如果您能发送可以解释的链接,我将不胜感激。
请注意,如果我们谈论的是第 3 方应用程序,那么它们永远不应拥有用户凭据和身份验证令牌。他们只是从用户那里得到一个访问密钥,当他们给他们一些特权或通过更受限制的 API 时,每个请求都由用户签名。如果您谈论的是会话而不是无状态令牌,那么您应该查看 OAuth 和 Fielding 论文以了解基础知识。
如果您开发实际客户端,使其不是第 3 方应用程序,则令牌必须在授权 header 或 cookie 中传输,而不是在 body 中传输。我会使用 POST /api/v1/auth
link 为您的数据源提供 GET /api/v1/user/136
link。或者,如果您使用自定义 MIME 类型,则 return 为空 body.