1

Zend Framework 1.12.3 を使用して API を開発しています。Zend_Rest_Route を使用していますが、階層 URL が必要です。

特定の科目を特定の教授に割り当てる必要があるため、このアプローチの使用を検討していますが、このスキーマがそれをうまく解決すると信じています。

しかし、階層 URL を実現するのに苦労しています。私はすでに試しました:

  1. Zend_Controller_Router_Route はチェーン付きで、config .ini ファイルにありますが、コントローラーとアクションの両方を指定する必要があるため、http://api.example.com/professors/:professorId/subjectsにアクセスすると、常に同じアクションを指していました (つまり、呼び出し方法が何であれ (POST、PUT、GET、DELETE)、config .ini ファイルで指定されたアクションを常に指していました)。たとえば、構成ファイルで getAction を指定した場合、チェーンを使用すると、使用したメソッドに関係なく、常に getAction が呼び出されます。現在、POST 呼び出しを行うと、実際には postAction() が呼び出されます (同様に、PUT、GET、DELETE、PATCH、HEAD、および OPTIONS についても発生します)。私のコントローラーファイルは次のようになります。

    class V1_ProfessorsController extends REST_Controller
    {
            public function optionsAction()
            {
                    // code goes here
            }
    
            public function headAction()
            {
                    // code goes here
            }
    
            public function indexAction()
            {
                    // code goes here - list of resources
            }
    
            public function getAction()
            {
                    // code goes here
            }
    
            public function postAction()
            {
                    // code goes here
            }
    
            public function putAction()
            {
                    // code goes here
            }
    
            public function patchAction()
            {
                    // code goes here
            }
    
            public function deleteAction()
            {
                    // code goes here
            }
    
    }
    
  2. Zend_Rest_Route をサブクラス化し、ここで指摘されているように match() 関数をオーバーライドします。問題は、これは を呼び出すときに機能しますが、 を呼び出すhttp://api.example.com/professors/:professorId/subjectsときに使用されるものと同じ ProfessorsController を引き続き使用するということhttp://api.example.com/professorsです。これについてはよくわかりませんが、独自のコントローラー (ProfessorsSubjectsController など) を用意するのが最善だと思います。

また、質問があります。階層ルートはどのように機能する必要がありますか? リソース/サブリソースごとに異なるコントローラーを用意したほうがよいでしょうか? たとえば、ProfessorsControllerhttp://api.example.com/professors/:professorIdと ProfessorsSubjectsControllerを持っていhttp://api.example.com/professors/:professorId/subjects/:subjectIdますか?

4

1 に答える 1