Tôi đang trong quá trình tạo API REST và hiện tại, tôi đang gặp phải sự cố sau:
- Foolà tài nguyên đầu tiên. Hoạt động CRUD có thể được áp dụng thông qua- /foo/URI.
- Barlà tài nguyên thứ hai. Hoạt động CRUD có thể được áp dụng thông qua- /bar/URI.
- Mỗi Foođược liên kết với không hoặc mộtBar. Lý do tại sao tôi không coiBarlà nguồn cung cấp phụFoolà bởi vì cùng mộtBartrường hợp có thể được chia sẻ giữaFoocác môn sinh. Vì vậy, tôi nghĩ rằng tốt hơn là truy cập nó thông qua một URI độc lập thay vì/foo/[id]/bar.
Vấn đề của tôi là trong một số lượng đáng kể các trường hợp, khách hàng yêu cầu một Fooví dụ cũng quan tâm đến Bartrường hợp liên quan . Hiện tại, điều này có nghĩa là họ phải thực hiện hai truy vấn thay vì một truy vấn. Tôi muốn giới thiệu một cách cho phép nhận cả hai đối tượng với một truy vấn duy nhất, nhưng tôi không biết cách mô hình hóa API để thực hiện điều đó. Những gì tôi đã đưa ra cho đến nay:
- Tôi có thể giới thiệu một tham số truy vấn tương tự như sau : /foo/[id]?include_bar=true. Vấn đề với cách tiếp cận này là biểu diễn tài nguyên (ví dụ cấu trúc JSON) của phản hồi sẽ cần trông khác nhau (ví dụ: một thùng chứa{ foo: ..., bar: ... }thay vì chỉ là một chuỗiFoo), làm choFoođiểm cuối tài nguyên trở nên "không đồng nhất". Tôi không nghĩ đó là một điều tốt. Khi truy vấn/foo, khách hàng phải luôn có cùng biểu diễn tài nguyên (cấu trúc), bất kể tham số truy vấn.
- Một ý tưởng khác là giới thiệu một điểm cuối chỉ đọc mới, ví dụ /fooandbar/[foo-id]. Trong trường hợp này, không có vấn đề gì khi trả về một đại diện như thế{ foo: ..., bar: ... }, bởi vì đó chỉ là đại diện "chính thức" củafooandbartài nguyên. Tuy nhiên, tôi không biết liệu điểm cuối của người trợ giúp như vậy có thực sự RESTful không (đây là lý do tại sao tôi viết "có thể" trong tiêu đề của câu hỏi. Tất nhiên là về mặt kỹ thuật có thể, nhưng tôi không biết liệu đó có phải là ý hay không).
Bạn nghĩ sao? Có khả năng nào khác không?
Barkhông thể tồn tại mà không được liên kết với a Foo. Tuy nhiên, như tôi đã viết ở trên, có thể nhiều người Foochia sẻ giống nhau Bar. Có thể tạo ra Foomà không có Barliên kết, vì vậy tôi không nghĩ Barnên được coi là cha mẹ.