GraphQL — мова запитів і маніпуляції даними з відкритим кодом для API і середовище виконання для обслуговування запитів з наявних даних. GraphQL розробив Facebook у 2012, а публічний реліз відбувся 2015 року. 7 листопада 2018 року GraphQL було переведено від Facebook до новоутвореної GraphQL Фундації, яку прихистила неприбуткова Linux Фундація.

У своїй промові 2016 року директор фонду GraphQL Лі Байрон розповів про свій план із впровадження GraphQL: 1-3 місяці — Хобі й особисті проєкти 6 місяців — Реалізації на 3+ мовах 9-12 місяців — Нові стартапи і маленькі компанії 1,5-2 роки — Реалізації на 10+ мовах (в дійсності зайняло 3 місяці) 2-4 роки — Великі компанії і технологічні гіганти 4-5 років — Повсюдність!

Ціль Байрона зробити GraphQL всюдисутнім поміж вебплатформ.

GraphQL надає підхід розробки веб API і його можна порівнювати і протиставляти REST та іншим архітектурам вебсервісів. Він дозволяє клієнтам визначати структуру потрібних даних і таку саму структуру повертає сервер, таким чином запобігаючи передачі надлишкових даних, але це впливає на дієвість вебкешування результатів запитів. Гнучкість і багатість мови запитів, що може бути не потрібна для простих API. Він складається з системи типів, мови запитів і семантики виконання, статичної валідації і інтроспекції.

GraphQL підтримує читання, писання (змінювання) і підписування на зміни даних (оновлення в реальному часі — зазвичай втілені за допомогою Webhook).

Сервери GraphQL доступні на багатьох мовах включно з Haskell, JavaScript, Perl, Python, Ruby, Java, C#, Scala, Go, Elixir, Erlang, PHP, R і Clojure.

Термінологія

Схема Схема визначає систему типів. Вона описує множину можливих даних (об'єктів, полів, зв'язків та ін.) до чого клієнт може доступитись. Виклики від клієнта валідуються і виконуються згідно зі схемою. Клієнт може знайти інформацію про схему через інтроспекцію. Схему зберігають на GraphQL API сервері.

Поле Поле — це одиниця даних, яку можна отримати з об'єкта. З офіційної документації Мова запитів GraphQL це, по суті, вибирання полів з об'єктів.

Аргумент Це множина пар ключ-значення припасованих до певного поля. Кожне поле на типі об'єкта може мати нуль або більше аргументів, наприклад поле length:

type Starship { id: ID! length(unit: LengthUnit = METER): Float }

Див. також OpenAPI

Примітки

Посилання