π€ ΠΠΎΡΠ΅ΠΌΡ Π½ΠΎΠ²ΡΠΉ Gato GraphQL Π²ΡΡ ΠΎΠ΄ΠΈΠ» 1,5 Π³ΠΎΠ΄Π°?
ΠΠ΅ΡΡΠΈΡ 0.9 Gato GraphQL ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠΎ Π²ΡΡΠ»Π°. ΠΠ° ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΡ ΡΡΠ»ΠΎ ΠΏΠΎΡΡΠΈ 1,5 Π³ΠΎΠ΄Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΈ Π±ΠΎΠ»Π΅Π΅ 16 000 ΠΊΠΎΠΌΠΌΠΈΡΠΎΠ². ΠΡΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π΄ΠΎΠ»Π³ΠΎ!
ΠΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ ΠΊΠ°ΠΊ Ρ ΠΏΠΎΠ΄Π΅Π»ΠΈΠ»ΡΡ Π°Π½ΠΎΠ½ΡΠΎΠΌ Π½Π° Hacker News, ΠΌΠ½Π΅ Π·Π°Π΄Π°Π»ΠΈ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ Π²ΠΎΠΏΡΠΎΡ:
[...] ΠΠ½Π΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ ΡΠ·Π½Π°ΡΡ, ΡΡΠΎ ΠΏΠΎΡΡΠ΅Π±ΠΎΠ²Π°Π»ΠΎ 16k ΠΊΠΎΠΌΠΌΠΈΡΠΎΠ². ΠΡΠΎΠ΅ΠΊΡΡ, Π² ΠΊΠΎΡΠΎΡΡΡ Ρ ΡΡΠ°ΡΡΠ²ΠΎΠ²Π°Π», Ρ Π±ΠΎΠ»Π΅Π΅ ΡΠ΅ΠΌ Π΄Π΅ΡΡΡΡΡ ΡΡΡΡΡΠ°ΠΌΠΈ ΠΊΠΎΠΌΠΌΠΈΡΠΎΠ² ΠΈΠΌΠ΅Π»ΠΈ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π΄Π΅ΡΡΡΠΊΠΈ ΠΈΠ»ΠΈ ΡΠΎΡΠ½ΠΈ Π»ΡΠ΄Π΅ΠΉ, ΡΠ°Π±ΠΎΡΠ°ΡΡΠΈΡ ΠΏΠΎΠ»Π½ΡΠΉ ΡΠ°Π±ΠΎΡΠΈΠΉ Π΄Π΅Π½Ρ. [...] ΠΡΡΡ Π»ΠΈ ΠΊΠ°ΠΊΠ°Ρ-ΡΠΎ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡ, ΠΊΠΎΡΠΎΡΡΡ Π½ΡΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ ΠΏΡΠ΅ΠΎΠ΄ΠΎΠ»Π΅ΡΡ, ΠΎ ΠΊΠΎΡΠΎΡΠΎΠΉ Π² ΠΏΠΎΡΡΠ΅ Π½Π΅ Π³ΠΎΠ²ΠΎΡΠΈΡΡΡ?
ΠΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΊΠΎΠΌΠΌΠΈΡΠΎΠ² β Π½Π΅ ΠΎΡΠ΅Π½Ρ Π½Π°Π΄ΡΠΆΠ½Π°Ρ ΠΌΠ΅ΡΡΠΈΠΊΠ°, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Ρ ΠΌΠΎΠ³Ρ ΡΠ΄Π΅Π»Π°ΡΡ ΠΎΡΠ΅Π½Ρ ΠΏΡΠΎΡΡΠΎΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΈ Π·Π°ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°ΡΡ Π΅Π³ΠΎ ΠΊΠ°ΠΊ ΠΎΠ΄ΠΈΠ½ ΠΊΠΎΠΌΠΌΠΈΡ. ΠΠ½ΠΎΠ³ΠΈΠ΅ ΠΈΠ· ΡΡΠΈΡ
16k ΠΊΠΎΠΌΠΌΠΈΡΠΎΠ² Π±ΡΠ»ΠΈ ΠΊΠΎΠΌΠΌΠΈΡΠ°ΠΌΠΈ "typo" ΠΈΠ»ΠΈ ΠΏΡΠΎΡΡΠΎ ΡΠ»ΡΡΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ Π² ΠΊΠ°ΠΊΠΎΠΌ-Π½ΠΈΠ±ΡΠ΄Ρ README.
Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΊΠΎΠΌΠΌΠΈΡΠΎΠ² Π΄Π°ΡΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎ ΡΠ΅Π°Π»ΡΠ½ΡΡ
Π·Π°ΡΡΠ°ΡΠ΅Π½Π½ΡΡ
ΡΡΠΈΠ»ΠΈΡΡ
. ΠΡΠ»ΠΎ ΡΠ°ΠΊΠΆΠ΅ Π½Π΅ΠΌΠ°Π»ΠΎ ΠΊΠΎΠΌΠΌΠΈΡΠΎΠ², Π½Π°ΠΏΠΎΠ»Π½Π΅Π½Π½ΡΡ
ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡΠΌΠΈ, Π²ΠΊΠ»ΡΡΠ°Π²ΡΠΈΡ
Π΄Π΅ΡΡΡΠΊΠΈ ΠΈ Π΄Π°ΠΆΠ΅ ΡΠΎΡΠ½ΠΈ ΠΏΡΠ°Π²ΠΎΠΊ Π·Π° ΡΠ°Π·. ΠΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ Π²Π΅ΡΡΠΈΡΠΌΠΈ 0.8 ΠΈ 0.9 Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΎΠ³ΡΠΎΠΌΠ½Ρ, ΠΈ ΡΡΠΎΠ±Ρ ΠΈΡ
ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ, ΠΏΠΎΡΡΠ΅Π±ΠΎΠ²Π°Π»ΠΈΡΡ ΡΡΠΈΠ»ΠΈΡ ΠΈ Π²ΡΠ΅ΠΌΡ.
Π ΡΡΠΎΠΉ Π·Π°ΠΏΠΈΡΠΈ Π±Π»ΠΎΠ³Π° Ρ ΠΎΠΏΠΈΡΡ, ΡΡΠΎ ΡΡΠΎ Π·Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ, ΡΡΠΎΠ±Ρ ΠΎΠ±ΡΡΡΠ½ΠΈΡΡ, ΠΏΠΎΡΠ΅ΠΌΡ ΡΡΠΎ Π·Π°Π½ΡΠ»ΠΎ ΡΠ°ΠΊ ΠΌΠ½ΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ. Π, Π΄Π΅Π»Π°Ρ ΡΡΠΎ, Ρ ΡΠ°ΠΊΠΆΠ΅ Π΄Π°ΠΌ ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΡΠΉ ΠΎΠ±Π·ΠΎΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ
ΡΠ°ΡΡΠΈΡΠ΅Π½Π½ΡΡ
Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ»ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ Π² ΠΊΠΎΠ΄ΠΎΠ²ΡΡ Π±Π°Π·Ρ ΠΈ ΡΠ²ΠΈΠ΄ΡΡ ΡΠ²Π΅Ρ Π² ΠΏΡΠ΅Π΄ΡΡΠΎΡΡΠ΅ΠΉ Π²Π΅ΡΡΠΈΠΈ 1.0.
ΠΡΡΠΎΡΠΈΡ GraphQL-ΡΠ΅ΡΠ²Π΅ΡΠ°
ΠΠ»Ρ Π½Π°ΡΠ°Π»Π° ΠΏΠΎΠ΄Π΅Π»ΡΡΡ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΈΡΡΠΎΡΠΈΠ΅ΠΉ Π΄Π²ΠΈΠΆΠΊΠ° ΠΈ ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΈΠΌΠΈ Π΄Π΅ΡΠ°Π»ΡΠΌΠΈ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΎΠ½ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ.
(ΠΡΠΎ Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ Π°ΠΊΡΡΠ°Π»ΡΠ½ΠΎ Π΄Π»Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ²; Π΅ΡΠ»ΠΈ Π²Π°Ρ Π½Π΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΡΡ ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΠΈ, ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΉΡΠΈ ΠΊ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌΡ ΡΠ°Π·Π΄Π΅Π»Ρ.)
Gato GraphQL ΠΎΡΠ½ΠΎΠ²Π°Π½ Π½Π° PoP β Π΄Π²ΠΈΠΆΠΊΠ΅, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ΅Π½Π΄Π΅ΡΠΈΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ Π½Π° PHP (Π°Π½Π°Π»ΠΎΠ³ React ΠΈΠ»ΠΈ Vue Π½Π° JavaScript). ΠΠ³ΠΎ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡ ΠΎΡ ΡΡΠΎΠ³ΠΎ Π΄Π²ΠΈΠΆΠΊΠ° Π°Π±ΡΠΎΠ»ΡΡΠ½Π°, ΠΏΠΎΡΡΠΎΠΌΡ ΠΏΠ»Π°Π³ΠΈΠ½ ΡΠ°Π·ΠΌΠ΅ΡΡΠ½ Π² ΠΌΠΎΠ½ΠΎΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ GatoGraphQL/GatoGraphQL Π½Π° GitHub.
ΠΠΎΠ΄ ΠΊΠ°ΠΏΠΎΡΠΎΠΌ ΡΡΠ° Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
Gato GraphQL ΡΠ°Π·ΡΠ΅ΡΠ°Π΅Ρ GraphQL-Π·Π°ΠΏΡΠΎΡ, ΡΠ½Π°ΡΠ°Π»Π° ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΡ Π΅Π³ΠΎ Π² ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΠ½ΡΡ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΡ PoP Π·Π°ΡΠ΅ΠΌ ΡΠ°Π·ΡΠ΅ΡΠ°Π΅Ρ, ΠΏΠΎΠ»ΡΡΠ°Ρ Π²ΡΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ Π΄Π°Π½Π½ΡΠ΅, Π° Π·Π°ΡΠ΅ΠΌ ΡΡΠΈΠΌ Π΄Π°Π½Π½ΡΠΌ ΠΏΡΠΈΠ΄Π°ΡΡΡΡ ΡΠΎΡΠΌΠ° GraphQL-Π·Π°ΠΏΡΠΎΡΠ°.
ΠΠΎΠ³Π΄Π° Ρ Π½Π°ΡΠ°Π» ΡΠ°Π±ΠΎΡΠ°ΡΡ Π½Π°Π΄ PoP ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ Π² 2013/2014 Π³ΠΎΠ΄Ρ, GraphQL Π΅ΡΡ Π½Π΅ ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°Π», ΠΈ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ»ΠΎΠ³ΠΈΡ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ² Π² Π΄Π°Π½Π½ΡΠ΅ Π±ΡΠ»Π° ΡΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½Π° ΠΈ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° Ρ Π½ΡΠ»Ρ. ΠΡΡΡΡΡΡΠ²ΠΈΠ΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ Π΄Π»Ρ ΠΏΠΎΠ΄ΡΠ°ΠΆΠ°Π½ΠΈΡ (ΡΠ°ΠΊΠΎΠΉ ΠΊΠ°ΠΊ GraphQL Π΄Π»Ρ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΠΉ ΠΈ ΡΡΠ°Π»ΠΎΠ½Π½ΡΠΉ ΠΏΡΠΎΠ΅ΠΊΡ graphql-js Π΄Π»Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ) Π±ΡΠ»ΠΎ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΠΈ ΠΏΠΎΠΌΠ΅Ρ
ΠΎΠΉ, ΠΈ Π±Π»Π°Π³ΠΎΠΌ, ΠΊΠ°ΠΊ Ρ ΠΎΠ±ΡΡΡΠ½Ρ ΠΏΠΎΠ·ΠΆΠ΅.
PoP ΠΈΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎ Π±ΡΠ» ΡΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ Π΄Π»Ρ ΡΠ΅Π½Π΄Π΅ΡΠΈΠ½Π³Π° Π²ΡΠ΅Π³ΠΎ Π²Π΅Π±-ΡΠ°ΠΉΡΠ° Π² Π²ΠΈΠ΄Π΅ HTML Π½Π° ΡΡΠΎΡΠΎΠ½Π΅ ΡΠ΅ΡΠ²Π΅ΡΠ°, ΠΏΡΠΈ ΡΡΠΎΠΌ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡ ΡΡΡΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ Π² ΡΠΎΡΠΌΠ°ΡΠ΅ JSON ΠΏΡΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ ?output=json ΠΊ URL ΡΡΡΠ°Π½ΠΈΡΡ, Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π²ΡΠ±ΠΈΡΠ°ΡΡ, ΠΊΠ°ΠΊΠΈΠ΅ Π΄Π°Π½Π½ΡΠ΅ ΠΏΠΎΠ»ΡΡΠ°ΡΡ (Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ, Π΄Π°Π½Π½ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΠ), ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ URL.
ΠΠΎΠΆΠ°Π»ΡΠΉΡΡΠ°, ΠΏΠ΅ΡΠ΅ΠΉΠ΄ΠΈΡΠ΅ ΠΏΠΎ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΡΡΡΠ»ΠΊΠ°ΠΌ (Π²ΡΠ΅ ΠΎΠ½ΠΈ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ Π½Π° ΠΎΠ΄Π½Ρ ΠΈ ΡΡ ΠΆΠ΅ Π²Π΅Π±-ΡΡΡΠ°Π½ΠΈΡΡ, ΡΠΎΠ»ΡΠΊΠΎ Ρ ΡΠ°Π·Π½ΡΠΌΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°ΠΌΠΈ URL) ΠΈ ΠΎΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΡΠ°Π·Π»ΠΈΡΠΈΡ:
- HTML-ΠΊΠΎΠ½ΡΠ΅Π½Ρ: mesym.com/en/posts/
- Π‘ΡΡΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ JSON (Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ + ΠΠ): mesym.com/en/posts/?output=json
- Π‘ΡΡΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ JSON (ΠΠ): mesym.com/en/posts/?output=json&module=data
ΠΡΠΈ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄Π΅ ΠΏΠΎ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΉ ΡΡΡΠ»ΠΊΠ΅ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡ ΠΎΡΠΎΠ·Π½Π°Π½ΠΈΠ΅: ΡΡΠΎ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ GraphQL! ΠΠ΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎΠ΅ Π±ΠΎΠ»ΡΡΠΎΠ΅ ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΡΠΎΡΡΠΎΠΈΡ Π² ΡΠΎΠΌ, ΡΡΠΎ Π΄Π°Π½Π½ΡΠ΅ Π² ΠΎΡΠ²Π΅ΡΠ΅ Π½Π΅ΡΠ²Π½Ρ β ΠΎΠ½ΠΈ ΡΠΆΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Ρ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°ΠΌΠΈ (Π½Π° PHP), ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ»ΠΈ Π²ΠΊΠ»ΡΡΠ΅Π½Ρ Π½Π° ΡΡΡΠ°Π½ΠΈΡΡ. GraphQL ΠΆΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π½Π°ΠΌ ΡΠ΅ΡΠ°ΡΡ, ΠΊΠ°ΠΊΠΈΠ΅ Π΄Π°Π½Π½ΡΠ΅ ΠΏΠΎΠ»ΡΡΠ°ΡΡ, Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π·Π°ΠΏΡΠΎΡΠ°.
ΠΠΎΡΡΠΎΠΌΡ, ΠΊΠΎΠ³Π΄Π° Ρ ΡΠ·Π½Π°Π» ΠΎ GraphQL ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ Π² 2019 Π³ΠΎΠ΄Ρ, Π΄Π»Ρ ΠΌΠ΅Π½Ρ Π±ΡΠ»ΠΎ ΠΎΡΠ΅Π²ΠΈΠ΄Π½ΠΎ, ΡΡΠΎ PoP ΡΠΎΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΡΠ°ΡΡ GraphQL-ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ. ΠΡΡ, ΡΡΠΎ Π΅ΠΌΡ Π½ΡΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ, β ΠΏΡΠΈΠ½ΡΡΡ GraphQL-Π·Π°ΠΏΡΠΎΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π²Ρ ΠΎΠ΄Π½ΡΡ Π΄Π°Π½Π½ΡΡ ΠΈ Π½Π° Π»Π΅ΡΡ ΡΠΎΠ·Π΄Π°ΡΡ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ² Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ Π·Π°ΠΏΡΠΎΡΠ°.
Π ΡΡΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΠΎ, ΡΡΠΎ Ρ ΡΠ΄Π΅Π»Π°Π». Π ΡΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π»ΠΎ Ρ ΠΎΡΠΎΡΠΎ. ΠΠΎ Π±ΡΠ»ΠΎ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ PoP ΠΏΠΎΠ½ΠΈΠΌΠ°Π» ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ ΡΠΎΡΠΌΠ°Ρ Π²Ρ ΠΎΠ΄Π½ΡΡ Π΄Π°Π½Π½ΡΡ , ΠΏΠΎΡΡΠΎΠΌΡ GraphQL-Π·Π°ΠΏΡΠΎΡ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΠ»ΠΎΡΡ Π°Π΄Π°ΠΏΡΠΈΡΠΎΠ²Π°ΡΡ ΠΊ ΡΠΎΡΠΌΠ°ΡΡ PoP:
- Π Π°Π·ΠΎΠ±ΡΠ°ΡΡ GraphQL-Π·Π°ΠΏΡΠΎΡ; Π·Π°ΡΠ΅ΠΌ
- ΠΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°ΡΡ Π·Π°ΠΏΡΠΎΡ Π² ΡΠΎΡΠΌΠ°Ρ PoP; Π·Π°ΡΠ΅ΠΌ
- Π Π°Π·ΠΎΠ±ΡΠ°ΡΡ ΡΠΎΡΠΌΠ°Ρ PoP
Π Π°Π·Π±ΠΎΡ GraphQL-Π·Π°ΠΏΡΠΎΡΠ° ΡΠΎΠ³Π΄Π° Π²ΡΠΏΠΎΠ»Π½ΡΠ»ΡΡ Π΄Π²Π°ΠΆΠ΄Ρ (ΠΎΠ΄ΠΈΠ½ ΡΠ°Π· Π΄Π»Ρ GraphQL, ΠΎΠ΄ΠΈΠ½ ΡΠ°Π· Π΄Π»Ρ PoP), Π° ΡΠΎΡΠΌΠ°Ρ PoP Π½Π΅ ΡΠ°Π·ΡΠ΅ΡΠ°Π»ΡΡ ΡΠ΅ΡΠ΅Π· AST, Π° ΠΏΡΠΎΡΡΠΎ ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²ΠΎΠΌ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΠ³ΠΎ ΡΠ°Π·Π±ΠΎΡΠ° ΡΡΡΠΎΠΊΠΈ Π·Π°ΠΏΡΠΎΡΠ° ΡΠ½ΠΎΠ²Π° ΠΈ ΡΠ½ΠΎΠ²Π°. (ΠΡΡΡΡΡΡΠ²ΠΈΠ΅ AST Π±ΡΠ»ΠΎ ΡΠΆΠ°ΡΠ½ΡΠΌ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ, Π½ΠΎ Ρ ΠΌΠ΅Π½Ρ Π½Π΅ Π±ΡΠ»ΠΎ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ Π΄Π»Ρ ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ, ΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΠ»Π° ΠΎΡΠ³Π°Π½ΠΈΡΠ΅ΡΠΊΠΈ, Π³Π΄Π΅ ΠΏΡΠΎΡΡΠΎΠΉ substr(...) ΡΠ΅ΡΠ°Π» ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΠΊΠ°ΠΆΠ΄ΡΠΉ Π΄Π΅Π½Ρ.)
ΠΠΎΡ ΠΏΠΎΡΠ΅ΠΌΡ Ρ Π³ΠΎΠ²ΠΎΡΡ, ΡΡΠΎ ΠΎΡΡΡΡΡΡΠ²ΠΈΠ΅ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ GraphQL Π±ΡΠ»ΠΎ ΠΏΠΎΠΌΠ΅Ρ
ΠΎΠΉ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΌΠΎΡ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π±ΡΠ»ΠΎ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΡΠΌ (ΠΈ ΡΠ°ΠΊΠΈΠΌ Π±ΡΠ»ΠΎ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄Π΅Π» Π² Π²Π΅ΡΡΠΈΠΈ 0.8). ΠΠΎΡΡΠΎΠΌΡ Ρ ΡΠ΅ΡΠΈΠ» ΡΡΠΎ ΠΈΡΠΏΡΠ°Π²ΠΈΡΡ.
ΠΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Π²ΠΈΠΆΠΊΠ° Π² GraphQL-first
Π Π΅ΡΠ΅Π½ΠΈΠ΅, Π½Π° ΠΊΠΎΡΠΎΡΠΎΠΌ Ρ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΠ»ΡΡ, β Π·Π°ΡΡΠ°Π²ΠΈΡΡ PoP Π½Π°ΡΠΈΠ²Π½ΠΎ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ ΡΠ·ΡΠΊΠΎΠΌ GraphQL. Π’ΠΎΠ³Π΄Π° ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ° GraphQL-Π·Π°ΠΏΡΠΎΡΠ° Π² PoP Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π²Ρ ΠΎΠ΄Π½ΡΡ Π΄Π°Π½Π½ΡΡ ΡΠΆΠ΅ Π±ΡΠ΄Π΅Ρ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½Π° Π² ΠΌΠΎΠ΄Π΅Π»Ρ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ², Π±Π΅Π· Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΠΊΠ°ΠΊΠΈΡ -Π»ΠΈΠ±ΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ Π°Π΄Π°ΠΏΡΠ΅ΡΠΎΠ² ΠΈΠ»ΠΈ Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ ΡΠ°Π±ΠΎΡΡ.
ΠΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π»ΠΎ, ΡΡΠΎ ΠΏΡΠΎΠ΅ΠΊΡ PoP Π½ΡΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ ΠΏΠ΅ΡΠ΅ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°ΡΡ: ΠΈΠ· PHP-Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠ΅Π½Π΄Π΅ΡΠΈΠ»Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ Π΄Π»Ρ Π²Π΅Π±-ΡΠ°ΠΉΡΠΎΠ² Π½Π° ΡΡΠΎΡΠΎΠ½Π΅ ΡΠ΅ΡΠ²Π΅ΡΠ° ΠΈ Π±ΡΠ»Π° Π°Π΄Π°ΠΏΡΠΈΡΠΎΠ²Π°Π½Π° Π΄Π»Ρ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΡ GraphQL-Π·Π°ΠΏΡΠΎΡΠΎΠ², ΠΎΠ½Π° Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΠ»Π° ΡΡΠ°ΡΡ Π½Π°ΡΡΠΎΡΡΠΈΠΌ GraphQL-ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ.
ΠΠΎΠ΄ΠΎΠ²Π°Ρ Π±Π°Π·Π° ΠΏΡΠ΅ΡΠ΅ΡΠΏΠ΅Π»Π° ΠΌΠ°ΡΡΡΠ°Π±Π½ΡΠ΅ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ: GraphQL AST ΡΡΠ°Π» ΠΎΡΠ½ΠΎΠ²ΠΎΠΉ Π΄Π»Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ Π²ΡΠ΅ΠΌΠΈ PHP-ΡΠ΅ΡΠ²ΠΈΡΠ°ΠΌΠΈ Π² Π΄Π²ΠΈΠΆΠΊΠ΅. ΠΠ±ΡΠ΅ΠΊΡΡ GraphQL AST ΡΠ΅ΠΏΠ΅ΡΡ ΡΠ²Π»ΡΡΡΡΡ Π²Ρ ΠΎΠ΄Π½ΡΠΌΠΈ Π΄Π°Π½Π½ΡΠΌΠΈ Π΄Π»Ρ PoP (Π²ΠΌΠ΅ΡΡΠΎ ΡΡΡΠΎΠΊ Π·Π°ΠΏΡΠΎΡΠΎΠ²).
ΠΡΡΠ³ΠΈΠ΅ GraphQL-ΡΠ΅ΡΠ²Π΅ΡΡ Π½Π° PHP ΠΎΠΏΠΈΡΠ°ΡΡΡΡ Π½Π° graphql-php, Π½ΠΎ ΠΏΠ»Π°Π³ΠΈΠ½ Gato GraphQL β Π½Π΅Ρ. ΠΡΠΎ ΠΏΠ»ΠΎΡ
Π°Ρ Π½ΠΎΠ²ΠΎΡΡΡ Ρ ΡΠΎΡΠΊΠΈ Π·ΡΠ΅Π½ΠΈΡ ΡΡΠΈΠ»ΠΈΠΉ Π½Π° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΡ (ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Ρ Π½Π΅ ΠΌΠΎΠ³Ρ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΎ, ΡΡΠΎ Π·Π°ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π» ΠΊΡΠΎ-ΡΠΎ Π΄ΡΡΠ³ΠΎΠΉ), Π½ΠΎ Ρ
ΠΎΡΠΎΡΠ°Ρ Π½ΠΎΠ²ΠΎΡΡΡ Ρ ΡΠΎΡΠΊΠΈ Π·ΡΠ΅Π½ΠΈΡ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ: Ρ ΠΌΠΎΠ³Ρ ΡΠ΅ΡΠ°ΡΡ, Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ Π»ΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π² ΠΌΠΎΠΉ ΠΏΠ»Π°Π³ΠΈΠ½ Π² ΡΠ²ΠΎΡΠΌ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎΠΌ ΡΠ΅ΠΌΠΏΠ΅ ΠΈ ΠΏΠΎ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎΠΌΡ ΡΡΠΌΠΎΡΡΠ΅Π½ΠΈΡ (ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΏΠΎΡΡΠΎΠΌΡ ΠΏΠ»Π°Π³ΠΈΠ½ ΡΠΆΠ΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ Π²Ρ
ΠΎΠ΄Π½ΠΎΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ Β«oneofΒ»).
Π, ΠΊΠ°ΠΊ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² ΡΠ°Π·Π΄Π΅Π»Π΅ Π½ΠΈΠΆΠ΅, ΡΡΠΎ Π±ΠΎΠ»ΡΡΠΎΠ΅ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²ΠΎ.
ΠΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»ΡΠ½ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ Π² GraphQL
GraphQL ΠΎΠ±ΡΡΠ½ΠΎ Π°ΡΡΠΎΡΠΈΠΈΡΡΠ΅ΡΡΡ Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ΠΌ Π΄Π°Π½Π½ΡΡ . Π Π°Π·ΡΠΌΠ΅Π΅ΡΡΡ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π»ΡΠ±ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ (ΠΏΠΎΡΡΡ, ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ, ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ ΠΈ Ρ. Π΄.) ΠΈΠ· Gato GraphQL:
query {
posts(
pagination: { limit: 5, offset: 20 }
sort: { by: DATE, order: ASC }
) {
id
title
content
url
author {
id
name
url
}
comments {
id
date
content
}
}
}ΠΠΎ ΡΡΠΎ Π½ΠΈΠ·ΠΊΠΎ Π²ΠΈΡΡΡΠΈΠΉ ΠΏΠ»ΠΎΠ΄. GraphQL ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ ΠΌΠ½ΠΎΠ³ΠΈΡ Π΄ΡΡΠ³ΠΈΡ Π·Π°Π΄Π°Ρ, Π²ΠΊΠ»ΡΡΠ°Ρ ΠΌΠ°Π½ΠΈΠΏΡΠ»ΡΡΠΈΡ ΠΈ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Π°Π½Π½ΡΡ , ΠΈ Π΄Π°ΠΆΠ΅ ΡΠ°Π·ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ GraphQL Π² ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΠ΅ Π΄Π»Ρ ΠΏΠΎΡΡΠ΅Π΄Π½ΠΈΡΠ΅ΡΡΠ²Π° ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ΅ΡΠ²ΠΈΡΠ°ΠΌΠΈ.
ΠΠΎΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ², Π³Π΄Π΅ GraphQL ΠΏΠΎΠ»Π΅Π·Π΅Π½:
- ΠΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠΎΠ² (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ Ρ ΡΠ°ΠΉΡΠΎΠ² WordPress ΠΈ ΠΊΠΎΠ½ΡΠ°ΠΊΡΠ½ΡΡ Π΄Π°Π½Π½ΡΡ ΡΠ°ΡΡΡΠ»ΠΊΠΈ ΠΈΠ· Mailchimp), ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½ΡΡ ΠΈ ΠΈΡ ΡΠΎΠ²ΠΌΠ΅ΡΡΠ½ΡΠΉ Π°Π½Π°Π»ΠΈΠ· ΠΊΠ°ΠΊ Π΅Π΄ΠΈΠ½ΠΎΠ³ΠΎ Π½Π°Π±ΠΎΡΠ° Π΄Π°Π½Π½ΡΡ
- ΠΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ Π΄Π»Ρ Π°Π΄Π°ΠΏΡΠ°ΡΠΈΠΈ ΠΊΠΎΠ½ΡΠ΅Π½ΡΠ° Π½Π° ΡΠ°ΠΉΡΠ΅:
- ΠΠ΄ΠΈΠ½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΠΏΡΠΈ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠ΅ ΡΠ°ΠΉΡΠ° Π½Π° Π΄ΡΡΠ³ΠΎΠΉ Π΄ΠΎΠΌΠ΅Π½ ΠΈ Π·Π°ΠΌΠ΅Π½Π΅
"www.myoldsite.com"Π½Π°"mynewsite.com"Π²Π΅Π·Π΄Π΅ Π² ΠΊΠΎΠ½ΡΠ΅Π½ΡΠ΅ ΠΈ ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΡΡ - ΠΠ° ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎΠΉ ΠΎΡΠ½ΠΎΠ²Π΅, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ Π΄Π»Ρ Π·Π°ΠΌΠ΅Π½Ρ Π»ΡΠ±ΠΎΠ³ΠΎ
"http://"Π½Π°"https://"ΠΏΡΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΠΈ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠΎΡΡΠ° Π°Π²ΡΠΎΡΠΎΠΌ
- ΠΠ΄ΠΈΠ½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΠΏΡΠΈ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠ΅ ΡΠ°ΠΉΡΠ° Π½Π° Π΄ΡΡΠ³ΠΎΠΉ Π΄ΠΎΠΌΠ΅Π½ ΠΈ Π·Π°ΠΌΠ΅Π½Π΅
- ΠΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΊ Google Translate API Π΄Π»Ρ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄Π° Π²ΡΠ΅Ρ Π·Π°ΠΏΠΈΡΠ΅ΠΉ Π±Π»ΠΎΠ³Π° Π½Π° Π΄ΡΡΠ³ΠΎΠΉ ΡΠ·ΡΠΊ
- ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠ°Ρ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΡ ΡΠ²ΠΈΡΠ° ΠΏΠΎΡΠ»Π΅ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΠΈ Π·Π°ΠΏΠΈΡΠΈ Π² Π±Π»ΠΎΠ³Π΅
PoP Π±ΡΠ» ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π½ Π΄Π»Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ ΡΡΠΈΡ Π΄ΡΡΠ³ΠΈΡ ΡΡΠ΅Π½Π°ΡΠΈΠ΅Π² ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²ΠΎΠΌ ΡΡΠ½ΠΊΡΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ (Π΅ΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎ) Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΡΡ GraphQL, ΡΠ°ΠΊΠΈΡ ΠΊΠ°ΠΊ:
- ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΠΏΠΎΠ»Π΅ΠΉ Β«ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΠΈΒ» (Π² Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊ ΠΏΠΎΠ»ΡΠΌ Β«Π΄Π°Π½Π½ΡΡ Β»), ΠΊΠΎΡΠΎΡΡΠ΅ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡΡΡ ΠΊΠΎ Π²ΡΠ΅ΠΌ ΡΠΈΠΏΠ°ΠΌ Π² ΡΡ Π΅ΠΌΠ΅
- ΠΠ΅ΡΠ΅Π΄Π°ΡΠ° ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ° ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ»Ρ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π²Ρ ΠΎΠ΄Π½ΡΡ Π΄Π°Π½Π½ΡΡ Π΄ΡΡΠ³ΠΎΠΌΡ ΠΏΠΎΠ»Ρ Π² ΡΠΎΠΌ ΠΆΠ΅ Π·Π°ΠΏΡΠΎΡΠ΅
- ΠΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠ° Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ² Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΠΎΠ΄Π½Π° Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Π° ΠΈΠ·ΠΌΠ΅Π½ΡΠ»Π° ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π΄ΡΡΠ³ΠΎΠΉ Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Ρ
- ΠΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Ρ ΠΈΠ»ΠΈ Π½Π΅Ρ, ΠΎΡΠ½ΠΎΠ²Π°Π½Π½ΠΎΠ΅ Π½Π° Π·Π½Π°ΡΠ΅Π½ΠΈΠΈ ΠΏΠΎΠ»Ρ
Π Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΠΎ Π½Π΅ Ρ ΠΎΡΠ΅Π» ΡΠ΄Π°Π»ΡΡΡ ΡΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈΠ· GraphQL-ΡΠ΅ΡΠ²Π΅ΡΠ°: Ρ ΡΠΆΠ΅ Π·Π°ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π» ΠΈΡ , ΠΈ ΠΎΠ½ΠΈ Π±Π΅Π·ΡΡΠ»ΠΎΠ²Π½ΠΎ ΡΠ΅Π½Π½Ρ.
ΠΡΠ°ΠΊ, Π²ΡΠΎΡΠ°Ρ ΠΏΡΠΈΡΠΈΠ½Π°, ΠΏΠΎ ΠΊΠΎΡΠΎΡΠΎΠΉ v0.9 Π·Π°Π½ΡΠ»Π° ΡΠ°ΠΊ ΠΌΠ½ΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ, Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΌΠ½Π΅ ΡΠ°ΠΊΠΆΠ΅ Π½ΡΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ Π½Π°ΠΉΡΠΈ ΡΠΏΠΎΡΠΎΠ± Π²ΠΊΠ»ΡΡΠΈΡΡ ΡΡΠΈ Π½ΠΎΠ²ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π² GraphQL ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΡΠΎΠ±Ρ Π½Π΅ Π½Π°ΡΡΡΠΈΡΡ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ GraphQL (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π²Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π½ΠΎΠ²ΡΡ
ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² Π² ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ GraphQL Π±ΡΠ»ΠΎ Π½Π΅ΠΏΡΠΈΠ΅ΠΌΠ»Π΅ΠΌΠΎ).
ΠΡΠΈΠΌΠ΅Ρ ΠΌΠ°Π½ΠΈΠΏΡΠ»ΡΡΠΈΠΈ Π΄Π°Π½Π½ΡΠΌΠΈ Π² GraphQL
ΠΠΎΠ²ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ, Π²Π²Π΅Π΄ΡΠ½Π½ΡΠ΅ Π² GraphQL Π² ΠΏΠ»Π°Π³ΠΈΠ½Π΅, ΡΡΠ°Π½ΡΡ Π±ΠΎΠ»Π΅Π΅ Π·Π°ΠΌΠ΅ΡΠ½ΡΠΌΠΈ Π² Π±Π»ΠΈΠΆΠ°ΠΉΡΠ΅ΠΌ Π±ΡΠ΄ΡΡΠ΅ΠΌ, ΠΊΠΎΠ³Π΄Π° Π²ΡΠΉΠ΄Π΅Ρ Π²Π΅ΡΡΠΈΡ 1.0. ΠΠΎ Π²Ρ ΡΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΎΡΡΡΠΈΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠ· Π½ΠΈΡ
.
Π‘Π»Π΅Π΄ΡΡΡΠΈΠΉ GraphQL-Π·Π°ΠΏΡΠΎΡ ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ ΡΠΏΠΈΡΠΎΠΊ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΡ
Π·Π°ΠΏΠΈΡΠ΅ΠΉ ΠΈΠ· Π²Π½Π΅ΡΠ½Π΅Π³ΠΎ REST API (ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ½ΠΎ @remove-ΠΈΡΡ ΠΈΠ· ΠΎΡΠ²Π΅ΡΠ°); ΠΏΠΎΠ΄Π°ΡΡ ΡΡΠΈ Π΄Π°Π½Π½ΡΠ΅ Π² Π΄ΡΡΠ³ΠΎΠ΅ ΠΏΠΎΠ»Π΅ ΠΏΡΡΠΌΠΎ Π² ΡΠΎΠΌ ΠΆΠ΅ Π·Π°ΠΏΡΠΎΡΠ΅; ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅Ρ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ email ΠΈΠ· ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π·Π°ΠΏΠΈΡΠΈ; ΠΈ Π½Π°ΠΊΠΎΠ½Π΅Ρ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ΅Ρ email Π² Π²Π΅ΡΡ
Π½ΠΈΠΉ ΡΠ΅Π³ΠΈΡΡΡ, Π½ΠΎ ΡΠΎΠ»ΡΠΊΠΎ Π΅ΡΠ»ΠΈ ΡΠ·ΡΠΊ Π² ΡΠΎΠΉ ΠΆΠ΅ Π·Π°ΠΏΠΈΡΠΈ β Π°Π½Π³Π»ΠΈΠΉΡΠΊΠΈΠΉ ΠΈΠ»ΠΈ Π½Π΅ΠΌΠ΅ΡΠΊΠΈΠΉ:
###################################################################
# Fetch data from a REST endpoint, extract the emails, and make
# uppercase those ones from users with a special language.
###################################################################
query ExtractEmailsFromAPIAndUpperCaseSpecialOnes
{
# Retrieve data from a REST API endpoint
userEntries: _sendJSONObjectCollectionHTTPRequest(
input: {
url: "https://newapi.getpop.org/wp-json/newsletter/v1/subscriptions"
}
) # @remove # <= Uncomment this directive to not print the API data
emails: _echo(value: $__userEntries)
# Iterate all the entries, passing every entry
# (under the dynamic variable $userEntry)
# to each of the next 4 directives
@underEachArrayItem(
passValueOnwardsAs: "userEntry"
affectDirectivesUnderPos: [1, 2, 3, 4]
)
# Extract property "lang" from the entry
# via the functionality field `_objectProperty`,
# and pass it onwards as dynamic variable $userLang
@applyField(
name: "_objectProperty"
arguments: {
object: $userEntry,
by: {
key: "lang"
}
}
passOnwardsAs: "userLang"
)
# Execute functionality field `_inArray` to find out
# if $userLang is either "en" or "de", and place the
# result under dynamic variable $isSpecialLang
@applyField(
name: "_inArray"
arguments: {
value: $userLang,
array: ["en", "de"]
}
passOnwardsAs: "isSpecialLang"
)
# Extract property "email" from the entry
# and set it back as the value for that entry
@applyField(
name: "_objectProperty"
arguments: {
object: $userEntry,
by: {
key: "email"
}
}
setResultInResponse: true
)
# If $isSpecialLang is `true` then execute
# directive `@strUpperCase`
@if(condition: $isSpecialLang)
@strUpperCase
}ΠΠΎΡ ΠΎΡΠ²Π΅Ρ (ΠΎΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΠΊΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΡΠ΅ email Π±ΡΠ»ΠΈ ΠΏΠ΅ΡΠ΅Π²Π΅Π΄Π΅Π½Ρ Π² Π²Π΅ΡΡ Π½ΠΈΠΉ ΡΠ΅Π³ΠΈΡΡΡ):
{
"data": {
"userEntries": [
{
"email": "abracadabra@ganga.com",
"lang": "de"
},
{
"email": "longon@caramanon.com",
"lang": "es"
},
{
"email": "rancotanto@parabara.com",
"lang": "en"
},
{
"email": "quezarapadon@quebrulacha.net",
"lang": "fr"
},
{
"email": "test@test.com",
"lang": "de"
},
{
"email": "emilanga@pedrola.com",
"lang": "fr"
}
],
"emails": [
"ABRACADABRA@GANGA.COM",
"longon@caramanon.com",
"RANCOTANTO@PARABARA.COM",
"quezarapadon@quebrulacha.net",
"TEST@TEST.COM",
"emilanga@pedrola.com"
]
}
}ΠΡΠΎΠ²Π΅ΡΡΡΠ΅ ΡΠ°ΠΌΠΈ! ΠΠ°ΠΆΠΌΠΈΡΠ΅ ΠΊΠ½ΠΎΠΏΠΊΡ Β«RunΒ», ΡΡΠΎΠ±Ρ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ Π·Π°ΠΏΡΠΎΡ:
###################################################################
# Fetch data from a REST endpoint, extract the emails, and make
# uppercase those ones from users with a special language.
###################################################################
query ExtractEmailsFromAPIAndUpperCaseSpecialOnes {
# Retrieve data from a REST API endpoint
userEntries: _sendJSONObjectCollectionHTTPRequest(
input: {
url: "https://newapi.getpop.org/wp-json/newsletter/v1/subscriptions"
}
)
# @remove # <= Uncomment this directive to not print the API data
emails: _echo(value: $__userEntries)
# Iterate all the entries, passing every entry
# (under the dynamic variable $userEntry)
# to each of the next 4 directives
@underEachArrayItem(
passValueOnwardsAs: "userEntry"
affectDirectivesUnderPos: [1, 2, 3, 4]
)
# Extract property "lang" from the entry
# via the functionality field `_objectProperty`,
# and pass it onwards as dynamic variable $userLang
@applyField(
name: "_objectProperty"
arguments: { object: $userEntry, by: { key: "lang" } }
passOnwardsAs: "userLang"
)
# Execute functionality field `_inArray` to find out
# if $userLang is either "en" or "de", and place the
# result under dynamic variable $isSpecialLang
@applyField(
name: "_inArray"
arguments: { value: $userLang, array: ["en", "de"] }
passOnwardsAs: "isSpecialLang"
)
# Extract property "email" from the entry
# and set it back as the value for that entry
@applyField(
name: "_objectProperty"
arguments: { object: $userEntry, by: { key: "email" } }
setResultInResponse: true
)
# If $isSpecialLang is `true` then execute
# directive `@strUpperCase`
@if(condition: $isSpecialLang)
@strUpperCase
}Π― ΡΠΏΠΎΠΌΠΈΠ½Π°Π», ΡΡΠΎ ΠΎΡΡΡΡΡΡΠ²ΠΈΠ΅ ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ² Π² Π²ΠΈΠ΄Π΅ GraphQL Π±ΡΠ»ΠΎ ΠΏΠΎΠΌΠ΅Ρ ΠΎΠΉ, Π½ΠΎ (Π² ΡΠ΅ΡΡΠΎΡΠΏΠ΅ΠΊΡΠΈΠ²Π΅) ΡΠ°ΠΊΠΆΠ΅ ΠΈ Π±Π»Π°Π³ΠΎΠΌ. ΠΡΠΎ ΠΏΠΎΡΠΎΠΌΡ, ΡΡΠΎ Ρ ΠΌΠ΅Π½Ρ Π½Π΅ Π±ΡΠ»ΠΎ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠΉ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ GraphQL, ΠΈ ΠΏΠΎΡΡΠΎΠΌΡ Ρ ΠΌΠΎΠ³ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡΡ ΡΠ΅Π±Π΅ ΠΌΠ΅ΡΡΠ°ΡΡ ΠΎΠ± ΡΡΠΈΡ Π½ΠΎΠ²ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΡ .
Π ΡΠ΅ΠΏΠ΅ΡΡ, ΠΊΠΎΠ³Π΄Π° ΡΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ Π±ΡΠ»ΠΈ ΠΏΠ΅ΡΠ΅Π½Π΅ΡΠ΅Π½Ρ Π² Gato GraphQL, ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ ΡΡΠ°ΡΡ Π½Π΅Π²Π΅ΡΠΎΡΡΠ½ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΌ ΡΠΎΡΠ·Π½ΠΈΠΊΠΎΠΌ Π΄Π»Ρ Π²ΡΠ΅Π³ΠΎ, ΡΡΠΎ ΡΠ²ΡΠ·Π°Π½ΠΎ Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ΠΌ, ΠΌΠ°Π½ΠΈΠΏΡΠ»ΡΡΠΈΠ΅ΠΉ ΠΈ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΊΠΎΠ½ΡΠ΅Π½ΡΠ° Π΄Π»Ρ Π²Π°ΡΠ΅Π³ΠΎ ΡΠ°ΠΉΡΠ° WordPress. (Π₯ΠΎΡΡ ΠΎΠ½ΠΈ Π±ΡΠ΄ΡΡ Π΄ΠΎΡΡΡΠΏΠ½Ρ ΡΠΎΠ»ΡΠΊΠΎ Π² ΠΏΡΠ΅Π΄ΡΡΠΎΡΡΠ΅ΠΉ v1.0.)
ΠΠ°Π½ΡΠ»ΠΎ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠ΅ Π²ΡΠ΅ΠΌΡ, Π½ΠΎ ΡΡΠΈΠ»ΠΈΡ ΡΠΎΠ³ΠΎ ΡΠ²Π½ΠΎ ΡΡΠΎΠΈΠ»ΠΈ.
ΠΠΎΠΏΡΠΎΠ±ΡΠΉΡΠ΅!
Π£Π±Π΅Π΄ΠΈΠ»ΠΈΡΡ, ΡΡΠΎ Π΄ΠΎΠ»Π³ΠΎΠ΅ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ ΡΠΎΠ³ΠΎ ΡΡΠΎΠΈΠ»ΠΎ? ΠΠ°Π΄Π΅ΡΡΡ, ΡΡΠΎ Π΄Π°!
ΠΠ°Π²Π°ΠΉΡΠ΅, ΡΠΊΠ°ΡΠ°ΠΉΡΠ΅ ΠΏΠ»Π°Π³ΠΈΠ½ ΠΈ ΠΏΠΎΡΠΌΠΎΡΡΠΈΡΠ΅:
Π₯ΠΎΡΠΈΡΠ΅ ΠΏΠΎΠ»ΡΡΠ°ΡΡ Π½ΠΎΠ²ΠΎΡΡΠΈ ΠΎ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅, Π½ΠΎΠ²ΡΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ ΠΈ Π°Π½ΠΎΠ½ΡΡ ΠΏΡΠ΅Π΄ΡΡΠΎΡΡΠΈΡ
ΡΠ΅Π»ΠΈΠ·ΠΎΠ², Π²ΠΊΠ»ΡΡΠ°Ρ v1.0? ΠΠΎΠ±ΡΠΎ ΠΏΠΎΠΆΠ°Π»ΠΎΠ²Π°ΡΡ β ΠΏΠΎΠ΄ΠΏΠΈΡΠΈΡΠ΅ΡΡ Π½Π° ΡΠ°ΡΡΡΠ»ΠΊΡ.
Π₯ΠΎΡΠΈΡΠ΅ ΠΈΠ·ΡΡΠΈΡΡ ΠΎΡΠΊΡΡΡΡΠΉ ΠΈΡΡ
ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄ Π½Π° GitHub? ΠΠΎΡΠΌΠΎΡΡΠΈΡΠ΅ GatoGraphQL/GatoGraphQL (ΠΈ ΡΠΌΠ΅Π»ΠΎ ΡΡΠ°Π²ΡΡΠ΅ Π·Π²Π΅Π·Π΄Ρ... ΠΡ Π»ΡΠ±ΠΈΠΌ Π·Π²ΡΠ·Π΄Ρ! βοΈβοΈβοΈ)
ΠΡΡΠ°ΡΠΈ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ ΠΊΠΎΠ½ΡΠ΅Π½ΡΠ° Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ Π² WordPress (Π΄Π»Ρ ΠΊΠΎΡΠΎΡΡΡ Π²Ρ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΡΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ ΠΊΠ°ΠΊΠΎΠΉ-ΡΠΎ ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΊΠΎΠΌΠΌΠ΅ΡΡΠ΅ΡΠΊΠΈΠΉ ΠΏΠ»Π°Π³ΠΈΠ½)? ΠΠΎΠΆΠ°Π»ΡΠΉΡΡΠ°, Π½Π°ΠΏΠΈΡΠΈΡΠ΅ ΠΌΠ½Π΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Ρ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ΠΌ Π²Π°ΡΠ΅Π³ΠΎ ΡΠ»ΡΡΠ°Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ.
ΠΡΠ»ΠΈ Π²Π°ΠΌ Π½ΡΠ°Π²ΠΈΡΡΡ ΡΠΎ, ΡΡΠΎ Π²Ρ Π²ΠΈΠ΄ΠΈΡΠ΅, ΠΏΠΎΠΆΠ°Π»ΡΠΉΡΡΠ°, ΠΏΠΎΠ΄Π΅Π»ΠΈΡΠ΅ΡΡ Ρ Π΄ΡΡΠ·ΡΡΠΌΠΈ ΠΈ ΠΊΠΎΠ»Π»Π΅Π³Π°ΠΌΠΈ, ΠΏΠΎΠΌΠΎΠ³ΠΈΡΠ΅ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΠΈΡΡ Π»ΡΠ±ΠΎΠ²Ρ β€οΈ.