PlayerとTeamの 2つのエンティティがあり、プレーヤーが複数のチームに所属しているとします。私のデータモデルでは、各エンティティのテーブルと、関係を維持するための結合テーブルがあります。Hibernateはこれをうまく処理できますが、この関係をRESTful APIでどのように公開できますか?
いくつかの方法を考えることができます。最初に、各エンティティに他のエンティティのリストを含めることができるため、Playerオブジェクトには所属するチームのリストがあり、各チームオブジェクトには所属するプレーヤーのリストがあります。そのため、プレーヤーをチームに追加するには、プレーヤーの表現をエンドポイントにPOSTします。たとえば、POST /player
やPOSTのよう/team
に、リクエストのペイロードとして適切なオブジェクトを指定します。これは私にとって最も「RESTful」なようですが、少し変な感じがします。
/api/team/0:
{
name: 'Boston Celtics',
logo: '/img/Celtics.png',
players: [
'/api/player/20',
'/api/player/5',
'/api/player/34'
]
}
/api/player/20:
{
pk: 20,
name: 'Ray Allen',
birth: '1975-07-20T02:00:00Z',
team: '/api/team/0'
}
これを行うために私が考えることができるもう1つの方法は、それ自体がリソースとして関係を公開することです。そのため、特定のチームのすべてのプレーヤーのリストを表示するには、GET /playerteam/team/{id}
などを実行して、PlayerTeamエンティティのリストを取得します。プレーヤーをチームに追加するに/playerteam
は、適切にビルドされたPlayerTeamエンティティをペイロードとしてPOST します。
/api/team/0:
{
name: 'Boston Celtics',
logo: '/img/Celtics.png'
}
/api/player/20:
{
pk: 20,
name: 'Ray Allen',
birth: '1975-07-20T02:00:00Z',
team: '/api/team/0'
}
/api/player/team/0/:
[
'/api/player/20',
'/api/player/5',
'/api/player/34'
]
これのベストプラクティスは何ですか?