ΠΠΎΡΡΠ±Π½ΠΈΠΊ Π· GraphQL
GraphQL Π½Π° AlexHost: ΠΠΈΠΊΠΎΡΠΈΡΡΠΎΠ²ΡΠΉΡΠ΅ ΡΠ²ΠΎΡ API Π· ΡΠΎΡΠ½ΡΡΡΡ
Π§ΠΎΠΌΡ GraphQL Π½Π° Π²ΠΈΠ΄ΡΠ»Π΅Π½ΠΎΠΌΡ ΡΠ΅ΡΠ²Π΅ΡΡ? GraphQL – ΡΠ΅ Π½Π°ΠΉΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΡΠΈΠΉ API, ΡΠΊΠΈΠΉ Π΄ΠΎΠ·Π²ΠΎΠ»ΡΡ Π²Π°ΠΌ ΠΎΡΡΠΈΠΌΡΠ²Π°ΡΠΈ ΡΡΠ»ΡΠΊΠΈ ΡΡ Π΄Π°Π½Ρ, ΡΠΊΡ Π²Π°ΠΌ ΠΏΠΎΡΡΡΠ±Π½Ρ – Π±Π΅Π· Π·Π°ΠΉΠ²ΠΎΠ³ΠΎ ΠΊΠ»ΠΎΠΏΠΎΡΡ ΡΠ° ΠΌΠ΅ΡΡΡΠ½Ρ. Π£ ΠΏΠΎΡΠ΄Π½Π°Π½Π½Ρ Π· Π²ΠΈΠ΄ΡΠ»Π΅Π½ΠΈΠΌΠΈ ΡΠ΅ΡΠ²Π΅ΡΠ°ΠΌΠΈ AlexHost Π²ΠΈ ΠΎΡΡΠΈΠΌΠ°ΡΡΠ΅ Π±Π»ΠΈΡΠΊΠ°Π²ΠΈΡΠ½Ρ ΡΠ²ΠΈΠ΄ΠΊΡΡΡΡ, ΠΏΠΎΠ²Π½ΠΈΠΉ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ Ρ Π·Π°Π»ΡΠ·Π½Ρ Π±Π΅Π·ΠΏΠ΅ΠΊΡ Π΄Π»Ρ Π²ΠΈΠΊΠΎΠ½Π°Π½Π½Ρ ΡΠΊΠ»Π°Π΄Π½ΠΈΡ Π·Π°ΠΏΠΈΡΡΠ² Π°Π±ΠΎ Π΄ΠΎΠ΄Π°ΡΠΊΡΠ² Ρ ΡΠ΅Π°Π»ΡΠ½ΠΎΠΌΡ ΡΠ°ΡΡ, ΡΠΊ ΡΠ΅ΠΌΠΏΡΠΎΠ½. ΠΠ°ΡΠΎΠ΄ΠΈΠ²ΡΠΈΡΡ Ρ Facebook Ρ 2012 ΡΠΎΡΡ ΡΠ° ΠΎΡΡΠΈΠΌΠ°Π²ΡΠΈ Π²ΡΠ΄ΠΊΡΠΈΡΠΈΠΉ Π²ΠΈΡ ΡΠ΄Π½ΠΈΠΉ ΠΊΠΎΠ΄ Ρ 2015 ΡΠΎΡΡ, GraphQL Π·Π°ΡΡΠΌΠ°ΡΡΡ REST ΡΠ²ΠΎΡΡ Π³Π½ΡΡΠΊΡΡΡΡ ΡΠ° Π΅ΡΠ΅ΠΊΡΠΈΠ²Π½ΡΡΡΡ. ΠΠ°Π²Π°ΠΉΡΠ΅ Π·Π°Π½ΡΡΠΈΠΌΠΎΡΡ Π² ΡΠ΅, ΡΠΎ Π·ΠΌΡΡΡΡ ΠΉΠΎΠ³ΠΎ ΠΏΡΠ°ΡΡΠ²Π°ΡΠΈ Ρ ΡΠΊ ΠΉΠΎΠ³ΠΎ Π²ΠΈΠΊΠΎΡΠΈΡΡΠΎΠ²ΡΠ²Π°ΡΠΈ.
1. Π ΠΎΠ·ΡΠΌΡΠ½Π½Ρ GraphQL
GraphQL Π΄ΠΎΠ·Π²ΠΎΠ»ΡΡ ΠΊΠ»ΡΡΠ½ΡΠ°ΠΌ Π·Π°ΠΏΠΈΡΡΠ²Π°ΡΠΈ ΡΡΠ»ΡΠΊΠΈ ΡΡ Π΄Π°Π½Ρ, ΡΠΊΡ ΡΠΌ ΠΏΠΎΡΡΡΠ±Π½Ρ, ΡΠΎ ΡΠΎΠ±ΠΈΡΡ ΠΉΠΎΠ³ΠΎ Π±ΡΠ»ΡΡ Π΅ΡΠ΅ΠΊΡΠΈΠ²Π½ΠΈΠΌ, Π½ΡΠΆ ΡΡΠ°Π΄ΠΈΡΡΠΉΠ½Ρ REST API, ΡΠΊΡ ΡΠ°ΡΡΠΎ ΠΏΠΎΠ²Π΅ΡΡΠ°ΡΡΡ ΡΡΠΊΡΠΎΠ²Π°Π½Ρ ΡΡΡΡΠΊΡΡΡΡ Π΄Π°Π½ΠΈΡ . Π’Π°ΠΊΠ° Π³Π½ΡΡΠΊΡΡΡΡ ΠΏΡΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡ Π΄ΠΎ ΠΏΡΠ΄Π²ΠΈΡΠ΅Π½Π½Ρ ΠΏΡΠΎΠ΄ΡΠΊΡΠΈΠ²Π½ΠΎΡΡΡ, ΠΎΡΠΎΠ±Π»ΠΈΠ²ΠΎ Π² ΠΌΠΎΠ±ΡΠ»ΡΠ½ΠΈΡ Π΄ΠΎΠ΄Π°ΡΠΊΠ°Ρ , Π΄Π΅ ΠΏΡΠΎΠΏΡΡΠΊΠ½Π° Π·Π΄Π°ΡΠ½ΡΡΡΡ ΠΌΠΎΠΆΠ΅ Π±ΡΡΠΈ ΠΎΠ±ΠΌΠ΅ΠΆΠ΅Π½Π°.
2. ΠΠ»ΡΡΠΎΠ²Ρ ΠΎΡΠΎΠ±Π»ΠΈΠ²ΠΎΡΡΡ GraphQL
2.1. Π’ΠΎΡΠ½Π° Π²ΠΈΠ±ΡΡΠΊΠ° Π΄Π°Π½ΠΈΡ
ΠΠ°Π²Π΄ΡΠΊΠΈ GraphQL ΠΊΠ»ΡΡΠ½ΡΠΈ Π²ΠΊΠ°Π·ΡΡΡΡ ΡΠ²ΠΎΡ Π²ΠΈΠΌΠΎΠ³ΠΈ Π΄ΠΎ Π΄Π°Π½ΠΈΡ Π² ΠΎΠ΄Π½ΠΎΠΌΡ Π·Π°ΠΏΠΈΡΡ. ΠΠ°ΠΌΡΡΡΡ ΠΊΡΠ»ΡΠΊΠΎΡ ΠΊΡΠ½ΡΠ΅Π²ΠΈΡ ΡΠΎΡΠΎΠΊ Π΄Π»Ρ ΡΡΠ·Π½ΠΈΡ ΡΠ΅ΡΡΡΡΡΠ², GraphQL Π·Π°Π±Π΅Π·ΠΏΠ΅ΡΡΡ ΡΠ΄ΠΈΠ½Ρ ΠΊΡΠ½ΡΠ΅Π²Ρ ΡΠΎΡΠΊΡ, Π΄Π΅ ΠΊΠ»ΡΡΠ½ΡΠΈ ΠΌΠΎΠΆΡΡΡ Π·Π°ΠΏΠΈΡΡΠ²Π°ΡΠΈ ΡΠΎΡΠ½Ρ ΡΠΎΡΠΌΡ Ρ ΠΊΡΠ»ΡΠΊΡΡΡΡ Π΄Π°Π½ΠΈΡ , ΡΠΊΡ ΡΠΌ ΠΏΠΎΡΡΡΠ±Π½Ρ.
2.2. Π‘ΠΈΠ»ΡΠ½ΠΎ ΡΠΈΠΏΡΠ·ΠΎΠ²Π°Π½Π° ΡΡ Π΅ΠΌΠ°
API-ΡΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΈ GraphQL Π²ΠΈΠ·Π½Π°ΡΠ°ΡΡΡΡΡ ΡΡ Π΅ΠΌΠΎΡ, ΡΠΊΠ° ΠΎΠΊΡΠ΅ΡΠ»ΡΡ ΡΠΈΠΏΠΈ Π΄ΠΎΡΡΡΠΏΠ½ΠΈΡ Π΄Π°Π½ΠΈΡ ΡΠ° ΡΡ Π²Π·Π°ΡΠΌΠΎΠ·Π²’ΡΠ·ΠΊΠΈ. Π¦Ρ ΡΡ Π΅ΠΌΠ° Π΄ΡΡ ΡΠΊ ΠΊΠΎΠ½ΡΡΠ°ΠΊΡ ΠΌΡΠΆ ΠΊΠ»ΡΡΠ½ΡΠΎΠΌ Ρ ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ, Π·Π°Π±Π΅Π·ΠΏΠ΅ΡΡΡΡΠΈ ΡΠ·Π³ΠΎΠ΄ΠΆΠ΅Π½ΡΡΡΡ Π΄Π°Π½ΠΈΡ Ρ Π΄ΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈ ΡΠΎΠ·ΡΠΎΠ±Π½ΠΈΠΊΠ°ΠΌ Π·ΡΠΎΠ·ΡΠΌΡΡΠΈ, ΡΠΊ Π²Π·Π°ΡΠΌΠΎΠ΄ΡΡΡΠΈ Π· API.
2.3. ΠΠ½ΠΎΠ²Π»Π΅Π½Π½Ρ Π² ΡΠ΅ΠΆΠΈΠΌΡ ΡΠ΅Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠ°ΡΡ
GraphQL ΠΏΡΠ΄ΡΡΠΈΠΌΡΡ ΠΏΡΠ΄ΠΏΠΈΡΠΊΠΈ, ΡΠΎ Π΄ΠΎΠ·Π²ΠΎΠ»ΡΡ ΠΊΠ»ΡΡΠ½ΡΠ°ΠΌ ΠΎΡΡΠΈΠΌΡΠ²Π°ΡΠΈ ΠΎΠ½ΠΎΠ²Π»Π΅Π½Π½Ρ Π² ΡΠ΅ΠΆΠΈΠΌΡ ΡΠ΅Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠ°ΡΡ. Π¦Π΅ ΠΎΡΠΎΠ±Π»ΠΈΠ²ΠΎ ΠΊΠΎΡΠΈΡΠ½ΠΎ Π΄Π»Ρ Π΄ΠΎΠ΄Π°ΡΠΊΡΠ², ΡΠΊΡ ΠΏΠΎΡΡΠ΅Π±ΡΡΡΡ Π΄Π°Π½ΠΈΡ Ρ ΡΠ΅Π°Π»ΡΠ½ΠΎΠΌΡ ΡΠ°ΡΡ, ΡΠ°ΠΊΠΈΡ ΡΠΊ ΡΠ°Ρ-Π΄ΠΎΠ΄Π°ΡΠΊΠΈ Π°Π±ΠΎ ΠΎΠ½ΠΎΠ²Π»Π΅Π½Π½Ρ Π±ΡΡΠΆΠΎΠ²ΠΈΡ ΠΊΠΎΡΠΈΡΡΠ²Π°Π½Ρ.
2.4. Π‘Π°ΠΌΠΎΠ°Π½Π°Π»ΡΠ·
API GraphQL ΠΌΠΎΠΆΠ½Π° Π°Π½Π°Π»ΡΠ·ΡΠ²Π°ΡΠΈ, Π΄ΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈ ΠΊΠ»ΡΡΠ½ΡΠ°ΠΌ Π·Π°ΠΏΠΈΡΡΠ²Π°ΡΠΈ ΡΠ°ΠΌΡ ΡΡ Π΅ΠΌΡ. Π¦Π΅ ΠΎΠ·Π½Π°ΡΠ°Ρ, ΡΠΎ ΠΌΠΎΠΆΠ½Π° ΡΡΠ²ΠΎΡΡΠ²Π°ΡΠΈ ΡΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈ Π΄Π»Ρ Π²ΠΈΠ²ΡΠ΅Π½Π½Ρ API Ρ ΡΠΎΠ·ΡΠΌΡΠ½Π½Ρ Π΄ΠΎΡΡΡΠΏΠ½ΠΈΡ ΡΠΈΠΏΡΠ², Π·Π°ΠΏΠΈΡΡΠ² Ρ ΠΌΡΡΠ°ΡΡΠΉ, ΠΏΠΎΠΊΡΠ°ΡΡΡΡΠΈ Π΄ΠΎΡΠ²ΡΠ΄ ΡΠΎΠ·ΡΠΎΠ±Π½ΠΈΠΊΡΠ².
3. ΠΠΎΡΠ°ΡΠΎΠΊ ΡΠΎΠ±ΠΎΡΠΈ Π· GraphQL
ΠΡΠΎΠΊ 1: ΠΠ°Π»Π°ΡΡΡΠ²Π°Π½Π½Ρ ΡΠ΅ΡΠ²Π΅ΡΠ° GraphQL
Π©ΠΎΠ± ΠΏΠΎΡΠ°ΡΠΈ Π²ΠΈΠΊΠΎΡΠΈΡΡΠΎΠ²ΡΠ²Π°ΡΠΈ GraphQL, Π²Π°ΠΌ ΠΏΠΎΡΡΡΠ±Π½ΠΎ Π½Π°Π»Π°ΡΡΡΠ²Π°ΡΠΈ ΡΠ΅ΡΠ²Π΅Ρ GraphQL. Π¦Π΅ ΠΌΠΎΠΆΠ½Π° Π·ΡΠΎΠ±ΠΈΡΠΈ Π·Π° Π΄ΠΎΠΏΠΎΠΌΠΎΠ³ΠΎΡ ΡΡΠ·Π½ΠΈΡ ΠΌΠΎΠ² ΠΏΡΠΎΠ³ΡΠ°ΠΌΡΠ²Π°Π½Π½Ρ ΡΠ° ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΡΠ². ΠΠ°ΠΏΡΠΈΠΊΠ»Π°Π΄:
- Node.js: ΠΠΈΠΊΠΎΡΠΈΡΡΠΎΠ²ΡΠΉΡΠ΅ Apollo Server Π°Π±ΠΎ Express-GraphQL.
- Python: ΠΠΈΠΊΠΎΡΠΈΡΡΠΎΠ²ΡΠΉΡΠ΅ Graphene.
- Java: ΠΠΈΠΊΠΎΡΠΈΡΡΠΎΠ²ΡΠΉΡΠ΅ Spring Boot Π· GraphQL.
ΠΡΡ ΠΏΡΠΈΠΊΠ»Π°Π΄ Π½Π°Π»Π°ΡΡΡΠ²Π°Π½Π½Ρ ΠΏΡΠΎΡΡΠΎΠ³ΠΎ ΡΠ΅ΡΠ²Π΅ΡΠ° GraphQL Π· Node.js ΡΠ° Apollo Server:
const { ApolloServer, gql } = require('apollo-server');
// Define your type definitions
const typeDefs = gql`
type Query {
hello: String
}`;
// Define your resolvers
const resolvers = {
Query: {
hello: () => 'Hello, world!',
},
};
// Create the server
const server = new ApolloServer({ typeDefs, resolvers });
// Start the server
server.listen().then(({ url }) => {
console.log(`π Server ready at ${url}`);
});ΠΡΠΎΠΊ 2: ΠΠΈΠ·Π½Π°ΡΡΠ΅ Π²Π°ΡΡ ΡΡ Π΅ΠΌΡ
Π‘ΡΠ²ΠΎΡΡΡΡ ΡΡ Π΅ΠΌΡ, ΡΠΊΠ° ΠΎΠΏΠΈΡΡΡ ΡΠΈΠΏΠΈ, Π·Π°ΠΏΠΈΡΠΈ ΡΠ° ΠΌΡΡΠ°ΡΡΡ Π΄Π»Ρ Π²Π°ΡΠΎΡ ΠΌΠΎΠ΄Π΅Π»Ρ Π΄Π°Π½ΠΈΡ . ΠΡΠΎΡΡΠ° ΡΡ Π΅ΠΌΠ° ΠΌΠΎΠΆΠ΅ Π²ΠΈΠ³Π»ΡΠ΄Π°ΡΠΈ ΡΠ°ΠΊ:
type Book { title: String author: String } type Query { books: [Book] }ΠΡΠΎΠΊ 3: Π Π΅Π°Π»ΡΠ·ΡΠΉΡΠ΅ Π²ΠΈΡΡΡΡΠ²Π°ΡΡ
Π ΠΎΠ·Π²’ΡΠ·ΡΠ²Π°ΡΡ – ΡΠ΅ ΡΡΠ½ΠΊΡΡΡ, ΡΠΊΡ Π²ΡΠ΄ΠΏΠΎΠ²ΡΠ΄Π°ΡΡΡ Π·Π° ΠΏΠΎΠ²Π΅ΡΠ½Π΅Π½Π½Ρ Π΄Π°Π½ΠΈΡ Π΄Π»Ρ ΠΊΠΎΠΆΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ»Ρ Ρ ΡΡ Π΅ΠΌΡ. ΠΠΈ ΡΠ΅Π°Π»ΡΠ·ΡΡΡΠ΅ ΡΠΎΠ·Π²’ΡΠ·ΡΠ²Π°ΡΡ Π΄Π»Ρ ΠΎΡΡΠΈΠΌΠ°Π½Π½Ρ Π΄Π°Π½ΠΈΡ Π· Π²Π°ΡΠΎΡ Π±Π°Π·ΠΈ Π΄Π°Π½ΠΈΡ Π°Π±ΠΎ ΡΠ½ΡΠΎΠ³ΠΎ Π΄ΠΆΠ΅ΡΠ΅Π»Π° Π΄Π°Π½ΠΈΡ .
4. ΠΠ°ΠΏΠΈΡ Π΄Π°Π½ΠΈΡ
ΠΡΡΠ»Ρ ΡΠΎΠ³ΠΎ, ΡΠΊ Π²Π°Ρ ΡΠ΅ΡΠ²Π΅Ρ Π½Π°Π»Π°ΡΡΠΎΠ²Π°Π½ΠΎ Ρ Π²ΠΈΠ·Π½Π°ΡΠ΅Π½ΠΎ ΡΡ Π΅ΠΌΡ, Π²ΠΈ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΡΠ°ΡΠΈ Π·Π°ΠΏΠΈΡΡΠ²Π°ΡΠΈ Π΄Π°Π½Ρ Π·Π° Π΄ΠΎΠΏΠΎΠΌΠΎΠ³ΠΎΡ GraphQL. ΠΡΠΈΠΊΠ»Π°Π΄ Π·Π°ΠΏΠΈΡΡ Π΄Π»Ρ ΠΎΡΡΠΈΠΌΠ°Π½Π½Ρ ΠΊΠ½ΠΈΠ³ ΠΌΠΎΠΆΠ΅ Π²ΠΈΠ³Π»ΡΠ΄Π°ΡΠΈ ΡΠ°ΠΊ:
{ books { title author } }5. ΠΠΈΡΠ½ΠΎΠ²ΠΎΠΊ
GraphQL – ΡΠ΅ ΡΠ½Π½ΠΎΠ²Π°ΡΡΠΉΠ½ΠΈΠΉ ΠΏΡΠ΄Ρ ΡΠ΄ Π΄ΠΎ ΡΠΎΠ·ΡΠΎΠ±ΠΊΠΈ API, ΡΠΊΠΈΠΉ Π΄ΠΎΠ·Π²ΠΎΠ»ΡΡ ΠΊΠ»ΡΡΠ½ΡΠ°ΠΌ Π·Π°ΠΏΠΈΡΡΠ²Π°ΡΠΈ ΡΠ°ΠΌΠ΅ ΡΡ Π΄Π°Π½Ρ, ΡΠΊΡ ΡΠΌ ΠΏΠΎΡΡΡΠ±Π½Ρ, ΠΏΡΠ΄Π²ΠΈΡΡΡΡΠΈ ΠΏΡΠΎΠ΄ΡΠΊΡΠΈΠ²Π½ΡΡΡΡ Ρ ΠΏΠΎΠΊΡΠ°ΡΡΡΡΠΈ Π΄ΠΎΡΠ²ΡΠ΄ ΡΠΎΠ·ΡΠΎΠ±Π½ΠΈΠΊΡΠ². ΠΠΈΠΊΠΎΡΠΈΡΡΠΎΠ²ΡΡΡΠΈ ΡΠ°ΠΊΡ ΡΡΠ½ΠΊΡΡΡ, ΡΠΊ ΡΠΎΡΠ½Π° Π²ΠΈΠ±ΡΡΠΊΠ° Π΄Π°Π½ΠΈΡ , ΡΡΡΠΎΠ³ΠΎ ΡΠΈΠΏΡΠ·ΠΎΠ²Π°Π½Ρ ΡΡ Π΅ΠΌΠΈ ΡΠ° ΠΌΠΎΠΆΠ»ΠΈΠ²ΠΎΡΡΡ ΡΠΎΠ±ΠΎΡΠΈ Π² ΡΠ΅Π°Π»ΡΠ½ΠΎΠΌΡ ΡΠ°ΡΡ, Π²ΠΈ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΡΠ²ΠΎΡΡΠ²Π°ΡΠΈ Π΅ΡΠ΅ΠΊΡΠΈΠ²Π½Ρ ΡΠ° Π³Π½ΡΡΠΊΡ Π΄ΠΎΠ΄Π°ΡΠΊΠΈ. ΠΠΈΠ²ΡΠ°ΡΡΠΈ GraphQL, ΠΏΠΎΠ΄ΡΠΌΠ°ΠΉΡΠ΅, ΡΠΊ Π²ΠΎΠ½Π° ΠΌΠΎΠΆΠ΅ ΡΠΏΡΠΎΡΡΠΈΡΠΈ ΡΠΏΡΠ°Π²Π»ΡΠ½Π½Ρ Π΄Π°Π½ΠΈΠΌΠΈ Ρ Π²Π°ΡΠΈΡ ΠΏΡΠΎΠ΅ΠΊΡΠ°Ρ .
