Công cụ GraphQL API

Format GraphQL, kiểm tra query theo schema (SDL hoặc introspection), đo độ sâu và độ phức tạp, so sánh schema tìm thay đổi phá vỡ, SDL ↔ JSON.

GETPOSThttps://apibox.io.vn/v1/graphql-tools
Tiện ích lập trình▶ Dùng thử online

Bộ công cụ dựa trên graphql-js 17, bản triển khai chuẩn của GraphQL. action=format định dạng lại query hoặc tài liệu SDL. validate kiểm tra query theo schema (văn bản SDL hoặc kết quả introspection), trả về mọi lỗi kèm dòng và cột, cùng danh sách trường được dùng (dạng Type.field) và trường nào đã bị deprecated. Lỗi cú pháp luôn có vị trí. analyze liệt kê các operation, biến, fragment, và cho mỗi operation: độ sâu, số trường, số alias và điểm phức tạp có tính danh sách (số trường nhân với đối số first / last / limit); max_depth và max_complexity biến nó thành phép kiểm tra đạt / không đạt cho gateway.

stats tóm tắt schema: số kiểu theo loại, số trường, các query, mutation, subscription kèm đối số, directive tự định nghĩa và trường deprecated. diff so sánh old_schema với new_schema và phân loại thay đổi thành phá vỡ (xoá trường, đối số thành bắt buộc…), nguy hiểm (thêm đối số tuỳ chọn, thêm giá trị enum…) và an toàn. to-sdl chuyển JSON introspection sang SDL (sort=true để sắp xếp kiểu và trường), to-introspection làm ngược lại, còn sample sinh query mẫu cho một trường của Query hoặc fragment cho một kiểu.

Giới hạn: 2 MB mỗi tài liệu, 200.000 token. API không thực thi gì: query của bạn không bao giờ được gửi tới máy chủ nào.

Tham số

TênVị tríKiểuBắt buộcMặc định
actionbody|querystringkhôngformat, validate, analyze, stats, diff, to-sdl, to-introspection, sample (tự đoán theo dữ liệu gửi lên nếu bỏ trống).
querybody|querystringkhôngQuery / mutation / fragment GraphQL, hoặc SDL khi format.
schemabodystringkhôngSchema dạng văn bản SDL hoặc JSON introspection.
old_schemabodystringkhôngSo sánh: schema cũ.
new_schemabodystringkhôngSo sánh: schema mới.
max_depthbody|querynumberkhôngAnalyze / validate: độ sâu tối đa cho phép (thêm depth_ok).
max_complexitybody|querynumberkhôngAnalyze / validate: độ phức tạp tối đa (thêm complexity_ok).
typebody|querystringkhôngSample: tên trường của Query hoặc tên kiểu.
depthbody|querynumberkhông2Sample: độ sâu lồng nhau (1–5).
sortbody|querybooleankhôngfalseto-sdl: sắp xếp kiểu và trường theo bảng chữ cái.

Ví dụ

curl -X POST "https://apibox.io.vn/v1/graphql-tools" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"schema":"type Book {\n  id: ID!\n  title: String\n  isbn: String @deprecated(reason: \"use id\")\n}\n\ntype Query {\n  book(id: ID!): Book\n}","query":"{ book(id: 1) { title isbn price } }"}'

Kết quả trả về

{
  "valid": false,
  "errors": [
    {
      "message": "Cannot query field \"price\" on type \"Book\".",
      "locations": [
        {
          "line": 1,
          "column": 28
        }
      ]
    }
  ],
  "operations": [
    {
      "name": null,
      "type": "query",
      "variables": [],
      "depth": 2,
      "field_count": 4,
      "complexity": 4,
      "aliases": 0,
      "root_fields": [
        "book"
      ]
    }
  ],
  "fragments": [],
  "fields_used": [
    {
      "coordinate": "Query.book",
      "type": "Book",
      "deprecated": null,
      "count": 1
    },
    {
      "coordinate": "Book.title",
      "type": "String",
      "deprecated": null,
      "count": 1
    },
    {
      "coordinate": "Book.isbn",
      "type": "String",
      "deprecated": "use id",
      "count": 1
    }
  ],
  "deprecated_used": [
    "Book.isbn"
  ]
}

Ứng dụng

  • Cho CI báo lỗi khi thay đổi schema làm hỏng client đang dùng
  • Chặn query quá sâu hoặc quá tốn tài nguyên ở API gateway
  • Chuyển schema tải về bằng introspection thành SDL dễ đọc
  • Tìm các trường deprecated mà query của client vẫn còn dùng

Hỏi đáp

API có chạy query của tôi không?

Không. API chỉ phân tích và kiểm tra tài liệu theo schema bạn gửi, không gửi request nào tới máy chủ GraphQL của bạn.

Độ phức tạp được tính thế nào?

Mỗi trường được chọn tính 1, nhân với giá trị số nguyên của các đối số first, last, limit, take, pageSize hoặc top ở các trường cha. Fragment được mở rộng một lần và vòng lặp bị cắt.

Có thể gửi schema dạng JSON introspection không?

Có, với mọi thao tác: truyền kết quả JSON của truy vấn introspection (có __schema hoặc data.__schema) thay cho SDL.

API liên quan

Bắt đầu với 1.000 request miễn phí mỗi tháng. Nhận API key miễn phí →