Trong GraphQL ý nghĩa của “edge” và “node” là gì?


100

Tôi đang sử dụng một điểm cuối GraphQL cụ thể và mặc dù tôi đang cung cấp cấu trúc JSON sạch dưới dạng truy vấn, nhưng khi tôi nhận được kết quả, tôi sẽ nhận được các thẻ "edge" và "node". Có vẻ như nó đang làm ô nhiễm dữ liệu của tôi mà không có lợi ích rõ ràng. Tại sao nó lại ở đó và có thể loại bỏ chúng để phân tích dữ liệu nhanh hơn và đơn giản hơn không?


1
Kết nối, cạnh và nút là thuật ngữ chủ yếu được sử dụng trong ngữ cảnh của Relay, ứng dụng khách GraphQL. Thông tin thêm có thể được tìm thấy trong Câu hỏi thường gặp này .
marktani

2
Chỉ cần làm rõ: kết nối không phải là một thứ cụ thể cho Relay. Đối với một cái nhìn sâu sắc, xem bài viết này: medium.com/p/explaining-graphql-connections-c48b7c3d6976
Helfer

Nó là một cách tiêu chuẩn để cung cấp phân trang cho danh sách dài các kết quả. Không ràng buộc với bất kỳ triển khai nào.
Matt

Câu trả lời:


64

Hãy bắt đầu với phần giới thiệu ngắn bằng những từ đơn giản


Thông số kỹ thuật của GraphQl Relay

  • cơ chế tìm nạp lại một đối tượng
  • mô tả về cách trang thông qua các kết nối
  • cấu trúc xung quanh các đột biến để làm cho chúng có thể dự đoán được

Kết nối:

  • kết nối là một tập hợp các đối tượng có siêu dữ liệu như edges, pageInfo...
  • pageInfo sẽ chứa hasNextPage, hasPreviousPage, startCursor,endCursor

    • hasNextPage sẽ cho chúng tôi biết nếu có nhiều cạnh hơn hoặc nếu chúng tôi đã kết thúc kết nối này.
  • Mảng bản ghi: cạnh

    • các cạnh sẽ cung cấp cho bạn sự linh hoạt để sử dụng dữ liệu của mình (nút)
    • Các cạnh sẽ giúp bạn phân trang, Có graphql GraphQLListnhưng không có chức năng như phân trang, chỉ với mảng đối tượng (dữ liệu)
  • Mỗi cạnh có

    • a node: một bản ghi hoặc một dữ liệu
    • a cursor: chuỗi được mã hóa base64 để giúp chuyển tiếp với phân trang

https://facebook.github.io/relay/graphql/connections.htm

Nút:

  • bạn có thể đặt số lượng nút bạn cần hiển thị bằng cách sử dụng rơ le connectionArgs(first, last, after, before)

Phân trang chuyển tiếp hoạt động như

  • Tìm nạp tất cả các đối tượng trong bộ sưu tập và trả về một lát cắt dựa trên first/lastbản ghi x, được sử dụng thông qua kết nối

  • after/before được sử dụng để chỉ ra cho máy chủ GraphQL số ​​lượng lát (dữ liệu) được yêu cầu bằng cách sử dụng con trỏ từ nút

Có rất nhiều điều cần xem xét như nodeDefinitions, globalFieldId,nodeInterfaces

https://github.com/graphql/graphql-relay-js#object-identification


17
Tôi nghĩ câu trả lời này có ý chính, nhưng nó chứa nhiều quan niệm sai lầm. Bài viết này giải thích lý do đằng sau các kết nối GraphQL khá tốt: medium.com/p/explain-graphql-connections-c48b7c3d6976
helfer

6
bạn tìm thấy những quan niệm sai lầm ở đâu, đó chỉ là thông tin ngắn gọn, nếu bạn tìm thấy bất kỳ quan niệm sai lầm nào, bạn luôn có thể cải thiện nó để làm cho nó tốt hơn
p0k8_

Tôi có thể làm việc với các cấu trúc này thông qua giao diện người dùng graphql không? Ví dụ: hasNextPage hoặc chúng chỉ có sẵn thông qua JS với Relay?
Ska

vâng, bạn có thể làm việc với những thứ này từ giao diện người dùng graphiql bằng graphql-relay
p0k8_ Ngày

không phải each node will have a cursor, đúng hơn each edge will have a cursor, hãy tham khảo blog.apollographql.com/…
wind
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.