我目前正在设计一个 REST Http api。(使用 HATEOAS 的东西,让客户“更简单”,避免客户做复杂的事情,而不是让 api 告诉他们该做什么......)
由于应用程序的社交特性,为了与应用程序交互,需要对用户进行身份验证,每个用户对数据的“视图”都会略有不同。我们以推特为例,它对每个人都会更容易。
为了对用户进行身份验证,我们将使用 OAuth,很简单。
因此,在客户端(ios 应用程序...)中,随机用户可能会看到一个用户列表,应该看到:
Adrien: Following
John: Not Following
Rambo: Not Following
另一个用户可能会看到:
Adrien: Following
John: Not Following
Rambo: Following
为了实现这一点,第一个解决方案是客户端(在 oauth 术语中,iphone/web/etc 应用程序)获取经过身份验证的用户关注的所有用户的列表,并且每次客户端显示列表时,比较每个具有关注用户列表的用户,以了解它是否应该显示“未关注”或“关注”。
请求/响应将是:
GET /users
Authorization: OAuth token...
[
{"id": 1, "name": "Adrien"},
{"id": 2, "name": "John"},
{"id": 3, "name": "Rambo"}
]
和
GET /users/{myid}/following
Authorization: OAuth token...
[1, 3, 25, 1210, 9]
这似乎是相当的,无国籍的。好的。
现在,如果我想让客户端开发人员的生活更轻松,并直接在用户列表响应中嵌入每个用户相对于经过身份验证的用户的关系,该怎么办:
GET /users
Authorization: OAuth token...
[
{"id": 1, "name": "Adrien", "relationship": "Following"},
{"id": 2, "name": "John", "relationship": "Not Following"},
{"id": 3, "name": "Rambo", "relationship": "Following"}
]
所以,问题:
- 它似乎打破了“无状态”的东西,它真的打破了REST无状态约束吗?
- 接下来,您认为 api 这样做是好还是坏?