0

ネイティブ サイト (メイン Web アプリ) と非ネイティブ (iPhone、BB、WAP などのアプリ) に REST API ベースのアーキテクチャを使用するアーキテクチャ (MVC = PHP->Yii) を使用する予定です。

View-Controller (HTML+User Requests) (メイン サイト用) と Controller-Model (Request/Response+DB) (API 用) を使用することをお勧めします。非ネイティブ アプリには同じ API プラットフォームを使用します。または、メイン サイトに完全な MVC を使用し、API 用に別のプラットフォームを構築する必要があります。これは、メイン サイトに追加の HTTP (cURL) オーバーヘッドを加えたくないためです。

更新: @karmakaze それは私と一緒ですが、多くのコードが含まれているため、RestControllers を作成する必要があります。とにかく、2つの異なるコントローラーを持つことになります。

UserController extends CController {
    actionRegister() {
        ...Some calculations
        .
        .
        Instead of making Calls to model We will use call controller i.e.
        $userRest = new UserRestController();
        /*
         * This will return json data or php obj depending on params passed or
         * may raise an exception
         */
        $userRest->actionCreate($param1, $param2);
        // Process data obtained.
    }
}

または他の方法はありますか?

4

3 に答える 3

1

必要に応じて、 AngularJsBackBone.JS、またはその他のMVC JavaScript ライブラリなどの JavaScript ライブラリに基づいてフロントエンドを構築できます。

このようにして、アプリのバックエンドとして Yii で RESTful API を 1 つだけ構築する必要があります。

ただし、このソリューションでは何かが明らかになります。アプリケーションをクロール可能にするのは難しいでしょう。

質問の観点から、サーバー側で HTML をレンダリングすることが比較的重要であることがわかりました。私はこの解決策を考えています:

  1. コントローラーとビューを含む通常の MVC アプリを作成する
  2. 次の目盛りのいずれかを使用します。

    • デフォルトではGETパラメーターですが、API 呼び出しの場合は次のようになります。falseture

この例を確認してください:

// in a controller:
public function actionView($id, $api=false) {
    // some calculations, getting the $model variable
    if ($api) {
        echo $model->json_output(); // you can implement it in components/model.php or generate the json output some other way
    } else {
        render('view', array('model'=>$model));
    }
}
  • たとえば、apiと呼ばれるサブドメイン(api.yourapp.tld があります)、
  • または、リクエストの別の HTTP パラメータを使用して、それが API 呼び出しであるかどうかを判断します。

これらのバージョンのいずれも、クライアントが JSON/XML 応答 (API 呼び出し) または HTML をブラウザーに要求するかどうかを確認する方法を提供します。

このようにして、API とメイン サイト用に別々のコントローラーを作成するという頭痛の種を回避できます。

アクションがフォームをレンダリングするだけの場合は、アクションに対してこのトリックを行う必要はありません。これは役に立ちません

注 2後者の方法を使用してリクエストをレンダリングし、指定され_request_fragmentていない限り、すべてのリクエストが API 呼び出しであると想定でき$_GET['_request_fragment']ます。このように、AngularJsBlackbone.jsアプリを Yii でクロール可能にすることができます。

UPDATEはここで_request_fragment指定さ、ほとんどの検索エンジンで AJAX Web アプリケーションをクロールするために使用されます。

于 2012-07-21T16:50:07.697 に答える
0

ネイティブ アプリと非ネイティブ アプリの両方に同じものを使用できます。また、開発時の作業を減らし、ロジックを更新または変更することもできます....私はそのような状況で非常に多くの経験を持っています..

于 2012-07-19T11:09:15.373 に答える
0

メイン Web アプリに完全な MVC を使用し、同じモデルとコントローラーを再利用して REST API を構築します。メインの Web アプリを構築する際に Yii の慣例に従えば、これを自動的に行う拡張機能があります。Yii extensionsで REST を検索するだけです。モバイルアプリについても同じことを行います。現在 RESTFullYii を調査中です。

于 2012-07-20T02:58:18.303 に答える