我正试图用我的头脑来理解所有这些“以api为中心”的概念,不知何故,由于种种原因(在颠倒过来之后),我自己找不到答案,所以我希望你能帮助我:)
在这里,作为个人项目的一部分,我需要创建一个类似于社交应用网站的东西,我说“喜欢”,因为这只是一个小项目,没有什么太花哨的。
我的想法是我创建一个rest服务,比如说http://api.domain.com/v1/和所有需要的资源方法(create/delete/update/read)。
现在,在创建此服务之后,我需要创建我的网站,比如http://www.domain.com/,并且此网站将与我的api.domain.com通信,以便执行每个操作。如果新用户注册了,则将数据发送到api服务器,对其进行处理,并返回答案等。
然后,在网站创建之后,我计划使用phonegap为iphone和android创建一个本地应用程序。这些移动应用程序,基本上就像我的网站一样,连接到api服务器并执行各种操作。
如果不涉及授权,这非常简单,因此任何知道api端点的人都可以管理所有资源,正如您所猜测的,我不想要这样做,所以我必须实现某种授权机制,我不确定使用什么。
我正在考虑实现oauth2,以便我的api充当oauth提供者,然后我的网站/移动应用程序将连接到该api,获得授权,然后完成它们的工作。
你觉得这是个好办法吗?
接下来,假设我坚持使用oauth,一切正常,如果我想让我的用户有机会创建他们自己的应用程序来访问其他用户/或他们自己的数据(基本上我有一个公共api,为什么不利用它),那么安装该应用程序的用户需要批准它才能访问他的信息。我知道oauth可以做到这一点(因为facebook/twitter/others可以做到),问题是,我如何区分简单的用户创建的应用程序和我自己的应用程序(比如网站和移动应用程序)?这种分离是否可以通过在请求许可时提供各种“范围”来实现?
如果没有,我应该使用什么其他方法?
我对oauth没有太多经验,所以可能有些问题有点错,希望你能理解我的问题。
如果有帮助,我将使用php 5.4和yii框架、apache 2(mod ssl可用)、mysql。
谢谢:)
最佳答案
yii提供cwebservice(soap),您可以使用它,或者创建自己的rest api。
我自己创建了一个api,就像你想做的那样。
为了安全起见,我使用api用户名和api密码使用cuseridenty登录:
if (Yii::app()->apiuser->isGuest) {
if (!empty($_POST['apiUser']) && !empty($_POST['apiPassword'])) {
$identity = new ApiUserIdentity($_POST['apiUser'],$_POST['apiPassword']);
$identity->authenticate();
if($identity->errorCode===ApiUserIdentity::ERROR_NONE)
{
Yii::app()->apiuser->login($identity); // Login for 30 minutes
$responseData['success'] = 1;
$responseData['sessionId'] = Yii::app()->session->sessionID;
} else {
$responseData['error'] = 'Incorrect username and/or password';
}
}
}
post数据来自它使用api的应用程序。sessionid被传递回应用程序,因此不需要下次登录。如果使用curl发出api请求,可以使用以下命令将会话id发送回下一个api请求:
$strCookie = "PHPSESSID=".$sessionId."; path=/";
// Set the COOKIE files
curl_setopt($ch, CURLOPT_COOKIESESSION, true );
curl_setopt($ch, CURLOPT_COOKIE, $strCookie);
这样,每次下一个请求都会维护会话。