3

我试图围绕所有这些“以 api 为中心”的概念进行思考,不知何故,由于各种原因(在颠倒过来之后)我无法自己找到答案,所以我希望你能帮助我:)

在这里,作为个人项目的一部分,我需要创建一个类似社交应用程序网站的东西,我说“喜欢”,因为它只是一个小项目,没什么花哨的。

我的想法是我创建一个休息服务,比如http://api.domain.com/v1/以及所有需要的资源方法(创建/删除/更新/读取)。

现在,在创建此服务之后,我需要创建我的网站,例如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。

谢谢 :)

4

1 回答 1

0

Yii 提供 CWebService (SOAP),你可以使用它,或者创建你自己的 REST API。

我自己创建了一个 API,就像你想做的那样。

为了安全起见,我使用 CUserIdentity 使用 api 用户名和 api 密码登录:

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);

这样,每次下一个请求都会维护会话。

于 2013-08-29T10:20:19.307 回答