关于Web RESTFUL API设计中对于不同参数相同功能接口定义的疑问
比如说我要做一个登录功能,允许用户使用:账号/密码、手机/验证码、邮箱/验证码、一次性链接 多种方式进行登录,后端数据处理层都是使用的 loginByPassword、loginByCaptcha、loginByTemporarylink这些内部接口处理。
那么对外的接口应该如何暴露给用户?
看到两种方案:
第一种:依旧是传统思路,前端如果用 账号/密码 登录,那么就
POST /login/login.php
;如果用 手机/验证码 登录,那么就POST /login/loginByCaptcha.php
,不同的登录方式POST到不同的地址。这样做最外层处理比较容易,只要检查POST的数据是否合法就可以了。第二种:前端统一都用
POST /login/login.php
这个唯一接口,后端接口根据用户 POST 过来的数据进行判断,如果有['username']和['password]
就走后端loginByPassword
逻辑,其它同理。
PS:最后地址都会用路由处理,会隐藏 *.php
的,因此这个地址不在问题讨论范围。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
作为一个后端人士,表示是做过此类的接口的,帐号,邮箱,手机号码等都在同一个接口提交登入,其实后端处理的方法是比较简单的,逐一排除法,比如手机号码是不带英文的,那么 带英文或者特殊字符的就是帐号和邮箱内的一种了,其中在注册帐号的时候规定帐号名称不能有特殊字符,比如‘@’,那么带@的就是就是邮箱了,接下来就是手机号和帐号的区分了,有些程序员为了判断简单,就直接规定帐号必须英文开头,不过就算可以纯数字,也是可以区分开来的,只需要了解其中的差异就行,实在不行两个都验证一下不就完了,所以对于此类接口一般都是设计成一个接口,很少设计成多个接口,如果非要前端区分的话,那只需要加上一个Type参数区分一下就可以,比如想要邮箱登入,Type就传email就行了,至于restful风格接口统一PUT操作就行,因为此类登入接口既有更新,也可能有删除,甚至还有新增,不好归纳成哪一类
作为后端人员表示第一种方案好
大部分的log in out 都不设计成restful风格的,如果不涉及为restful风格的我也觉得第一种很好。
如果设计成restful,可以设计成对user下status资源做更改put操作,也可以设计成对session资源的add delete操作。对于前者应该合并1个接口完成,后者则应该分开。