あなたの質問に基づいて、/user へのルートを持つ ApiOne と /user へのルートを持つ ApiTwo を持っていると思いますか?
問題は、それらが異なるルートではないことです。ZF2 は、結合された構成ファイルで最後に定義されたものを使用します (私は信じています)。両方の API リソースを使用できるようにする場合は、何らかの方法で別のルートを用意する必要があります。これは文字通り、そのうちの 1 つを のようなものに変更する可能性があります/user1
。
エンティティを識別可能にする ID に制約を指定すると、理論的にはエンティティの 2 つの異なるエンドポイントにルーティングすることもできます。つまり、次のような両方のルートを持つことができます。
/api/user[/:user_id]
/api/user[/:user_name]
ZF2 ルーターに関する限り、この時点では、これらのルートは同一です。可変部分の user_id と user_name は同じものである可能性があります。
ただし、ルートを異なるものにする何かが必要になります。敏捷性 (および ZF2) により、URL の一部に対する制約が可能になります。したがって、user_id に [0-9]+ の制約を、user_name に [az]+ の制約を設定できます。これらにより、ルートはエンティティに対して相互に排他的になりますが、ルートのコレクション バージョンは同じままです。
制約は、次のようにオプションの下のルートに追加されます。
'router' => array(
'routes' => array(
'your-api.rest.user' => array(
'type' => 'Segment',
'options' => array(
'route' => '/user[/:user_id]',
'defaults' => array(
'controller' => 'YourApi\\V1\\Rest\\User\\Controller',
),
'constraints' => array(
**'user_id' => '[0-9]+'**,
),
),
),
'your-api.rest.username' => array(
'type' => 'Segment',
'options' => array(
'route' => '/user[/:user_name]',
'defaults' => array(
'controller' => 'YourApi\\V1\\Rest\\Username\\Controller',
),
'constraints' => array(
**'user_name' => '[a-z]+'**,
),
),
),
),
),
)
この例では、user_id または user_name が指定されていない場合、最後に定義されている Username リソースを呼び出す必要があります。
ただし、全体として、ルートを変更して異なるものにすることをお勧めします。バージョン付きの受け入れヘッダーは、基本的にバージョン管理に使用され、別の API リソースにルーティングされません。