Giả sử tôi muốn thiết kế một REST api nói về các bài hát, album và nghệ sĩ (thực sự tôi làm, như 1312414 người trước tôi).Cách thức xử lý mối quan hệ hai chiều giữa các tài nguyên
Tài nguyên bài hát luôn được liên kết với album đó là một phần của album. Ngược lại, tài nguyên album được liên kết với tất cả các bài hát chứa trong đó. Các hiệp hội được thể hiện trong các biểu diễn tài nguyên bằng cách liên kết.
Như vậy, cơ quan đại diện sẽ giống như thế này:
{
song: 'xyz',
links: [
{ rel: 'album', url: '.../albums/abc' }
]
}
{
album: 'abc',
links: [
{ rel: 'song', url: '.../songs/xyz' },
{ rel: 'song', url: '...' },
{ rel: 'song', url: '...' },
{ rel: 'song', url: '...' }
]
}
Given, mà tôi muốn điều này chứng minh chân lý (có lẽ vấn đề nằm ở chỗ "Do"), làm thế nào sau đó để tôi thiết kế API của tôi , sao cho việc tạo một album hoặc tài nguyên bài hát không có tác dụng phụ trên tài nguyên album hoặc bài hát hiện có trước đó?
Đây là một số vấn đề về gà/trứng. Nếu tôi tạo tài nguyên bài hát trước (POST/songs /) và sau đó tạo tài nguyên album (POST/albums /), tài nguyên bài hát sẽ được sửa đổi như một phần của quá trình tạo album (điều này không đúng theo nguyên tắc REST), vì liên kết giữa hai tài nguyên đang được cập nhật trên máy chủ. Tương tự như vậy đối với kịch bản mà tôi tạo album đầu tiên, bài hát thứ hai.
Tôi đoán tôi có thể tránh toàn bộ vấn đề bằng cách tránh tác dụng phụ trên máy chủ và vượt qua gánh nặng quản lý các mối quan hệ hai chiều với khách hàng.
Ngoài ra, tôi không muốn tạo album và bài hát về nguyên tử như một tổng thể. Điều duy nhất tôi có thể nghĩ đến ngay bây giờ, là bao gồm các tác dụng phụ nói trên trong ngữ nghĩa của API của tôi bằng cách trả lời một tạo tài nguyên với một đại diện có chứa một danh sách các liên kết đến các tài nguyên đã được sửa đổi như là một kết quả của yêu cầu. Điều đó làm cho tác dụng phụ rõ ràng, nhưng vẫn không yên tĩnh.
tạo một bài hát, nếu nó có một trường album và album không tồn tại, hãy tạo album. tạo một album, nếu nó có bài hát không tồn tại, hãy tạo bài hát. – zzzzBov
Một cách để xem nó là mỗi album và bài hát là một tài nguyên được đóng gói và các liên kết chỉ là biểu đồ kết nối chúng với nhau. Việc thay đổi các liên kết sẽ thay đổi mối quan hệ giữa các nguồn tài nguyên nhưng các nguồn tài nguyên không thực sự thay đổi. – abraham
"tài nguyên bài hát được sửa đổi như là một phần của việc tạo album (điều này có hại theo nguyên tắc REST)" Nguyên tắc nào là? bạn có thể cung cấp một liên kết? Theo kinh nghiệm của tôi, việc cập nhật tài nguyên có tác dụng phụ trên các tài nguyên khác, mọi lúc. –