1

私はAPIプログラミングの世界に不慣れで、現在作業中のサイドプロジェクトが少しあり、執筆中に学習しているので、我慢してください。

複数の異なる関数にAPIを実装するための最良の方法がわかりません。現時点では、実行するテストスクリプトと、/ apiの下にあるものをこのスクリプトにリダイレクトするApacheリダイレクトがあります。これをTestAPI.phpと呼びます(したがって、/ api / anythingはリダイレクトします)。APIのパス変数をスクリプトに渡します(その例では、パスは「anything」になります)。

現時点では、パスに基づいてデータを検索し、最終的にPUT / DELETEなどで更新および削除するという1つの目的で作成しています(restFULではなくrestISHです)。これは、すべてがこのスクリプトにリダイレクトされる時点では問題ありませんが、2つの異なる関数が必要な場合はどうでしょうか。では、別のデータセットを検索したいですか?したがって、たとえば、/ api / data1は最初のセットに移動し、/ api/data2は2番目のセットに移動します。これは私が確信が持てなくなるところです。

/ api/data1と/api/ data2が同じ場所にリダイレクトされるように(したがって、そこで404のようなエラーを処理するように)成長する1つのメガスクリプトがあるだけですか?または、/ api/data1と/api/ data2のスクリプトがあり、それぞれに個別のリダイレクトがあり、次に404の汎用キャッチオールがあります(404のHTMLではなくJSON / XMLを常に返したいので、少なくとも必要ですAcceptヘッダーに基づいて返すロジック)。

3番目のオプションとして、すべてをキャッチしてからサブコンポーネントを呼び出す、ある種の最前線のコントローラーがありますか?したがって、/ apiの下にあるものすべてにリダイレクトされる1つのスクリプトは、必要なコンポーネント、または無効なパスの場合は404を呼び出します。これは私にはそれを行うための最良の方法のように思えますが、私にはその方法がわかりません。そのスクリプトだけが呼び出すことができるサイトのセクションがありますか、それともフロントラインコントローラーからバックエンドAPIセクションにcURLを使用しますか(POST / PUTデータを渡す必要があるため、使用する必要があると思います) cURL、他の方法はありますか?)これはApacheでどのように最適に実装されますか?

4

1 に答える 1

1

はい、フロントコントローラーを使用しています。フロントコントローラーは、/ apiがリクエストを処理した後、最初のように規則を使用できます。

/ api / firstprocessor / method1

/ api / firstprocessor / method2

/ api / secondprocessor / method14

この動作の例については、Zend_Frameworkを確認するか、次のような単純なものにすることができます。

$name = 'Script_' . $this->generateCommandName($request->getPathVariable(1));
$this->executeScript($name, $request);

public function executeScript($class, Request $request) {
    if (file_exists("scripts/".$class.'.php')) {

        //include the script
    require_once "scripts/".$class.'.php';

    //execute the script
    $command = new $class;
    $command->execute($request);
    }
}

次に、すべてのスクリプトには、$requestを使用して$_GETまたは$_POST変数を取得するexecuteメソッドがあります。

于 2013-03-01T00:35:08.357 に答える