Hãy tưởng tượng bạn có 2 thực thể, Người chơi và Đội , nơi người chơi có thể ở nhiều đội. Trong mô hình dữ liệu của tôi, tôi có một bảng cho mỗi thực thể và bảng tham gia để duy trì các mối quan hệ. Hibernate xử lý việc này tốt, nhưng làm cách nào tôi có thể phơi bày mối quan hệ này trong API RESTful?
Tôi có thể nghĩ ra một vài cách. Đầu tiên, tôi có thể có mỗi thực thể chứa một danh sách các đối tượng khác, vì vậy một đối tượng Người chơi sẽ có một danh sách các Đội mà nó thuộc về và mỗi đối tượng Đội sẽ có một danh sách Người chơi thuộc về nó. Vì vậy, để thêm Người chơi vào Nhóm, bạn chỉ cần POST đại diện của người chơi vào điểm cuối, giống như POST /player
hoặc POST /team
với đối tượng thích hợp làm trọng tải của yêu cầu. Điều này có vẻ "RESTful" nhất đối với tôi nhưng cảm thấy hơi kỳ lạ.
/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'
}
Một cách khác mà tôi có thể nghĩ để làm điều này sẽ là phơi bày mối quan hệ như một nguồn tài nguyên theo đúng nghĩa của nó. Vì vậy, để xem danh sách tất cả người chơi trong một đội nhất định, bạn có thể thực hiện NHẬN /playerteam/team/{id}
hoặc một cái gì đó tương tự và lấy lại danh sách các thực thể PlayerTeam. Để thêm người chơi vào một nhóm, POST /playerteam
với thực thể PlayerTeam được xây dựng phù hợp làm trọng tải.
/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'
]
Thực hành tốt nhất cho việc này là gì?