Chủ Nhật, 23/04/2017 | 00:00 GMT+7

Truy vấn nội tâm với GraphQL


Với GraphQL, bạn có thể chạy các truy vấn nội quan để tìm hiểu về các trường và loại có sẵn của một schemas GraphQL. Khả năng xem xét nội tâm đó cũng là điều mang lại cho GraphiQL khả năng cung cấp tài liệu về schemas và tự động hoàn thành.

Hãy sử dụng điểm cuối API công khai SWAPI của Star Wars để chạy một số truy vấn xem xét kỹ .

__kiểu

Trước tiên, hãy chạy một truy vấn để hỏi về loại Phim bằng cách sử dụng __type được tích hợp sẵn :

query FilmType {
  __type(name: "Film") {
    kind
    name
    fields {
      name
      description
      type {
        name
      }
    }
  }
}
  • Loại cung cấp cho ta giá trị enum cho loại, như OBJECT, SCALAR hoặc INTERFACE.
  • Tên cho ta tên của loại.
  • Mô tả , tốt, cung cấp cho ta mô tả!

Và đây là phản hồi trông như thế nào:

{
  "data": {
    "__type": {
      "kind": "OBJECT",
      "name": "Film",
      "fields": [
        {
          "name": "title",
          "description": "The title of this film.",
          "type": {
            "name": "String"
          }
        },
        {
          "name": "episodeID",
          "description": "The episode number of this film.",
          "type": {
            "name": "Int"
          }
        },
        ...

Lưu ý việc sử dụng __type tích hợp sẵn (kiểu __Type) ở đây để lấy thông tin về loại của một đối tượng hoặc giao diện cụ thể.


Đây là một ví dụ khác sử dụng một phân đoạn để tìm hiểu thêm về một loại cụ thể:

query LearnAboutFilm {
  __type(name: "Film") {
    ...AboutType
  }
}

fragment AboutType on __Type {
  fields {
    name
    description
    args {
      name
      description
    }
  }
  interfaces {
    name
    description
  }
  inputFields {
    name
    description
  }
  possibleTypes {
    kind
    name
    fields {
      name
      description
      type {
        kind
        name
        description
      }
    }
  }
}

__lược đồ

Với __schema, ta có thể hỏi server về chính schemas đó. Hãy xem một ví dụ:

query LearnAboutSchema {
  __schema {
    types {
      name
      kind
    }
    queryType {
      fields {
        name
        description
      }
    }
  }
}

Và phản hồi:

{
  "data": {
    "__schema": {
      "types": [
        {
          "name": "Root",
          "kind": "OBJECT"
        },
        {
          "name": "String",
          "kind": "SCALAR"
        },
        {
          "name": "Int",
          "kind": "SCALAR"
        },
        ...
        "queryType": {
        "fields": [
          {
            "name": "allFilms",
            "description": null
          },
          {
            "name": "film",
            "description": null
          },
          ...

__tên loại

__typename được dùng như một phần của các truy vấn thông thường để hỏi về loại của một trường cụ thể:

query LearnAboutFilm {
  allFilms {
    films {
      __typename
      title
    }
  }
  film (id: "ZmlsbXM6Mw==") {
    __typename
    title
  }
  starship(id: "c3RhcnNoaXBzOjc1") {
    __typename
    name
    model
  }
}

Và đây là câu trả lời:

{
  "data": {
    "allFilms": {
      "films": [
        {
          "__typename": "Film",
          "title": "A New Hope"
        },
        {
          "__typename": "Film",
          "title": "The Empire Strikes Back"
        },
        ...
      ]
    },
    "film": {
      "__typename": "Film",
      "title": "Return of the Jedi"
    },
    "starship": {
      "__typename": "Starship",
      "name": "V-wing",
      "model": "Alpha-3 Nimbus-class V-wing starfighter"
    }
  }
}

Tags:

Các tin liên quan