比如说我要做一个登录功能,允许用户使用:账号/密码、手机/验证码、邮箱/验证码、一次性链接 多种方式进行登录,后端数据处理层都是使用的 loginByPassword、loginByCaptcha、loginByTemporarylink这些内部接口处理。
那么对外的接口应该如何暴露给用户?
看到两种方案:
第一种:依旧是传统思路,前端如果用 账号/密码 登录,那么就
POST /login/login.php
;如果用 手机/验证码 登录,那么就POST /login/loginByCaptcha.php
,不同的登录方式POST到不同的地址。这样做最外层处理比较容易,只要检查POST的数据是否合法就可以了。第二种:前端统一都用
POST /login/login.php
这个唯一接口,后端接口根据用户 POST 过来的数据进行判断,如果有['username']和['password]
就走后端loginByPassword
逻辑,其它同理。
PS:最后地址都会用路由处理,会隐藏 *.php
的,因此这个地址不在问题讨论范围。
作为一个后端人士,表示是做过此类的接口的,帐号,邮箱,手机号码等都在同一个接口提交登入,其实后端处理的方法是比较简单的,逐一排除法,比如手机号码是不带英文的,那么 带英文或者特殊字符的就是帐号和邮箱内的一种了,其中在注册帐号的时候规定帐号名称不能有特殊字符,比如‘@’,那么带@的就是就是邮箱了,接下来就是手机号和帐号的区分了,有些程序员为了判断简单,就直接规定帐号必须英文开头,不过就算可以纯数字,也是可以区分开来的,只需要了解其中的差异就行,实在不行两个都验证一下不就完了,所以对于此类接口一般都是设计成一个接口,很少设计成多个接口,如果非要前端区分的话,那只需要加上一个Type参数区分一下就可以,比如想要邮箱登入,Type就传email就行了,至于restful风格接口统一PUT操作就行,因为此类登入接口既有更新,也可能有删除,甚至还有新增,不好归纳成哪一类