GraphQL - Введение

GraphQL - это серверная технология с открытым исходным кодом, разработанная Facebook для оптимизации вызовов RESTful API. Это механизм выполнения и язык запросов данных. В этой главе мы обсудим преимущества использования GraphQL.

Почему GraphQL

API RESTful придерживаются четкого и хорошо структурированного ресурсо-ориентированного подхода. Однако, когда данные становятся более сложными, маршруты становятся длиннее. Иногда невозможно получить данные с помощью одного запроса. Вот где пригодится GraphQL. GraphQL структурирует данные в форме графа с мощным синтаксисом запросов для просмотра, извлечения и изменения данных.

Ниже приведены преимущества использования языка запросов GraphQL.

Просите то, что хотите - и получите

Отправьте запрос GraphQL в свой API и получите именно то, что вам нужно. Запросы GraphQL всегда возвращают предсказуемые результаты. Приложения, использующие GraphQL, быстрые и стабильные. В отличие от сервисов Restful, эти приложения могут ограничивать данные, которые должны быть получены с сервера.

Следующий пример поможет вам лучше понять это -

Рассмотрим бизнес-объект Student с атрибутами id, firstName, lastName и CollegeName . Предположим, мобильному приложению необходимо получить только firstName и id . Если мы создадим конечную точку REST, например / api / v1 / student , она в конечном итоге получит данные для всех полей для объекта Student. Это означает, что служба RESTful получает избыточные данные. Эту проблему можно решить с помощью GraphQL.

Рассмотрим запрос GraphQL, приведенный ниже -

{
   students {
      id
      firstName
   }
}

Это вернет значения только для полей id и firstname. Запрос не будет получать значения для других атрибутов объекта ученика. Ответ на запрос, проиллюстрированный выше, показан ниже -

{
   "data": {
      "students": [
         {
            "id": "S1001",
            "firstName": "Mohtashim"
         },
         {
            "id": "S1002",
            "firstName": "Kannan"
         }
      ]
   }
}

Получите много ресурсов за один запрос

Запросы GraphQL помогают беспрепятственно извлекать связанные бизнес-объекты, в то время как для типичных REST API требуется загрузка с нескольких URL-адресов. API-интерфейсы GraphQL получают все данные, необходимые вашему приложению, за один запрос. Приложения, использующие GraphQL, могут работать быстро даже при медленном подключении к мобильной сети.

Рассмотрим еще один бизнес-объект - Колледж, который имеет атрибуты: название и местонахождение. Студенческий бизнес - объект имеет ассоциативную связь с объектом колледжа. Если бы мы использовали REST API для получения сведений о студентах и ​​их колледже, мы бы сделали два запроса к серверу, например / api / v1 / student и / api / v1 / college . Это приведет к неполной выборке данных при каждом запросе. Таким образом, мобильные приложения вынуждены совершать несколько обращений к серверу для получения нужных данных.

Однако мобильное приложение может получать сведения об объектах Student и College в одном запросе с помощью GraphQL.

Ниже приведен запрос GraphQL для извлечения данных -

{
   students{
      id
      firstName
      lastName
      college{
         name
         location
      }
   }
}

Результат вышеуказанного запроса содержит именно те поля, которые мы запросили, как показано ниже -

{
   "data": {
      "students": [
         {
            "id": "S1001",
            "firstName": "Mohtashim",
            "lastName": "Mohammad",
            "college": {
               "name": "CUSAT",
               "location": "Kerala"
            }
         },
         
         {
            "id": "S1002",
            "firstName": "Kannan",
            "lastName": "Sudhakaran",
            "college": {
               "name": "AMU",
               "location": "Uttar Pradesh"
            }
         },
         
         {
            "id": "S1003",
            "firstName": "Kiran",
            "lastName": "Panigrahi",
            "college": {
               "name": "AMU",
               "location": "Uttar Pradesh"
            }
         }
      ]
   }
}

Опишите, что возможно с системой типов

GraphQL строго типизирован, а запросы основаны на полях и связанных с ними типах данных. Если в запросе GraphQL есть несоответствие типа, серверные приложения возвращают понятные и полезные сообщения об ошибках. Это помогает в плавной отладке и легком обнаружении ошибок клиентскими приложениями. GraphQL также предоставляет библиотеки на стороне клиента, которые могут помочь в сокращении явного преобразования и анализа данных.

Пример типов данных Student и College приведен ниже -

type Query {
   students:[Student]
}

type Student {
   id:ID!
   firstName:String
   lastName:String
   fullName:String
   college:College
}

type College {
   id:ID!
   name:String
   location:String
   rating:Float
   students:[Student]
}

Двигайтесь быстрее с помощью мощных инструментов разработчика

GraphQL предоставляет богатые инструменты разработчика для документации и тестирования запросов. GraphiQL - отличный инструмент, который генерирует документацию запроса и его схемы. Он также предоставляет редактор запросов для тестирования API-интерфейсов GraphQL и возможности интеллектуального завершения кода при построении запросов.