3

私はこのすべての「API中心」の概念に頭を悩ませようとしていますが、どういうわけか、さまざまな理由で(SOを逆さまにした後)、自分で答えを見つけることができないので、あなたが私を助けてくれることを願っています:)

これは、個人的なプロジェクトの一環として、ソーシャル アプリケーション Web サイトのようなものを作成する必要がある場合です。「いいね」と言うのは、それが単なる小さなプロジェクトであり、派手すぎるものではないためです。

私が念頭に置いている考えは、リソースに必要なすべてのメソッド (作成/削除/更新/読み取り) を使用して http://api.domain.com/v1/のような残りのサービスを作成することです。

このサービスが作成された後、 http://www.domain.com/などの Web サイトを作成する必要があります。この Web サイトは、アクションごとに api.domain.com と通信します。新しいユーザーが登録すると、データを api サーバーに送信し、処理し、回答を返します。

それから、ウェブサイトが作成された後、phonegap を使用して iphone と android のネイティブ アプリケーションを作成する予定です。これらのモバイル アプリケーションは、基本的に私の Web サイトと同じように動作し、API サーバーに接続してさまざまなアクションを実行します。

これは、承認が含まれていない場合は非常に簡単です。そのため、API エンドポイントを知っている人なら誰でもすべてのリソースを管理できます。ご想像のとおり、私は望んでいないので、何らかの承認メカニズムを実装する必要があります。何を使うべきかよくわかりません。私のAPIがoauthプロバイダーとして機能するようにOAuth2を実装することを考えています。その後、私のWebサイト/モバイルアプリはAPIに接続し、承認されてから仕事をします。これは良いアプローチですか、何か考えはありますか?

次に、私が oauth に固執し、すべてが正常に機能するとしましょう。他のユーザー/または自分のデータに関する情報にアクセスするための独自のアプリを作成する機会をユーザーに提供したい場合はどうでしょうか (基本的に私はパブリック API を持っています。それを利用して)、アプリをインストールするユーザーは、自分の情報にアクセスするためにアプリを承認する必要があります。私はこれがoauthで可能であることを知っています(facebook/twitter/othersがそれを行うので)、問題は、単純なユーザー作成アプリと自分のアプリ(ウェブサイトやモバイルアプリなど)をどのように区別するのですか? この分離は、許可を要求するときにさまざまな「スコープ」を提供することで実行できますか? そうでない場合、他にどのようなアプローチを使用する必要がありますか?

私は oauth の経験があまりないので、いくつかの質問が少し間違っているかもしれません。問題の要点を理解していただければ幸いです。

それが役に立ったら、Yii フレームワーク、Apache 2 (mod ssl が利用可能)、MySQL で PHP 5.4 を使用します。

ありがとう :)

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 に答える