2

APIを提供するCodeIgniter2.0サイトを構築しました。現在、以前のバージョンとの下位互換性がない別のバージョンのAPIを作成する必要があります。これが私がやろうとしていることです:

  1. {root}/application/controllers/api/v1.0/api.phpや/v2.0/api.phpなどのバージョン管理されたAPIコントローラーを作成します...
  2. より高いAPIバージョンが以前のバージョンから継承できるようにするので、必要なメソッドのみをオーバーライドする必要があります

CodeIgniterは、このタイプのフォルダー構造を好まないようです。また、すべてのAPIコントローラーが同じクラス名を持っている場合、サブクラス化できません(つまり、「クラスAPI拡張API」は機能しません)。そうは言っても、「クラスAPI2_0はAPI1_0を拡張します」というように、これを行う必要はありませんが、必要に応じて行います。

ここではURIルーティングが鍵になると思いますが(私はこれについてはあまり理解していません)、誰かがこの思考プロセスをすでに完了している場合は、いくつかのガイダンスをいただければ幸いです。ありがとうございました!!!

-スティーブ

4

2 に答える 2

3

API を構造化しますが、通常はコントローラーなどに関しては次のようにします。

application/controllers/api_1/foo.php
application/controllers/api_2/foo.php

ルートを使用すると、次のことができます。

/api/1/foo
/api/2/foo
于 2011-04-29T15:50:28.267 に答える
0

ロジックを改善する必要があると思います。この回答コード igniter dynamic routingを参照してください。独自のルートを追加できるサイトへのカスタム ルートの追加について。コントローラーに関して言えば、ベスト プラクティスは、すべてのアプリケーション コントローラーの基本的な親となる application/core/ フォルダーに 1 つの MY_Controller を配置することです。次に、MY_Controller クラスを拡張する新しいライブラリを application/libraries/Apiv1_Controller.php に作成します。application/libraries フォルダからクラスを自動的にロードするには、__autoload() 関数が必要になることに注意してください。次に、すべての API バージョン 1 コントローラーが Apiv1_Controller を拡張し、そのメソッドにアクセスできるようになります。バージョン 2 の場合、Apiv1_Controller を拡張する別のライブラリ Apiv2_Controller を作成するだけで、バージョン 2 のコントローラーはこのクラスを拡張します。この方法では、ロジックは 1 つのクラスに残るため、追加のフォルダーを作成する必要はありません。また、カスタム ルートを使用すると、ルートをさまざまなコントローラーにマップできます。これがお役に立てば幸いです。

//API V1 コントローラー
クラス Someapi は Apiv1_Controller を拡張します
{

}

//API V2 コントローラー
クラス Otherapi は Apiv2_Controller を拡張します
{

}
于 2011-04-28T20:00:10.647 に答える