php - 创建一个以 API 为中心的应用程序,我自己的疑惑

标签 php mysql api oauth yii

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

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

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

现在,创建此服务后,我需要创建我的网站,比如 http://www.domain.com/并且该网站将针对其执行的每个操作与我的 api.domain.com 进行通信。如果有新用户注册,将数据发送到 api 服务器,处理它,返回一个答案等等。

然后,在创建网站后,我打算使用 phonegap 创建一个适用于 iphone 和 android 的 native 应用程序。这些移动应用程序基本上就像我的网站一样,连接到 api 服务器并执行各种操作。

如果不涉及授权,这非常简单,所以任何知道 api 端点的人都可以管理所有资源,正如你所猜测的那样,我不想要,所以我必须实现某种授权机制,我不太确定要使用什么。 我正在考虑实现 OAuth2,以便我的 api 充当 oauth 提供者,然后我的网站/移动应用程序将连接到 api,获得授权,然后完成他们的工作。 这是一个好方法,有什么想法吗?

接下来,假设我坚持使用 oauth 并且一切正常,如果我想让我的用户有机会创建他们自己的应用程序来访问有关其他用户/或他们自己的数据的信息(基本上我有一个公共(public) api ,为什么不利用它),那么安装该应用程序的用户将需要批准它才能访问他的信息。我知道这可以通过 oauth(因为 facebook/twitter/其他人这样做),问题是,我如何区分简单的用户创建的应用程序和我自己的应用程序(如网站和移动应用程序)?这种分离是否可以通过在请求权限时提供各种“范围”来实现? 如果不是,我应该使用什么其他方法?

我对 oauth 不是很有经验,所以可能有些问题有点不对,希望你能理解我的问题。

如果有帮助,我将使用 PHP 5.4 和 Yii 框架、Apache 2(mod ssl 可用)、MySQL。

谢谢:)

最佳答案

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 请求,您可以使用以下方法将 session ID 发送回下一个 api 请求:

$strCookie = "PHPSESSID=".$sessionId."; path=/";
// Set the COOKIE files
curl_setopt($ch, CURLOPT_COOKIESESSION, true );
curl_setopt($ch, CURLOPT_COOKIE, $strCookie);

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

关于php - 创建一个以 API 为中心的应用程序,我自己的疑惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15950482/

相关文章:

ruby-on-rails - Rails Controller 中的 CORS 在 before_filter 或 after_filter 中?

c# - 如何使用视频 URL 获取 Youtube 视频(获取持续时间、发布日期等数据)? C#

javascript - 区分 Imgur 图库中的相册和图像

javascript - AJAX Post 的奇怪 Javascript/PHP 行为

php - Twig 中的 "While"和 "repeat"循环

php - 使用 Update CONCAT 将数据添加到数据库中已有的数据

c# - 如何检查状态并决定执行代码的哪一部分

mysql - 什么是更好的方法 "mysql on VM GCE"与 Google SQL Cloud

mysql - 将 MySQL 子查询重写为 join

javascript - 单击按钮时仅显示 $(this) 行表格数据