我想创建一个api,各种客户端可以连接到它,如Web,移动平台等。我的问题是,有时每个客户端的情况都不同。例如,我使用不同的方法进行Web和移动平台的身份验证,我的问题是:
我必须为每种类型的客户端创建不同的文件或使用if else语句检测客户端类型并在中执行适当的功能 同班同学?
我想创建干净且标准的API。我知道这可以有很多答案和一个广泛的问题,但我只是有一个线索。
答案 0 :(得分:2)
我发现使用YII 2.0 Framework
制作网络服务的最简单和最简单的方法之一你需要做什么。
您可以为桌面客户端创建api / v1等API模块,为移动客户端创建api / v2,以便轻松分离Access Controls。查看example以分隔API版本如果您不想手动执行所有操作,只需克隆包含所有主要功能的karas/yii2-oauth2-rest-template。
答案 1 :(得分:1)
NO stick to a standard
如果您正在进行基于API的操作,首先必须对调用进行标准化,对于不同的客户端,您不能为单个函数设置X,Y,Z。这将有一天失控。
您必须就要使用的功能达成标准协议,我确信在客户端这将需要最小的更改,因为我认为返回类型将是相同的。
此外,新开发人员难以维护。
所以坚持标准电话并达成共同协议。
答案 2 :(得分:1)
绝对没有'唯一的'方法来创建API。
然而,检查客户端的类型绝对不是可行的方法,因为它意味着检查标头,这可以在发送请求时伪造。
对于身份验证,如果您想使用不同的方法,最好的选择可能是采用不同的身份验证策略,并逐个尝试。如果第一次失败,则运行下一次,等等。 实现此目的的常用方法是添加身份验证中间件,该中间件尝试每个可用策略来验证客户端,如果不能,则停止请求。
这确实意味着即使您希望策略A仅适用于浏览器,它也可以用于从移动应用程序登录,但是没有办法阻止它,无论如何它不应该导致任何安全问题。如果是这样,问题可能就在其他地方。