关于Web RESTFUL API设计中对于不同参数相同功能接口定义的疑问

发布于 2022-09-04 19:08:35 字数 725 浏览 34 评论 0

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

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

看到两种方案:

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

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

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

九八野马 2022-09-11 19:08:35

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

千寻… 2022-09-11 19:08:35

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

为你鎻心 2022-09-11 19:08:35

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

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文