avatar

目录
一些设想

我们后端是这样子的

对于所有请求的资源,我们会把所有资源分成几类,然后对于同一种类的资源,请求的url是相同的,只不过不同的请求方式(get,put,post,delete)代表着对资源的不同操作。

例如在聊天室里,我会设置一个message类,用来请求聊天记录,请求url大概为 这样子:

Code
1
/messages/  # 请求满足条件的所有消息(如请求某一房间的所有消息)
Code
1
/message/<id>  # id为具体id, 请求某一id的消息(对于每一项资源都会有一个对应的id)

然后对于这个url,你可以用get方法来获取消息的具体内容,用post方法来请求生成一条新消息,用put方法来更改一条消息的内容,用delete方法来删除某一条消息。
img

正文

我大概会设置这几类

token类

参考url:/api/token/

对于这一类,我只会设置一个请求方式:POST,对于其他的请求方式都会拒绝。

对于POST方法,可以新建一个token,即新建一个用户,对于这一个请求,你不需要发送任何数据给我,只需要单单一个请求而已,我会返回token值等一系列数据。

但然你也可以发送一个用户名之类的数据给我,但这就需要你在没有token的时候在网站原页面上覆盖一层膜强制要求用户输入用户名以注册。感觉会有点麻烦,所以建议不带参数的请求,我会设置一个默认的用户名。之后用户可以在用户页面更改信息。

对于用户进入我们的任何一个页面,我的设想是这样子的。在用户进入我们的网站时,你检查本地是否有token信息,若没有,则向我请求一个新的令牌。在这个过程中,如果你选择不带任何数据地向我请求一个token,则用户不需要进行如何操作,这是进入我们网站的前置检查。在这个前置检查中,不论用户在进入我们网站前是否有token信息,在进入我们网站后,除了他可能需要输入注册信息外,都已经给他安排的妥妥的了。

room类

参考url:/api/room/ /api/room/<id>

以上两种url分别对应请求满足某一条件所有房间信息和请求某一id房间信息。

首先两种URL都会有的GET方法,用于请求资源具体信息,我大概会发送房间名字,介绍,成员,消息等信息。

然后第一种URL会有一个POST方法,用于新建房间资源,大概需要房间名称,介绍,密码等信息。

最后第二种URL会有PUT和DELETE方法。PUT用于修改房间信息,需要修改什么信息就发送什么数据过来。DELETE用于删除房间,我会根据请求头中的令牌信息判断该用户是否有权限删除房间,对于一个房间,我大概只会允许一个管理员,大概也不会允许更改管理员。。。再说吧。在删除房间之前,我会先通过websocket发送一条信息给所有在房间中的客户端提醒房间要关闭了,发送信息10s后,我会在数据库中将该房间删除,之后对房间的所有操作都会引发错误(但我会捕捉这些错误并返回错误消息给你)。所以建议你在收到房间删除的消息后禁止用户在房间内的一切操作

然后关于我们讨论的用户如何进入房间的问题,由刚才对token类的介绍可知,但用户可以正常访问我们的网站的时候,由于我们的前置检查,他肯定已经有一个token了。然后对应用户进入房间,我有两种想法,分别对应于你对用户是否有权限进入房间进行认证或者我对用户是否有权限进入房间进行认证。

方案1:在用户进入我们的网站并且完成我们前置的对token的检查之后,你可以向我的use类发送一个GET请求来获得用户信息,其中包括用户有权限加入的房间的消息。之后对于用户即将加入的房间,你可以自行判断是否有权限加入,若无权限,你可以在用户输入密码后向我的user类发送一个PUT请求,请求中包括房间id与用户输入的房间密码,之后我验证密码判断用户是否可以加入房间并返回验证消息,如果验证通过的话我大概会把房间信息同验证信息一起发生给你。

方案2:你直接附带token向我的room类发送一个get请求,我会根据token判断是否有权限进入房间,若有权限,返回房间信息,若没有,返回一个无权限的提示,之后你要求用户输入密码,并向我的user类发送一个PUT请求,之后的流程与方案1相同。

感觉方案1流程好像有点长的样子,建议方案2吧。。。

然后你说一个用户可以加入多个房间,我觉得可以加一个展示用户所有已加入房间的页面,把这个页面作为我们网站的首页。

既然房间都已经有密码的话,我觉得可以通过输入房间名来进入房间,通过房间名构建url什么的?不知道能不能实现

user类 与 message类

我不想再说了orz,大概就是get获取资源,post新建资源,put修改资源,delete删除资源这样子的orz。

题外话

这边建议你在向我的接口发送请求的时候都在请求头带一个token信息,虽然不是所有的接口都需要认证啦,到时候我会在API文档中详细标明需要token的接口。

然后有什么问题再说吧
我刚刚试着把你todolist的网站部署了一下成功了,所以我们的测试大概会是这样子:我把我的api部署到网络上,然后你就可以直接通过网络链接访问我的借口,然后我也把你的网页部署一下,然后我们各自测试,发现问题说一下就ok

some questions

  1. 请求新token时 是否需要发送一个用户名等额外信息初始化用户, 还是不带任何信息注册一个默认用户,又或者说两种请求都接受?
  2. 对于用户进入房间,采取何种验证方式,方案1 or 方案2 ?
文章作者: 3927o
文章链接: http://yoursite.com/%E6%88%91%E4%BB%AC%E5%90%8E%E7%AB%AF%E6%98%AF%E8%BF%99%E6%A0%B7%E5%AD%90%E7%9A%84/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 lin's document

评论