0

プッシュ状態と RESTful バックエンドを使用する 1 ページのアプリを考えると、リソースのリスト/resourceName(つまり/users) にアクセスすることを想像できます。したがって、 /users はフォーマットされたユーザーのリストを作成します

ここでの問題は、このリソースの JSON または XML フィードも にマップする必要があること/resourceNameです。そのため、アプリケーションのエントリ ポイントから起動すると、JS ルーター/に移動すると、JSON データを取得する Ajax 呼び出しがトリガーされる可能性があります。/users問題は、URL が直接指している場合/users、実際のリストではなく JSON フィードに到達することです。すべての呼び出しをメイン エントリ ポイントにルーティングしてから、JS ルーターに作業を任せることができますが、そうすると、JSON をフェッチするための AJAX 呼び出しがブレーキをかけます。

少し前.jsonに、json リクエストに追加したり、GET パラメータ?format=jsonを追加したりして、コントローラーにさまざまなアクションを実行させていたことを覚えています。私はそれがややハックだと思います..これについて他の方法はありますか?

さらに言えば、私はlaravel4バックエンドとbackboneJSを使用しています

4

4 に答える 4

1

異なる応答を得るためにどの方法を使用するかは、それをどのように行いたいかによって異なります。あなたは独断的なトピックについて質問しているので (正解は 1 つではありません)、検討できるいくつかのオプションがあります。

まず、API 設計に関する Apigee からの良い読み物を次に示します。「複数フォーマットのサポート」の 20 ページを参照してください。

  1. Rails の方法: リクエストの末尾に .json、.xml、またはその他の拡張子を追加し、Laravel 内でそのコードを処理します (「before」フィルターを使用して、リクエストまたは Laravel の優れたルート パラメーターを確認することをお勧めします。正規表現を使用してルートを定義します)。
  2. リクエストの「accept」ヘッダーを確認し、ajax 呼び出しでそのヘッダーをデフォルトの「application/html」ではなく「application/json」に設定して、応答で使用する形式をアプリケーションに通知できます。繰り返しますが、前または後のフィルタは、リクエストをチェックし、適切にレスポンスを定義するのに便利です。
  3. クエリ文字列 `?format=json" などを作成します。ポイント 1 と同じコメント。

Laravel には、応答を変更する組み込みメソッドがありません。ただし、何を求められているかをかなり簡単に検出して、どの形式で返すかを選択することはできます。ただし、それをどのように達成したいかについて考える必要があります。

私の頭の上からいくつかのオプション:

  1. 「前」または「後」フィルターを使用して、リクエストがフォーマットに対して「望んでいる」ものを確認し、応答に対していくつかの変換を行ってそれを機能させます
  2. リクエストとレスポンス クラスを拡張して、これを「自動化」します (フォーマットを検出するリクエスト クラス、レスポンスを正しいフォーマットに変換するレスポンス クラス)。

それが役立つことを願っています

于 2013-08-26T19:45:08.060 に答える
1

.jsonリクエストの最後に が最善のアプローチだと思います。もう 1 つのアプローチは、API リクエストapi.mydomain.comwww.mydomain.com

于 2013-08-26T15:41:55.523 に答える
0

@Aaron Saundersが提案したように、最終的に別のエンドポイントを使用しました。laravel 4 では、これはグループ ルートを使用して簡単に実装できます。

app.php:

'domain' => 'whatever.dev',

ルート.php:

define('APP_DOMAIN', 'app.' . Config::get('app.domain'));
define('API_DOMAIN', 'api.' . Config::get('app.domain'));

Route::group(array('domain' => API_DOMAIN), function()
{
    // API ROUTES
});


Route::group(array('domain' => APP_DOMAIN), function()
{
    // VIEW ROUTES
});

美しい!

于 2013-08-27T02:52:21.627 に答える