ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ°

πŸ‘©β€πŸ’» GraphQL ΠΈ для Ρ‡Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ

GraphQL – язык запросов, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠ΅ΠΉ Facebook Π² 2012 Π³ΠΎΠ΄Ρƒ ΠΈ Π²Ρ‹ΠΏΡƒΡ‰Π΅Π½Π½Ρ‹ΠΉ Π² ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ доступ Π² 2015-ΠΌ. Он прСдставляСт собой Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Ρƒ Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹ΠΌ RESTful API, прСдлагая Π½ΠΎΠ²Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΊ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΈΡŽ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ ΠΈ сСрвСром ΠΏΡ€ΠΈ ΠΎΠ±ΠΌΠ΅Π½Π΅ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ. Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ REST, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ Π½Π° рСсурсы ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ HTTP, GraphQL позволяСт ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Ρ‚ΡŒ ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚Π΅ Π΄Π°Π½Π½Ρ‹Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΅ΠΌΡƒ Π½ΡƒΠΆΠ½Ρ‹, Π±Π΅Π· нСобходимости получСния ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ

πŸ‘Ί ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹ GraphQL

  1. Запросы Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΠ΄ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π΅ΠΌ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°. ΠšΠ»ΠΈΠ΅Π½Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°ΠΏΡ€ΠΎΡΠΈΡ‚ΡŒ Ρ€ΠΎΠ²Π½ΠΎ ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄Π°Π½Π½Ρ‹Ρ…, сколько Π΅ΠΌΡƒ Π½ΡƒΠΆΠ½ΠΎ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π³ΠΈΠ±ΠΊΠΈΠΉ синтаксис запросов. Π­Ρ‚ΠΎ особСнно ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π² ситуациях, ΠΊΠΎΠ³Π΄Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ нСсколько рСсурсов Π² ΠΎΠ΄Π½ΠΎΠΌ запросС
  2. Випизированная систСма. GraphQL ΠΈΠΌΠ΅Π΅Ρ‚ ΡΡ‚Ρ€ΠΎΠ³ΡƒΡŽ систСму Ρ‚ΠΈΠΏΠΎΠ², которая опрСдСляСт структуру Π΄Π°Π½Π½Ρ‹Ρ…, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹Ρ… сСрвСром. Π­Ρ‚ΠΎ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ошибок ΠΏΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΈ Π΄Π΅Π»Π°Π΅Ρ‚ взаимодСйствиС ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ ΠΈ сСрвСром Π±ΠΎΠ»Π΅Π΅ прСдсказуСмым
  3. Единая Ρ‚ΠΎΡ‡ΠΊΠ° Π²Ρ…ΠΎΠ΄Π°. Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ REST, Π³Π΄Π΅ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ рСсурс ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΠΌΠ΅Π΅Ρ‚ свой URL, Π² GraphQL всС запросы ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡŽΡ‚ΡΡ Ρ‡Π΅Ρ€Π΅Π· Π΅Π΄ΠΈΠ½Ρ‹ΠΉ endpoint. Π­Ρ‚ΠΎ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρƒ прилоТСния ΠΈ сниТаСт количСство Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… HTTP-запросов
  4. ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° ΠΌΡƒΡ‚Π°Ρ†ΠΈΠΉ. Помимо чтСния Π΄Π°Π½Π½Ρ‹Ρ…, GraphQL Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ записи (ΠΌΡƒΡ‚Π°Ρ†ΠΈΠΈ), Ρ‡Ρ‚ΠΎ позволяСт ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Π½Π° сСрвСрС

