2016-10-21 14 views
6

Tôi muốn xác định những điều sau đây truy vấnCác trường GraphQL có hỗ trợ đa hình dựa trên các đối số được truyền vào không?

{ 
// return all individuals 
individuals { 
    id 
    } 
} 

// return ONE individual by id 
individuals(id:"123") { 
    id 
    } 
} 

lưu ý rằng tên truy vấn là như nhau, chỉ có các thông số khác nhau.

Hôm nay, giải pháp thay thế duy nhất tôi tìm thấy là xác định các tên truy vấn khác nhau.

Làm cách nào để xác định các truy vấn đa hình? Thậm chí có thể không?

+1

Tôi không chắc chắn ý của bạn ở đây là "tên truy vấn" - bạn có đang đề cập đến tên trường trên loại truy vấn gốc không? – stubailo

+0

Nó được giải thích ở đây http://graphql.org/learn/queries/ Trong ví dụ trên, tên truy vấn là "cá nhân" –

Trả lời

6

Các trường có thể truy cập tại gốc truy vấn GraphQL của bạn được xác định trong lược đồ GraphQL dưới dạng trường truy vấn gốc, thường được đặt tên là Query. Kiểu này chính xác giống như bất kỳ loại đối tượng GraphQL nào khác trong một lược đồ. Vì vậy, câu hỏi này có thể được đặt lại là:

Các trường GraphQL có khả năng trả về các kết quả khác nhau dựa trên các đối số hoặc loại đối số được truyền vào không?

Câu trả lời ngắn gọn là "không". Một thuộc tính quan trọng của GraphQL là một trường cụ thể phải luôn luôn trả về cùng một kiểu; điều này có nghĩa là trường trả về mảng phải luôn trả về mảng và trường trả về loại đối tượng phải luôn trả về loại cụ thể đó, bất kể đối số được chuyển đến.

Tuy nhiên, có một số cách bạn có thể đạt được kết quả tương tự để tránh cần phải tạo quá nhiều trường có tên khác nhau:

  1. Trường đồ họa có thể có đối số tùy chọn. Vì vậy, ví dụ nếu bạn có một trường gọi là individuals, bạn có thể sử dụng đối số tùy chọn để cung cấp các loại khác nhau của các bộ lọc, ví dụ: individuals(search: "Dan") hoặc individuals(status: "admin"), hoặc individuals (không có đối số) hoặc individuals(status: "admin", search: "Dan") (cả đối số đã cho cùng một lúc
  2. GraphQL. Các trường có thể trả về một số kiểu đối tượng, vì vậy nếu trường của bạn có thể trả về nhiều kiểu khác nhau, bạn có thể sử dụng một liên kết. Không có sự kết hợp của một mảng với một loại đối tượng.

Trong nhiều trường hợp, bạn sẽ cần phải tạo nhiều trường vì Gra phQL hiện không có phương pháp quá tải hoặc đa hình.

+0

Đối với một mục bằng 'id', tôi trả về một mảng' 1', không có ' id', một mảng 'n'. Dường như hoạt động tốt. – Jazzy

Các vấn đề liên quan