Как управлять отношениями «многие ко многим» в RESTful API?

Представьте, что у вас есть 2 объекта, Player и Team , где игроки могут быть в нескольких командах. В моей модели данных у меня есть таблица для каждой сущности и таблица соединений для поддержания отношений. Hibernate прекрасно справляется с этим, но как я могу раскрыть эту взаимосвязь в RESTful API?

Я могу придумать пару способов. Во-первых, я могу сделать так, чтобы каждая сущность содержала список других, поэтому у объекта Player будет список команд, которым он принадлежит, а у каждого объекта Team будет список принадлежащих ему игроков. Итак, чтобы добавить игрока в команду, вы должны просто отправить представление игрока в конечную точку, например, 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'
}

Другой способ, который я могу придумать для этого, - это раскрыть отношения как самостоятельный ресурс. Итак, чтобы увидеть список всех игроков в данной команде, вы можете выполнить GET / playerteam / team / {id} или что-то в этом роде и получить обратно список объектов PlayerTeam. Чтобы добавить игрока в команду, выполните POST / playerteam с соответствующим образом созданным объектом PlayerTeam в качестве полезной нагрузки.

/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'        
]

Что для этого лучше всего?

275
задан Boris Burkov 22 November 2015 в 23:04
поделиться