πŸ‘’ ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π° использования GraphQL

  1. Π­Ρ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ запросов. Благодаря Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½ΡƒΠΆΠ½Ρ‹Π΅ поля, ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ΡΡ объСм ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‡Ρ‚ΠΎ особСнно Π²Π°ΠΆΠ½ΠΎ для ΠΌΠΎΠ±ΠΈΠ»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΈ устройств с ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹ΠΌ ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚-соСдинСниСм
  2. Π“ΠΈΠ±ΠΊΠΎΡΡ‚ΡŒ ΠΈ Π°Π΄Π°ΠΏΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ. GraphQL Π»Π΅Π³ΠΊΠΎ адаптируСтся ΠΊ измСнСниям Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ². НапримСр, Ссли ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π½ΠΎΠ²Ρ‹Ρ… ΠΏΠΎΠ»Π΅ΠΉ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π±Π΅Π· измСнСния ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… API-эндпоинтов
  3. ΠŸΡ€ΠΎΡΡ‚ΠΎΡ‚Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ. Випизация ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ Π΄Π΅Π»Π°ΡŽΡ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ΠΈ тСстированиС GraphQL API ΠΏΡ€ΠΎΡ‰Π΅ ΠΈ быстрСС. Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ Π²Ρ€ΠΎΠ΄Π΅ GraphiQL ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ схСму Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Ρ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ запросы
  4. Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ с Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ источниками Π΄Π°Π½Π½Ρ‹Ρ…. GraphQL ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Π»ΡŽΠ±Ρ‹ΠΌΠΈ источниками Π΄Π°Π½Π½Ρ‹Ρ…, Π±ΡƒΠ΄ΡŒ Ρ‚ΠΎ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…, микросСрвисы ΠΈΠ»ΠΈ внСшниС API. Π­Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ Π΅Π³ΠΎ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΌ инструмСнтом для построСния слоТных систСм

πŸ”ͺ НСдостатки GraphQL

  1. Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ внСдрСния. Для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ… Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² настройка ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° GraphQL ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ слоТными, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ понимания ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΎΠ² Ρ€Π°Π±ΠΎΡ‚Ρ‹ языка ΠΈ инструмСнтов
  2. ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ. Из-Π·Π° гибкости запросов слоТно эффСктивно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ стандартныС ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ HTTP-ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅
  3. ΠŸΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠ° сСрвСра. Если ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρ‹ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Ρ‚ΡŒ слишком ΠΌΠ½ΠΎΠ³ΠΎ Π΄Π°Π½Π½Ρ‹Ρ… Π·Π° Ρ€Π°Π·, это ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠ΅ сСрвСра. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π²Π°ΠΆΠ½ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ схСмы ΠΈ Π²Π²ΠΎΠ΄ΠΈΡ‚ΡŒ ограничСния Π½Π° Π³Π»ΡƒΠ±ΠΈΠ½Ρƒ ΠΈ ΡˆΠΈΡ€ΠΈΠ½Ρƒ запросов

πŸͺ„ ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ использования GraphQL

GraphQL Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² ΠΊΡ€ΡƒΠΏΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ…, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ:

  • Facebook: ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ Π±Ρ‹Π» создан для ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ мобильного прилоТСния
    • GitHub: прСдоставляСт ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹ΠΉ GraphQL API для доступа ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ ΠΎ рСпозиториях, ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΡ… ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… рСсурсах
  • Shopify: ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ GraphQL для своих коммСрчСских ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌ, прСдоставляя Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ кастомизированныС ΠΌΠ°Π³Π°Π·ΠΈΠ½Ρ‹

πŸ‘€ ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ GraphQL запросов

  • Запрос Π½Π° ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅
  {
    project(name: "GraphQL") {
      tagline
    }
  }
  • ΠžΡ‚Π²Π΅Ρ‚
  {
    "project": {
      "tagline": "A query language for APIs"
    }
  }

πŸ’€ Π’ Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

GraphQL – это ΠΌΠΎΡ‰Π½Ρ‹ΠΉ инструмСнт для создания соврСмСнных API, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ Π³ΠΈΠ±ΠΊΠΎΡΡ‚ΡŒ, ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ ΠΈ удобство Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ. НСсмотря Π½Π° Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ слоТности Π² настройкС ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ΅, ΠΎΠ½ становится всё Π±ΠΎΠ»Π΅Π΅ популярным срСди Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² благодаря своим прСимущСствам ΠΏΠ΅Ρ€Π΅Π΄ Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹ΠΌΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ взаимодСйствия с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