1

私はこのテーマについてしばらく探しましたが、この特定の質問の邪魔になるものはあまりないようです。私は自分の質問に答えると思う数百の中から1つの答えを見つけましたが、その点を確認したいと思います。私の質問は、REST URIサーバー側を処理するための最良かつ最も一般的な方法は何ですか?

詳細に説明すると、URI(www.example.com/resources/resourceID)がある場合、それを処理して適切な場所に転送するために.htaccessファイルを設定する必要があることを知っています。URIを解析してリクエストを特定のクラスに送信するPHPディスパッチャー(つまり、すべてのHTTPメソッドとコンシューマーが使用できるすべての可能なリクエストの組み合わせを処理する巨大なswitchステートメント)を使用する方がクリーンかどうかはわかりません。 .htaccessにそれらを解析させる。つまり、.htaccessファイルを使用してサンプルURIをルーティングしてrestHandler.phpと言うか、正規表現で解析して「Resources」というクラスに移動しますか。

これは私自身の質問に答えるかもしれませんが、.htaccessメソッドに関する私の問題は、www.example.com / resources1 / resource1ID / resources2 / resource2IDのようなものが、適切なファイルに送信する正規表現でキャプチャするのが難しいということです。 PHPのハンドラーに傾倒します。しかし、私が許可するそれぞれの可能な組み合わせを処理するための大きな'ol switch / ifelseステートメントがあることは、私にはまだきれいに思えません。これは本当に最もクリーンな方法ですか?

4

2 に答える 2

1

最善の解決策は、2つの組み合わせです。パーツ.htaccess全体をキャプチャ/resources1/resource1ID/resources2/resource2IDし、固定のエントリポイントにリダイレクトするために使用します。ここで、これはパラメータとして渡されます。

example.com/dispatch.php?route=/resources1/resource1ID/resources2/resource2ID

次に、PHPコードは、実行時に収集できる情報(リフレクションなど)を含め、必要なだけ豊富な情報を利用して、この情報をどのように処理するかを決定できます。通常、このディスパッチャーは、ある種のルーティング¹を使用して、呼び出すコントローラーとアクションを決定し、次にある種のパラメーターバインディング²を使用して、適切なパラメーターを使用してそのアクションを呼び出します。

それは巨大な声明を通して行うこともできますがswitch、それはおそらく最良の考えではありません。;-)


¹ルーティング:URLパターンをコントローラーアクションにマッピングします。ASP.NETに適用できる関連資料は次のとおりですが、概念はすべてのMVCフレームワークに共通です。

²バインディング:URLに存在するパラメーターが、コントローラーアクションを実装するメソッドの正式なパラメーターにどのようにマップされるかを把握する

于 2012-06-26T13:13:00.560 に答える
0

.htaccessを使用して、URIを分析するPHPルーターへのすべてのリクエストを書き換え、PHPの自動読み込みを使用して適切なコントローラーを読み込みます(URIの残りのRESTful部分を渡します)。次に、各コントローラーは、URI内の他のアクション/パラメーターを決定する責任があります。

まだ汚れていますが、細かく砕かれています。

于 2012-06-26T13:12:20.583 に答える