2011-02-10 4 views
1

基本的に私はケーキでAPIを開発しています。後でAPIを簡単にアップグレードできるように、URLにいくつかのバージョンコントロールを入れたいと思います。API用のCakePHPルート

私は単にルート

domain.com/api/1.9/:controller作品という、現時点ではすべての空想のルートを探していませんよ。

私はこれを動作させるのに苦労しています。現時点では単純なリクエストは機能しますが、domain.com/api/1.0/pictures/にPOSTリクエストを送信すると失敗します。

+0

どのようにあなたのルートを定義していますか? – Darren

+0

現時点では、次のもののみです。 Router :: connect( '/ api/1.0 /:controller /:action'、array()); #RESTfulルータaan! Router :: mapResources( 'ratings'); Router :: mapResources( 'pictures');ルータ:: parseExtensions( 'xml'、 'json'); ; – Ezra

+1

'domain.com/api/1.0/picturesへの投稿を送信しますか(*スラッシュ*はありません)? – joeb

答えて

0

ここでは、巧妙なルーティングを使わずにしたいことについて考えていますが、残りの呼び出しURLを少し変更する必要があります。

代わりの

domain.com/api/1.0/pictures/$param1/$param2/$etc 

domain.com/api/pictures/1.0/$param1/$param2/$etc 

を試すには、コントローラに、

class Pictures extends controller { 
    .... 
    function pictures($ver , $param1, $param2, $etc) { 
    switch($ver) { 
     case '1.3': 
     $this->setAction('pictures_1-3', $param1, $param2, $etc); 
     break; 
     case '1.2': 
     $this->setAction('pictures_1-2', $param1, $param2, $etc); 
     break; 
     case '1.1': 
     default: 
     $this->setAction('pictures_1-1', $param1, $param2, $etc); 
     break; 
    } 
    } 

    function pictures_1-3() {} 
    function pictures_1-2() {} 
    function pictures_1-1() {} 
} 
+2

あなたのコントローラーに大量の不要なコードが追加されるようです。これは、複数のAPIを処理するいずれかのコントローラーの仕事であってはなりません。 – joeb

+0

うーん、複数のバージョンのAPIを同時にサポートする必要があるかどうかによって異なります。たとえば、Direct3D APIには、レンダリングコンテキストを作成するDirect3DCreate9関数があります。 Direct3DCreate8、Direct3DCreate7、...などもあります。これらはすべて動作します。あなたが多くの不満を募らせて顧客にAPI変更を指示することができれば(それはFacebookなど)、それは最もクリーンな方法です。同時に複数のものをサポートしなければならない場合は、コントローラにコードが重複しています。コントローラでない場合は、モデル。それはどこかに行かなければなりません。 (神様のC++スタイルのIFDEFは是非!):D – zeroSkillz

+0

@joeb:簡単にその関数の汎用フォームを作成し、それをAppControllerに埋め込むことができます。 –

関連する問題