Предишна история [щракнете върху мен]

Основни компоненти на GraphQL —
1. Схема
2. Запитване

Схема —

schema дефинира структурата, типовете и връзките на наличните данни във вашия GraphQL API. Той действа като договор между сървъра и клиентите, определящ какви операции могат да се извършват и какви данни могат да бъдат достъпни.

Схемата на GraphQL се състои от два основни компонента: типове и полета.

Заявки —
Заявките позволяват на клиентите да извличат данни от API. Те са операции само за четене и не променят никакви данни. Например, клиент може да изпрати заявка за извличане на подробности за потребителя.

type Query {
  book(id: ID!): Book
  allBooks: [Book!]!
}

type Book {
  id: ID!
  title: String!
  publicationYear: Int!
  author: Author
}

type Author {
  id: ID
  firstName: String
  lastName: String
}

пример —
В този пример имаме два основни типа: „Книга“ и „Заявка“.

Типът„Книга“ представлява обект книга със следните полета:

  • id (от тип ID): Идентификатор за книгата.
  • title (от тип String): Заглавието на книгата.
  • author (от тип Author): връзката между книга и нейния автор. Той препраща към типа Author.
  • publicationYear (от тип Int): Годината на публикуване на книгата.

Author: Представлява авторски обект със следните полета:

  • id (от тип ID): Идентификатор за автора.
  • firstName (от тип String): Първото име на автора.
  • lastName (от тип String): Фамилното име на автора.

Типът „Заявка“ представлява наличните заявки в нашия API. Той включва следните полета:

  • book (от тип Книга): Заявка, която приема аргумент id и връща една книга въз основа на предоставения идентификатор.
  • allBooks (от тип [Книга!]!): Заявка, която връща списък с всички книги.

изпращане на заявки —
клиентите могат да изпращат заявки за извличане на конкретни книги по ID или за извличане на всички книги, налични в API.
Например клиент може да изпрати следното GraphQL заявка:
Заявка-1:

query {
  book(id: "123") {
    title
    publicationYear
  }
}

пита за заглавието и годината на публикуване на книга с ID “123”.
и след това сървърът ще отговори със съответния обект на книга:

{ "data": { 
            "book": { 
                      "title": "Sample Book", 
                      "publicationYear": 2020 
                    }
          } 
}

Заявка-2:

query {
  book(id: "123") {
    title
    author {
      firstName
    }
    publicationYear
  }
}

заявката пита за полетата title, author (включително firstName и lastName) и publicationYear на книгата с ID "123".
отговорът на сървъра ще бъде

{
  "data": {
    "book": {
      "title": "Sample Book",
      "author": {
        "firstName": "John",
      },
      "publicationYear": 2021
    }
  }
}

Запитване-3

query {
  book(id: "123") {
    title
    publicationYear
  }
  allBooks {
    title
    author
    publicationYear
  }
}

Отговорът на сървъра може да бъде структуриран по следния начин:

{
  "data": {
    "book": {
      "title": "Sample Book",
      "author": {
        "firstName": "John",
        "lastName": "Doe"
      },
      "publicationYear": 2021
    },
    "allBooks": [
      {
        "title": "Book 1",
        "author": {
          "firstName": "Jane",
          "lastName": "Smith"
        },
        "publicationYear": 2022
      },
      {
        "title": "Book 2",
        "author": {
          "firstName": "Mark",
          "lastName": "Johnson"
        },
        "publicationYear": 2023
      },
      {
        "title": "Book 3",
        "author": {
          "firstName": "Sarah",
          "lastName": "Williams"
        },
        "publicationYear": 2021
      }
    ]
  }
}