php - 关于Web RESTFUL API设计中对于不同参数相同功能接口定义的疑问
伊谢尔伦
伊谢尔伦 2017-04-11 10:28:54
[PHP讨论组]

比如说我要做一个登录功能,允许用户使用:账号/密码手机/验证码邮箱/验证码一次性链接 多种方式进行登录,后端数据处理层都是使用的 loginByPassword、loginByCaptcha、loginByTemporarylink这些内部接口处理。

那么对外的接口应该如何暴露给用户?

看到两种方案:

  • 第一种:依旧是传统思路,前端如果用 账号/密码 登录,那么就 POST /login/login.php;如果用 手机/验证码 登录,那么就 POST /login/loginByCaptcha.php,不同的登录方式POST到不同的地址。这样做最外层处理比较容易,只要检查POST的数据是否合法就可以了。

  • 第二种:前端统一都用 POST /login/login.php 这个唯一接口,后端接口根据用户 POST 过来的数据进行判断,如果有['username']和['password]就走后端 loginByPassword 逻辑,其它同理。

PS:最后地址都会用路由处理,会隐藏 *.php 的,因此这个地址不在问题讨论范围。

伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

全部回复(3)
黄舟

作为一个后端人士,表示是做过此类的接口的,帐号,邮箱,手机号码等都在同一个接口提交登入,其实后端处理的方法是比较简单的,逐一排除法,比如手机号码是不带英文的,那么 带英文或者特殊字符的就是帐号和邮箱内的一种了,其中在注册帐号的时候规定帐号名称不能有特殊字符,比如‘@’,那么带@的就是就是邮箱了,接下来就是手机号和帐号的区分了,有些程序员为了判断简单,就直接规定帐号必须英文开头,不过就算可以纯数字,也是可以区分开来的,只需要了解其中的差异就行,实在不行两个都验证一下不就完了,所以对于此类接口一般都是设计成一个接口,很少设计成多个接口,如果非要前端区分的话,那只需要加上一个Type参数区分一下就可以,比如想要邮箱登入,Type就传email就行了,至于restful风格接口统一PUT操作就行,因为此类登入接口既有更新,也可能有删除,甚至还有新增,不好归纳成哪一类

黄舟

作为后端人员表示第一种方案好

ringa_lee

大部分的log in out 都不设计成restful风格的,如果不涉及为restful风格的我也觉得第一种很好。

如果设计成restful,可以设计成对user下status资源做更改put操作,也可以设计成对session资源的add delete操作。对于前者应该合并1个接口完成,后者则应该分开。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号