Trình tạo truy vấn GraphQL

Viết một thao tác GraphQL bằng tay nghĩa là phải giữ cho dấu ngoặc nhọn, tham số và thụt lề đúng quy cách. Công cụ này ghép tài liệu giúp bạn: chọn truy vấn, mutation hoặc subscription, đặt tên cho thao tác, xác định trường gốc, thêm tham số và liệt kê các trường bạn cần. Kết quả là một thao tác đã định dạng sẵn để dán thẳng vào Apollo, urql hoặc GraphiQL.

Cách tạo một thao tác GraphQL

  1. 1

    Chọn loại thao tác

    Chọn truy vấn, mutation hoặc subscription từ menu thả xuống. Điều này quyết định loại thao tác mà máy chủ thực thi.

  2. 2

    Đặt tên cho thao tác

    Đặt tên như GetUser để máy chủ ghi nhật ký và lưu bộ nhớ đệm. Tên là tùy chọn; công cụ vẫn hoạt động mà không cần tên.

  3. 3

    Xác định trường gốc

    Nhập trường bạn muốn gọi, ví dụ user, createPost hoặc orderUpdated.

  4. 4

    Thêm tham số

    Thêm cặp khóa-giá trị như id: "123" hoặc id: $id. Các dòng có khóa trống sẽ bị bỏ qua.

  5. 5

    Liệt kê các trường và sao chép

    Nhập mỗi trường trên một dòng, tạo truy vấn và sao chép tài liệu đã định dạng vào bộ nhớ tạm.

Làm việc với tài liệu GraphQL

Một tài liệu GraphQL là tập hợp một hoặc nhiều thao tác cùng các mảnh dữ liệu mà chúng tham chiếu. Mỗi thao tác chỉ định một trường gốc thuộc loại Query, Mutation hoặc Subscription, và máy chủ xử lý tập lựa chọn bạn yêu cầu. Công cụ viết văn bản thao tác giúp bạn, nhưng không biết schema của bạn, vì vậy hãy đối chiếu từng tên trường và tham số với API trước khi chạy thao tác.

Cấu trúc của thao tác

Phần Mục đích Ví dụ
Loại thao tác Truy vấn, mutation hoặc subscription query, mutation, subscription
Tên thao tác Dùng cho bộ nhớ đệm và nhật ký GetUserById
Tham số Giá trị truyền vào trường gốc user(id: "123")
Tập lựa chọn Các trường và lựa chọn lồng nhau { user(id: "123") { name posts { title } } }
Biến Dữ liệu đầu vào có kiểu khai báo cùng tên thao tác query GetUser($id: ID!) { user(id: $id) { name } }

Những lỗi phổ biến

  • Biến bắt buộc phải kết thúc bằng !. Nếu quên ký hiệu này ở các tham số được đánh dấu NonNull trong schema, lỗi xác thực sẽ xuất hiện trước khi bộ phân giải (resolver) chạy.
  • Tham số dạng văn bản cần dấu ngoặc kép. Giá trị như 123 là số; giá trị văn bản phải viết "123" với dấu ngoặc kép trong dòng tham số.
  • Kiểu union và interface cần các mảnh nội tuyến ... on TypeName để đọc các trường đặc thù của từng kiểu.
  • Bí danh (alias) là bắt buộc khi bạn yêu cầu cùng một trường hai lần với các tham số khác nhau, ví dụ today: stats(period: DAY)week: stats(period: WEEK).
  • Kết nối (đặc tả Relay) hiển thị edges { node { ... } }pageInfo { endCursor hasNextPage }; bỏ qua bất kỳ phần nào cũng làm hỏng việc phân trang.

Mẹo nhỏ

  • Giữ thao tác nhỏ gọn và đặt tên để Apollo Client lưu bộ nhớ đệm từng thao tác riêng.
  • Truyền các giá trị thay đổi dưới dạng biến thay vì giá trị trực tiếp để máy chủ phân tích tài liệu một lần rồi tái sử dụng; khai báo biến bên cạnh tên thao tác, ví dụ query GetUser($id: ID!).
  • Nếu một trường cần nhiều tham số, hãy viết chúng trong một dòng tham số duy nhất, cách nhau bằng dấu phẩy, ví dụ filter: { status: ACTIVE } làm giá trị.
  • Công cụ xuất ra đúng văn bản bạn cấu hình. Nếu một thao tác thất bại, trước tiên hãy đối chiếu tên trường với schema hiện tại.

Câu hỏi thường gặp

Không. Công cụ chỉ định dạng văn bản bạn nhập; không có điểm cuối nào để gọi và không cần schema. Điền các phần của thao tác và công cụ sẽ ghép tài liệu giúp bạn.

Có. Dùng menu thả xuống thao tác để chuyển giữa truy vấn, mutation và subscription. Mọi thứ khác hoạt động tương tự: tên, trường gốc, tham số và các trường.

Thêm dòng trong phần tham số. Khóa là tên tham số và giá trị là nội dung bạn truyền, ví dụ id: “123” hoặc id: $id. Các dòng có khóa trống bị bỏ qua. Nếu bạn nhập biến như $id, hãy tự khai báo biến đó bên cạnh tên thao tác, ví dụ query GetUser($id: ID!).

Công cụ xuất ra đúng văn bản bạn đã nhập. Lỗi này thường có nghĩa là tên trường hoặc tham số không khớp với schema của máy chủ: hãy đối chiếu trường gốc và từng tên trường với API, sau đó sửa lại cách viết.

Công cụ liên quan

Công cụ này có phiên bản bằng các ngôn ngữ khác