ππ½ββοΈ ΠΠΎΡΠ΅ΠΌΡ Π΄Π»Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ CMS-agnosticism Gato GraphQL Π±ΡΠ» ΡΠ°Π·Π΄Π΅Π»ΡΠ½ Π½Π° ~90 ΠΏΠ°ΠΊΠ΅ΡΠΎΠ², ΠΈ ΠΊΠ°ΠΊΠΎΠ²Ρ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π° ΠΈ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΊΠΈ ΡΡΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π°
ΠΠ° ΠΏΡΠΎΡΠ»ΠΎΠΉ Π½Π΅Π΄Π΅Π»Π΅ Ρ ΠΎΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°Π» ΡΡΠ°ΡΡΡ ππ»ββοΈ ΠΠΎΡΠ΅ΠΌΡ Gato GraphQL Π½ΡΠΆΠ΅Π½ ΠΌΠΎΠ½ΠΎΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ ΠΈ ΠΊΠ°ΠΊ ΠΎΠ½ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°Π½, ΠΎΠ±ΡΡΡΠ½ΡΡΡΡΡ, ΠΊΠ°ΠΊ ΠΈ ΠΏΠΎΡΠ΅ΠΌΡ ΠΌΠΎΠ½ΠΎΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ GatoGraphQL/GatoGraphQL, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Ρ
ΡΠ°Π½ΠΈΡΡΡ ΠΊΠΎΠ΄ Gato GraphQL, ΠΌΠΎΠΆΠ΅Ρ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎ ΡΠΏΡΠ°Π²Π»ΡΡΡ ΠΊΠΎΠ΄ΠΎΠ²ΠΎΠΉ Π±Π°Π·ΠΎΠΉ ΠΏΠ»Π°Π³ΠΈΠ½Π°.
Π― ΠΏΠΎΠ΄Π΅Π»ΠΈΠ»ΡΡ ΡΠ²ΠΎΠ΅ΠΉ ΡΡΠ°ΡΡΡΠΉ Π½Π° Reddit ΠΈ ΠΏΠΎΠ»ΡΡΠΈΠ» ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ:
Π‘ΡΠ°ΡΡΡ Π°Π²ΡΠΎΡΠ° ΠΈ ΡΡΠ°ΡΡΠΈ, Π½Π° ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠ½Π° ΡΡΡΠ»Π°Π΅ΡΡΡ, ΡΠΈΡΠ°ΡΡΡΡ ΡΠ°ΠΊ, Π±ΡΠ΄ΡΠΎ ΠΌΠΎΠ½ΠΎΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ β ΡΡΠΎ Π²Π΅Π»ΠΈΡΠ°ΠΉΡΠ΅Π΅ ΠΈΠ·ΠΎΠ±ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΡΠΎ Π²ΡΠ΅ΠΌΡΠ½ Π½Π°ΡΠ΅Π·Π½ΠΎΠ³ΠΎ Ρ Π»Π΅Π±Π°.
ΠΠΎΠ»Π΅Π΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎΠΉ Π±ΡΠ»Π° Π±Ρ ΡΡΠ°ΡΡΡ, ΠΎΠ±ΡΡΡΠ½ΡΡΡΠ°Ρ, ΠΏΠΎΡΠ΅ΠΌΡ Π²Ρ ΡΠ΅ΡΠΈΠ»ΠΈ, ΡΡΠΎ CMS-agnosticism ΡΡΠ΅Π±ΡΠ΅Ρ ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΡ Π²ΡΠ΅Π³ΠΎ Π½Π° ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠ΅ ΠΌΠ°Π»Π΅Π½ΡΠΊΠΈΠ΅ ΠΏΠ°ΠΊΠ΅ΡΡ, ΠΈ ΠΏΠΎΡΠ΅ΠΌΡ Π²Ρ ΠΏΠΎΡΡΠΈΡΠ°Π»ΠΈ, ΡΡΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡ ΠΈΠ· Π±ΠΎΠ»Π΅Π΅ ΡΠ΅ΠΌ 200 ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² Π½ΡΠΆΠ΅Π½ ΡΠ²ΠΎΠΉ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΉ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ.
ΠΡΠΎ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΡΠΉ Π²ΠΎΠΏΡΠΎΡ. ΠΠΎΡΡΠΎΠΌΡ Ρ ΡΠ΅ΡΠΈΠ» Π½Π°ΠΏΠΈΡΠ°ΡΡ Π΄Π°Π½Π½ΡΡ ΡΡΠ°ΡΡΡ, ΡΡΠΎΠ±Ρ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅ΡΡ Π΅Π³ΠΎ ΠΏΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅.
ΠΠΎ ΡΠ½Π°ΡΠ°Π»Π° Ρ ΠΎΡΡΠ°Π½ΠΎΠ²Π»ΡΡΡ Π½Π° Π΄Π²ΡΡ ΡΠΌΠ΅ΠΆΠ½ΡΡ ΡΠ΅ΠΌΠ°Ρ : ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² ΡΠ΅Π°Π»ΡΠ½ΠΎ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΏΠ»Π°Π³ΠΈΠ½Ρ ΠΈ ΠΏΠΎΡΠ΅ΠΌΡ Ρ ΡΡΠ²Π΅ΡΠΆΠ΄Π°Ρ, ΡΡΠΎ Π»Π΅ΠΆΠ°ΡΠΈΠΉ Π² ΠΎΡΠ½ΠΎΠ²Π΅ GraphQL-ΡΠ΅ΡΠ²Π΅Ρ ΡΠ²Π»ΡΠ΅ΡΡΡ CMS-agnostic.
ΠΠ· ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² ΡΠΎΡΡΠΎΠΈΡ ΠΏΠ»Π°Π³ΠΈΠ½
Π₯ΠΎΡΡ Ρ ΡΠΏΠΎΠΌΠΈΠ½Π°Π» Π±ΠΎΠ»Π΅Π΅ 200 PHP-ΠΏΠ°ΠΊΠ΅ΡΠΎΠ², ΡΡΠΎ ΠΎΡΠ½ΠΎΡΠΈΡΡΡ ΠΊ ΠΌΠΎΠ½ΠΎΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ; Π΄Π»Ρ ΠΏΠ»Π°Π³ΠΈΠ½Π° ΠΈΡ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΌΠ΅Π½ΡΡΠ΅.
ΠΠΎΠ½ΠΎΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ GatoGraphQL/GatoGraphQL ΠΎΡ
Π²Π°ΡΡΠ²Π°Π΅Ρ 5 ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ²:
- PoP β ΡΠ΅ΡΠ²Π΅ΡΠ½Π°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ½ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ (ΠΊΠ°ΠΊ React, Π½ΠΎ Π΄Π»Ρ Π±ΡΠΊΠ΅Π½Π΄Π°)
- GraphQL by PoP β CMS-agnostic GraphQL-ΡΠ΅ΡΠ²Π΅Ρ Π΄Π»Ρ PHP
- Gato GraphQL
- ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ ΡΠ°ΠΉΡΠΎΠ² (WIP)
- Wassup β ΡΠ΅ΠΌΠ° ΡΠ°ΠΉΡΠ° Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ° ΡΠ°ΠΉΡΠΎΠ² (WIP)
Π Π°Π·ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ ΡΡΠΈΡ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ² Π² ΠΌΠΎΠ½ΠΎΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ ΡΠΏΡΠΎΡΠ°Π΅Ρ ΡΠ°Π±ΠΎΡΡ Ρ Π½ΠΈΠΌΠΈ Π±Π»Π°Π³ΠΎΠ΄Π°ΡΡ ΠΈΡ Π²Π·Π°ΠΈΠΌΠΎΠ·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡΠΌ:
- GraphQL by PoP ΠΎΡΠ½ΠΎΠ²Π°Π½ Π½Π° PoP
- Gato GraphQL ΠΎΡΠ½ΠΎΠ²Π°Π½ Π½Π° GraphQL by PoP
- ΠΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ ΡΠ°ΠΉΡΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ½ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π΄Π²ΠΈΠΆΠΊΠ° (Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎ Gatsby, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠ΅ΠΌΡ GraphQL)
- Wassup ΠΎΡΠ½ΠΎΠ²Π°Π½ Π½Π° ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ΅ ΡΠ°ΠΉΡΠΎΠ²
ΠΠΌΠ΅Π½Π½ΠΎ Π² ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠΈ ΠΊΠΎΠ΄Π° Π²ΡΠ΅Ρ
5 ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ² GatoGraphQL/GatoGraphQL ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π±ΠΎΠ»Π΅Π΅ 200 PHP-ΠΏΠ°ΠΊΠ΅ΡΠΎΠ². Π§ΡΠΎ ΠΊΠ°ΡΠ°Π΅ΡΡΡ Gato GraphQL, ΠΈΡ
Β«Π²ΡΠ΅Π³ΠΎΒ» 91. Π GraphQL by PoP, Π»Π΅ΠΆΠ°ΡΠΈΠΉ Π² ΠΎΡΠ½ΠΎΠ²Π΅ GraphQL-ΡΠ΅ΡΠ²Π΅Ρ, ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Β«Π²ΡΠ΅Π³ΠΎΒ» 98 ΠΏΠ°ΠΊΠ΅ΡΠΎΠ².
(ΠΠ»Π°Π³ΠΈΠ½ Gato GraphQL ΡΡΠ΅Π±ΡΠ΅Ρ ΠΌΠ΅Π½ΡΡΠ΅ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ², ΡΠ΅ΠΌ Π΅Π³ΠΎ Π±Π°Π·ΠΎΠ²ΡΠΉ GraphQL-ΡΠ΅ΡΠ²Π΅Ρ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠ°ΠΊΠ΅ΡΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Π° @strTranslate Google Translate, Π΅ΡΡ Π½Π΅ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ Π² ΠΏΠ»Π°Π³ΠΈΠ½.)
ΠΠ°ΠΊ GraphQL by PoP ΡΠ²Π»ΡΠ΅ΡΡΡ CMS-agnostic? Π ΡΡΠΌ Π΅Π³ΠΎ ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ webonyx?
Π― ΡΡΠ²Π΅ΡΠΆΠ΄Π°Ρ, ΡΡΠΎ GraphQL by PoP ΡΠ²Π»ΡΠ΅ΡΡΡ CMS-agnostic. ΠΠΎ ΡΡΠΎ ΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ?
ΠΠ»Ρ ΡΠΏΡΠ°Π²ΠΊΠΈ: webonyx/graphql-php ΡΠΎΠΆΠ΅ ΡΠ²Π»ΡΠ΅ΡΡΡ CMS-agnostic. Π ΡΡΠΌ ΠΆΠ΅ ΡΠΎΠ³Π΄Π° ΠΈΡ
ΠΎΡΠ»ΠΈΡΠΈΠ΅?
webonyx/graphql-php ΡΠ²Π»ΡΠ΅ΡΡΡ CMS-agnostic Π² ΡΠΎΠΌ ΡΠΌΡΡΠ»Π΅, ΡΡΠΎ ΡΡΠΎ ΠΏΠ°ΠΊΠ΅Ρ, ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΠ΅ΠΌΡΠΉ ΡΠ΅ΡΠ΅Π· Composer, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΉ ΠΈΡΠΊΠ»ΡΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Β«Π²Π°Π½ΠΈΠ»ΡΠ½ΡΠΉΒ» PHP-ΠΊΠΎΠ΄. ΠΠ΄Π½Π°ΠΊΠΎ ΡΠ°ΠΌ ΠΏΠΎ ΡΠ΅Π±Π΅ ΠΎΠ½ Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ GraphQL-ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ; ΡΠΊΠΎΡΠ΅Π΅, ΡΡΠΎ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ GraphQL Π½Π° PHP, ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Π½Π°Ρ Π΄Π»Ρ Π²ΡΡΡΠ°ΠΈΠ²Π°Π½ΠΈΡ Π² ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ GraphQL-ΡΠ΅ΡΠ²Π΅Ρ Π½Π° PHP.
ΠΡΠΈ ΡΡΠΎΠΌ GraphQL-ΡΠ΅ΡΠ²Π΅ΡΡ, ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΠΈΠ΅ ΡΡΡ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Lighthouse ΠΈΠ»ΠΈ WPGraphQL, Π½Π΅ ΡΠ²Π»ΡΡΡΡΡ CMS-agnostic. ΠΡ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°ΠΏΡΡΡΠΈΡΡ Lighthouse Π½Π° WordPress ΠΈΠ»ΠΈ WPGraphQL Π½Π° Laravel.
ΠΠΌΠ΅Π½Π½ΠΎ Π² ΡΡΠΎΠΌ ΡΠΌΡΡΠ»Π΅ GraphQL by PoP ΡΠ²Π»ΡΠ΅ΡΡΡ CMS-agnostic: ΡΡΠΎ Β«ΠΏΠΎΡΡΠΈ Π³ΠΎΡΠΎΠ²ΡΠΉΒ» GraphQL-ΡΠ΅ΡΠ²Π΅Ρ, ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π³ΠΎΡΠΎΠ²ΡΠΉ ΠΊ ΡΠ°Π±ΠΎΡΠ΅ Ρ Π»ΡΠ±ΠΎΠΉ CMS ΠΈΠ»ΠΈ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠΎΠΌ β Π±ΡΠ΄Ρ ΡΠΎ Laravel, WordPress ΠΈΠ»ΠΈ ΡΡΠΎ-ΡΠΎ ΠΈΠ½ΠΎΠ΅. (ΠΠ»Ρ ΠΊΡΠ°ΡΠΊΠΎΡΡΠΈ Π΄Π°Π»Π΅Π΅ ΠΏΠΎΠ΄ ΡΠ»ΠΎΠ²ΠΎΠΌ Β«CMSΒ» Ρ Π±ΡΠ΄Ρ ΠΏΠΎΠ΄ΡΠ°Π·ΡΠΌΠ΅Π²Π°ΡΡ Β«CMS ΠΈΠ»ΠΈ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΒ».)
Π§ΡΠΎΠ±Ρ ΡΠ΄Π΅Π»Π°ΡΡ Π΅Π³ΠΎ ΠΎΠΊΠΎΠ½ΡΠ°ΡΠ΅Π»ΡΠ½ΡΠΌ Π΄Π»Ρ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΉ CMS, GraphQL-ΡΠ΅ΡΠ²Π΅ΡΡ Π²ΡΡ ΡΠ°Π²Π½ΠΎ ΠΏΠΎΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½ΠΎΠ³ΠΎ Π΄Π»Ρ ΡΡΠΎΠΉ CMS ΠΊΠΎΠ΄Π°, ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅ΠΌ ΠΏΠ°ΠΊΠ΅ΡΠ΅.
Π’Π΅ΠΏΠ΅ΡΡ ΠΏΠ΅ΡΠ΅ΠΉΠ΄ΡΠΌ ΠΊ Π²ΠΎΠΏΡΠΎΡΠ°ΠΌ ΠΈΠ· ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΡ.
ΠΠΎΡΠ΅ΠΌΡ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡ ΠΏΠ°ΠΊΠ΅ΡΡ Π½ΡΠΆΠ΅Π½ Π±ΡΠ» ΡΠ²ΠΎΠΉ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ
ΠΠΎΡΠΎΠΌΡ ΡΡΠΎ Packagist (ΡΠ΅Π΅ΡΡΡ PHP-ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² Π΄Π»Ρ Composer) ΡΡΠ΅Π±ΡΠ΅Ρ ΡΠΊΠ°Π·Π°ΡΡ URL ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ Π΄Π»Ρ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΠΈ/ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½ΠΈΡ ΠΏΠ°ΠΊΠ΅ΡΠ°.
(ΠΡΡΠ°ΡΠΈ, ΠΌΠΎΡ ΡΡΠ°ΡΡΡ Hosting all your PHP packages together in a monorepo, ΡΠ°ΠΊΠΆΠ΅ ΠΎΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½Π½Π°Ρ Π½Π° ΠΏΡΠΎΡΠ»ΠΎΠΉ Π½Π΅Π΄Π΅Π»Π΅, ΠΏΠΎΡΠ²ΡΡΠ΅Π½Π° ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΡΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ΅.)
ΠΠΎΡΠ΅ΠΌΡ CMS-agnosticism ΡΡΠ΅Π±ΡΠ΅Ρ ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΡ Π²ΡΠ΅Π³ΠΎ Π½Π° ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠ΅ ΠΌΠ°Π»Π΅Π½ΡΠΊΠΈΠ΅ ΠΏΠ°ΠΊΠ΅ΡΡ
Π’ΠΎΠΌΡ Π΅ΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈΡΠΈΠ½.
ΠΠΎΠ·Π²ΠΎΠ»ΠΈΡΡ CMS Π²Π½Π΅Π΄ΡΡΡΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ ΠΊΠΎΠ΄
Π‘ΠΎΠ·Π΄Π°ΡΡ GraphQL-ΡΠ΅ΡΠ²Π΅Ρ, ΡΠ°Π±ΠΎΡΠ°ΡΡΠΈΠΉ Π²Π΅Π·Π΄Π΅ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΠΉ 100% ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ ΡΠΎΠ³ΠΎ ΠΆΠ΅ PHP-ΠΊΠΎΠ΄Π°, Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ.
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΡΠΎΠ±Ρ Π΄Π°ΡΡ Π»ΡΠ±ΠΎΠΌΡ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΡ ΠΊΠΎΠ΄Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π² Π΄ΡΡΠ³ΠΎΠΌ ΠΌΠ΅ΡΡΠ΅, WordPress ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ filter hooks, Symfony ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅Ρ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ EventDispatcher, Π° Laravel ΠΈΠΌΠ΅Π΅Ρ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΡ ΡΠΈΡΡΠ΅ΠΌΡ ΡΠΎΠ±ΡΡΠΈΠΉ ΠΈ ΡΠ»ΡΡΠ°ΡΠ΅Π»Π΅ΠΉ. PHP-ΠΊΠΎΠ΄ Π΄Π»Ρ ΡΡΠΈΡ ΡΡΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠΎΠ² ΡΠ°ΠΊΠΆΠ΅ Π±ΡΠ΄Π΅Ρ ΡΠ°Π·Π»ΠΈΡΠ°ΡΡΡΡ.
ΠΠΌΠ΅Π½Π½ΠΎ Π·Π΄Π΅ΡΡ ΠΈ ΠΏΡΠΎΡΠ²Π»ΡΠ΅Ρ ΡΠ΅Π±Ρ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ Ρ ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΊΠΎΠ΄Π° Π½Π° Π΄Π΅ΡΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΠΏΠ°ΠΊΠ΅ΡΡ. ΠΠΌΠ΅ΡΡΠΎ ΡΠΎΠ³ΠΎ ΡΡΠΎΠ±Ρ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ ΡΠΎΠ±ΡΡΠΈΠΉ ΠΈ ΡΠ»ΡΡΠ°ΡΠ΅Π»Π΅ΠΉ Π±ΡΠ»ΠΎ ΡΠ°ΡΡΡΡ ΡΠ°ΠΌΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΎΠ½ΠΎ Π²Π½Π΅Π΄ΡΡΠ΅ΡΡΡ Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΠ΅ΡΠ΅Π· ΠΏΠ°ΠΊΠ΅Ρ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΊΠΎΠ΄, ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½ΡΠΉ Π΄Π»Ρ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΉ CMS.
Π§ΡΠΎΠ±Ρ ΡΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π»ΠΎ, ΠΊΠ°ΠΆΠ΄Π°Ρ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΡ Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ ΡΠ°Π·Π΄Π΅Π»Π΅Π½Π° Π½Π° 2 ΠΏΠ°ΠΊΠ΅ΡΠ°:
- CMS-agnostic-ΠΏΠ°ΠΊΠ΅Ρ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΉ Π²ΡΡ Π±ΠΈΠ·Π½Π΅Ρ-Π»ΠΎΠ³ΠΈΠΊΡ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΠΉ ΡΠΎΠ»ΡΠΊΠΎ Β«Π²Π°Π½ΠΈΠ»ΡΠ½ΡΠΉΒ» PHP-ΠΊΠΎΠ΄. ΠΡΠΎΡ ΠΏΠ°ΠΊΠ΅Ρ Π±ΡΠ΄Π΅Ρ Π²ΠΊΠ»ΡΡΠ°ΡΡ ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ CMS-ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½ΡΠΉ ΠΏΠ°ΠΊΠ΅Ρ
- CMS-ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½ΡΠΉ ΠΏΠ°ΠΊΠ΅Ρ, Π²ΡΠΏΠΎΠ»Π½ΡΡΡΠΈΠΉ ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΡ Π΄Π»Ρ Π΄Π°Π½Π½ΠΎΠΉ CMS
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, GraphQL by PoP ΠΈΠΌΠ΅Π΅Ρ ΠΏΠ°ΠΊΠ΅Ρ hooks, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΉ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΊΠΎΠ½ΡΡΠ°ΠΊΡ:
interface HooksAPIInterface
{
public function addFilter(string $tag, callable $function_to_add, int $priority = 10, int $accepted_args = 1): void;
public function removeFilter(string $tag, callable $function_to_remove, int $priority = 10): bool;
public function applyFilters(string $tag, mixed $value, mixed ...$args): mixed;
public function addAction(string $tag, callable $function_to_add, int $priority = 10, int $accepted_args = 1): void;
public function removeAction(string $tag, callable $function_to_remove, int $priority = 10): bool;
public function doAction(string $tag, mixed ...$args): void;
}Π ΠΏΠ°ΠΊΠ΅Ρ hooks-wp Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΠΊΠΎΠ½ΡΡΠ°ΠΊΡ Π΄Π»Ρ WordPress:
class HooksAPI implements HooksAPIInterface
{
public function addFilter(string $tag, callable $function_to_add, int $priority = 10, int $accepted_args = 1): void
{
\add_filter($tag, $function_to_add, $priority, $accepted_args);
}
public function removeFilter(string $tag, callable $function_to_remove, int $priority = 10): bool
{
return \remove_filter($tag, $function_to_remove, $priority);
}
public function applyFilters(string $tag, mixed $value, mixed ...$args): mixed
{
return \apply_filters($tag, $value, ...$args);
}
public function addAction(string $tag, callable $function_to_add, int $priority = 10, int $accepted_args = 1): void
{
\add_action($tag, $function_to_add, $priority, $accepted_args);
}
public function removeAction(string $tag, callable $function_to_remove, int $priority = 10): bool
{
return \remove_action($tag, $function_to_remove, $priority);
}
public function doAction(string $tag, mixed ...$args): void
{
\do_action($tag, ...$args);
}
}Π’Π΅ΠΏΠ΅ΡΡ, Ρ
ΠΎΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΡ Ρ
ΡΠΊΠΎΠ² ΠΏΡΠΈΡΠ»Π° ΠΈΠ· WordPress, ΠΎΠ½Π° ΠΌΠΎΠΆΠ΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΈ Ρ Π΄ΡΡΠ³ΠΈΠΌΠΈ CMS (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠΎΠ±ΡΡΠΈΠΉ ΠΈ ΡΠ»ΡΡΠ°ΡΠ΅Π»Π΅ΠΉ Π΄Π»Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Ρ
ΡΠΊΠΎΠ²). Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°ΠΌΠ΅Π½ΠΈΡΡ hooks-wp Π½Π° hooks-laravel, hooks-symfony, hooks-drupal, hooks-octobercms ΠΈΠ»ΠΈ Π»ΡΠ±ΠΎΠΉ Π΄ΡΡΠ³ΠΎΠΉ, ΡΡΠΎΠ±Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΡ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΊΠΎΠ΄Π°, ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½ΠΎΠ³ΠΎ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ CMS.
ΠΠΎΠ·Π²ΠΎΠ»ΠΈΡΡ CMS ΠΎΡΠΊΠ°Π·Π°ΡΡΡΡ ΠΎΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΠΈ, ΠΊΠΎΡΠΎΡΡΡ ΠΎΠ½Π° Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ
ΠΠ΅ Π²ΡΠ΅ CMS ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ Π²Π΅ΡΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π». ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, WordPress ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ Π·Π°ΠΏΠΈΡΠΈ ΠΏΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ meta_value, Π° OctoberCMS β Π½Π΅Ρ.
ΠΠΌΠ΅Π½Π½ΠΎ ΠΏΠΎΡΡΠΎΠΌΡ GraphQL by PoP ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΏΠ°ΠΊΠ΅Ρ metaquery (ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΠΉ Π΄Π»Ρ WordPress ΡΠ΅ΡΠ΅Π· metaquery-wp). GraphQL-ΡΠ΅ΡΠ²Π΅Ρ, ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΠΉ Π΄Π»Ρ WordPress, Π±ΡΠ΄Π΅Ρ Π²ΠΊΠ»ΡΡΠ°ΡΡ ΡΡΠΎΡ ΠΏΠ°ΠΊΠ΅Ρ, Π° ΡΠ΅ΡΠ²Π΅Ρ Π΄Π»Ρ OctoberCMS β Π½Π΅Ρ.
ΠΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π° ΡΡΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π°
ΠΠ΅ΡΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² Π΄Π°ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ².
ΠΡΠ΄Π΅Π»Π΅Π½ΠΈΠ΅ Π±ΠΈΠ·Π½Π΅Ρ-Π»ΠΎΠ³ΠΈΠΊΠΈ ΠΎΡ CMS-ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°
ΠΠΌΠ΅ΡΡΠΎ ΡΠΎΠ³ΠΎ ΡΡΠΎΠ±Ρ ΡΡΡΠΎΠΈΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠ΅ΠΉ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΉ CMS (ΡΠΏΠΎΡΠΎΠ±Π° ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½ΠΈΡ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ, ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠΉ ΠΈ ΠΏΡΠΎΡΠ΅Π³ΠΎ), ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π°Π±ΡΡΡΠ°Π³ΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π±ΠΈΠ·Π½Π΅Ρ-Π»ΠΎΠ³ΠΈΠΊΡ.
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΡΠΏΠΈΡΠΊΠ° Π·Π°ΠΏΠΈΡΠ΅ΠΉ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠ·Π²Π°ΡΡ ΠΌΠ΅ΡΠΎΠ΄ getPosts ΠΈΠ· Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° Π² CMS-agnostic-ΠΏΠ°ΠΊΠ΅ΡΠ΅ posts. Π’ΠΎΠ³Π΄Π° Π·Π°ΠΏΠΈΡΠΈ Π±ΡΠ΄ΡΡ ΠΈΠ·Π²Π»Π΅ΠΊΠ°ΡΡΡΡ Π²ΡΠ΅Π³Π΄Π° ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎ, Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ ΠΎΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π² ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΉ CMS.
ΠΠ±Ρ ΠΎΠ΄ ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ Π΄ΠΎΠ»Π³Π° ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΡΡΠ°Π½Π΄Π°ΡΡΠΎΠ²
Π‘Π»Π΅Π΄ΡΡ ΠΏΡΠΈΠ²Π΅Π΄ΡΠ½Π½ΠΎΠΌΡ Π²ΡΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΡ, ΠΌΡ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ Π·Π°ΠΏΠΈΡΠΈ, Π²ΡΠ·ΡΠ²Π°Ρ ΠΌΠ΅ΡΠΎΠ΄ getPosts, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ ΡΠΎΠ³Π»Π°ΡΠ΅Π½ΠΈΡ PSR-4, Π²ΠΌΠ΅ΡΡΠΎ Π²ΡΠ·ΠΎΠ²Π° get_posts, ΠΊΠ°ΠΊ ΡΡΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΎ Π² WordPress.
ΠΠ½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎ, ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π²ΡΠ·ΡΠ²Π°ΡΡ getCustomPost Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ custom post Π²ΠΌΠ΅ΡΡΠΎ Π½Π΅ΡΠΎΡΠ½ΠΎΠ³ΠΎ get_post (ΡΡΠΎ ΡΠ°ΡΡΡ ΡΠ΅Ρ
Π½ΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ Π΄ΠΎΠ»Π³Π° WordPress).
ΠΡΠΎΡΡΠΎΡΠ° ΡΠΊΠΎΡΠΏΠΈΠ½Π³Π°
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ PHP-Scoper Π΄Π»Ρ ΡΠΊΠΎΡΠΏΠΈΠ½Π³Π° WordPress-ΠΏΠ»Π°Π³ΠΈΠ½Π° Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΡΠΎΡΡΠΎΠΉ Π·Π°Π΄Π°ΡΠ΅ΠΉ, ΠΈ Π΄Π°ΠΆΠ΅ ΠΊΠΎΠ³Π΄Π° ΡΡΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΏΡΠΎΡΠ΅ΡΡ ΡΡΠ΅Π²Π°Ρ ΠΎΡΠΈΠ±ΠΊΠ°ΠΌΠΈ.
Π’ΡΠ°ΡΠ΅Π»ΡΠ½ΠΎΠ΅ ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ CMS-ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΠΈ Π±ΠΈΠ·Π½Π΅Ρ-Π»ΠΎΠ³ΠΈΠΊΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ PHP-Scoper ΡΠΎΠ»ΡΠΊΠΎ ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡ Π½Π°Π±ΠΎΡΡ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² (ΡΠ΅ΠΌ, ΡΡΠΎ ΡΠΎΠ΄Π΅ΡΠΆΠ°Ρ Π±ΠΈΠ·Π½Π΅Ρ-Π»ΠΎΠ³ΠΈΠΊΡ), ΠΈΠ·Π±Π΅Π³Π°Ρ Π΅Π³ΠΎ Π΄Π»Ρ Π΄ΡΡΠ³ΠΈΡ (ΡΠ΅Ρ , ΡΡΠΎ ΡΠΎΠ΄Π΅ΡΠΆΠ°Ρ WordPress-ΠΊΠΎΠ΄). Π― ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ ΠΎΠΏΠΈΡΠ°Π» ΡΡΡ ΡΡΡΠ°ΡΠ΅Π³ΠΈΡ Π·Π΄Π΅ΡΡ.
ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ PHP-Scoper, ΠΌΠΎΠ³ΡΡ ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°ΡΡ ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π΄Π°ΡΡ ΡΠ±ΠΎΠΉ ΠΏΡΠΈ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΠΊ CMS-ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½ΠΎΠΌΡ ΠΊΠΎΠ΄Ρ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, WordPress). Π ΡΠ°ΠΊΠΈΡ ΡΠ»ΡΡΠ°ΡΡ Π΄Π΅ΡΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ ΡΠΏΠ°ΡΡΠΈ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.
ΠΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΠΈΠ· ΠΊΠΎΡΠΎΡΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΠΎΠ»ΡΠΊΠΎ Π½ΡΠΆΠ½ΡΠΉ ΠΊΠΎΠ΄
ΠΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π½Π°ΡΠΈ ΠΏΠ°ΠΊΠ΅ΡΡ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π΄ΡΡΠ³ΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, Π²ΠΊΠ»ΡΡΠ°ΡΡΠΈΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ΅ ΠΏΠ°ΠΊΠ΅ΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠΌ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡ, ΠΈ Π½ΠΈΡΠ΅Π³ΠΎ Π»ΠΈΡΠ½Π΅Π³ΠΎ.
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π»ΠΈΡΠ½ΠΎΠΌΡ Π±Π»ΠΎΠ³Ρ ΠΌΠΎΠ³ΡΡ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ posts, tags ΠΈ categories, ΠΏΠΎΡΡΠΎΠΌΡ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π» users ΠΈΠ»ΠΈ user-login.
ΠΠ΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ, Ρ ΠΏΠ»Π°Π½ΠΈΡΡΡ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΡΡΠΎΠΉ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΡ Π² Π±Π»ΠΈΠΆΠ°ΠΉΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ: ΡΠ΅ΠΉΡΠ°Ρ Ρ ΡΠ°Π±ΠΎΡΠ°Ρ Π½Π°Π΄ Β«Private GraphQL APIΒ» β ΡΠ°ΠΌΠΎΠ΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΡΠΌ GraphQL-Π΄Π²ΠΈΠΆΠΊΠΎΠΌ, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄Π΅Ρ Π΄ΠΎΡΡΡΠΏΠ΅Π½ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°ΠΌ WordPress-ΠΏΠ»Π°Π³ΠΈΠ½ΠΎΠ² Π΄Π»Ρ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π² ΠΈΡ ΠΏΠ»Π°Π³ΠΈΠ½Ρ, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡ GraphQL API Π΄Π»Ρ Π±Π»ΠΎΠΊΠΎΠ² Gutenberg.
Π― ΠΌΠΎΠ³Ρ Π±Π΅Π· ΡΡΡΠ΄Π° ΡΠΎΠ·Π΄Π°ΡΡ Β«Private GraphQL APIΒ», ΠΏΡΠΎΡΡΠΎ ΡΠ΄Π°Π»ΠΈΠ² ΠΈΠ· ΠΏΠ»Π°Π³ΠΈΠ½Π° Gato GraphQL ΡΠ΅ ΠΏΠ°ΠΊΠ΅ΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ Π½ΡΠΆΠ½Ρ (ΠΎΡΠ²Π΅ΡΠ°ΡΡΠΈΠ΅ Π·Π° UI, ΠΊΠ»ΠΈΠ΅Π½ΡΡ, custom endpoints, HTTP-ΠΊΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅, persisted queries ΠΈ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Π΄ΡΡΠ³ΠΈΠ΅).
ΠΠ°ΠΊΠΎΠ½Π΅Ρ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΠΊΠΎΡΠΏΠΈΠ½Π³ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π»Π΅Π³ΠΊΠΎ (ΠΊΠ°ΠΊ Π±ΡΠ»ΠΎ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π²ΡΡΠ΅), Ρ ΠΌΠΎΠ³Ρ ΡΠ½Π°Π±Π΄ΠΈΡΡ Π²ΡΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ ΠΏΠ°ΠΊΠ΅ΡΡ ΠΏΡΠ΅ΡΠΈΠΊΡΠΎΠΌ, ΡΡΠΎΠ±Ρ Private GraphQL API ΡΠ°Π±ΠΎΡΠ°Π» Π±Π΅Π· ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΠΎΠ² (ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡΡΡ, ΠΊΠΎΠ³Π΄Π° 2 ΡΠ°Π·Π½ΡΡ ΠΏΠ»Π°Π³ΠΈΠ½Π° Π²ΠΊΠ»ΡΡΠ°ΡΡ ΡΠ°Π·Π½ΡΠ΅ Π²Π΅ΡΡΠΈΠΈ Private GraphQL API).
ΠΠ΅Π΄ΠΎΡΡΠ°ΡΠΊΠΈ ΡΡΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π°
ΠΠ·Π»ΠΈΡΠ½Π΅ Π³ΠΎΠ²ΠΎΡΠΈΡΡ, ΡΡΠΎ ΡΡΠΎΡ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ Π΄Π°Π»ΡΠΊ ΠΎΡ ΡΠΎΠ²Π΅ΡΡΠ΅Π½ΡΡΠ²Π°.
ΠΠΎΠ»ΡΡΠ΅ ΡΡΠΈΠ»ΠΈΠΉ, ΠΊΠΎΠ΄ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ Π±ΠΎΠ»Π΅Π΅ ΠΌΠ½ΠΎΠ³ΠΎΡΠ»ΠΎΠ²Π½ΡΠΌ
ΠΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, Π΅ΡΠ»ΠΈ Π½Π°ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π½Π° WordPress, Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΡΠΏΠΈΡΠΊΠ° Π·Π°ΠΏΠΈΡΠ΅ΠΉ ΠΌΡ ΠΏΡΠΎΡΡΠΎ Π²ΡΠ·ΡΠ²Π°Π΅ΠΌ get_posts. ΠΡΠΎΡΡΠΎ ΠΈ ΡΠ΄ΠΎΠ±Π½ΠΎ.
ΠΠ΅ΡΠ΅Ρ ΠΎΠ΄ ΠΊ CMS-agnostic-ΠΏΠΎΠ΄Ρ ΠΎΠ΄Ρ ΡΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎ ΡΡΠ»ΠΎΠΆΠ½ΡΠ΅Ρ ΡΠΈΡΡΠ°ΡΠΈΡ. Π§ΡΠΎΠ±Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΠΏΠΈΡΠΎΠΊ Π·Π°ΠΏΠΈΡΠ΅ΠΉ, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ:
- Π‘ΠΎΠ·Π΄Π°ΡΡ ΠΏΠ°ΠΊΠ΅ΡΡ
postsΠΈposts-wp - Π‘ΠΎΠ·Π΄Π°ΡΡ ΠΊΠΎΠ½ΡΡΠ°ΠΊΡ Ρ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ
getPostsΠ² ΠΏΠ°ΠΊΠ΅ΡΠ΅posts - ΠΡΠΏΠΎΠ»Π½ΠΈΡΡ ΠΊΠΎΠ½ΡΡΠ°ΠΊΡ ΡΠ΅ΡΠ΅Π·
get_postsΠ² ΠΏΠ°ΠΊΠ΅ΡΠ΅posts-wp - ΠΡΠ΅Π³Π΄Π° Π²ΡΠ·ΡΠ²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΡ ΡΠ΅ΡΠ΅Π· ΠΊΠΎΠ½ΡΡΠ°ΠΊΡ, Π° Π½Π΅ Π½Π°ΠΏΡΡΠΌΡΡ
(Π‘ΠΊΠΎΡΠ΅Π΅ Π²ΡΠ΅Π³ΠΎ) ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ
ΠΠ°ΠΌ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ²ΡΠ·Π°ΡΡ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΊΠΎΠ½ΡΡΠ°ΠΊΡ ΠΈΠ· CMS-agnostic-ΠΏΠ°ΠΊΠ΅ΡΠ° Ρ Π΅Π³ΠΎ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠ΅ΠΉ ΠΈΠ· CMS-ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½ΠΎΠ³ΠΎ ΠΏΠ°ΠΊΠ΅ΡΠ°. Π ΠΌΠΎΡΠΌ ΡΠ»ΡΡΠ°Π΅ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ ΡΠ»ΡΠΆΠ±, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅ΠΌΡΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠΌ DependencyInjection ΠΎΡ Symfony.
ΠΠ½Π΅ ΠΎΡΠ΅Π½Ρ Π½ΡΠ°Π²ΠΈΡΡΡ ΡΡΠΎΡ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ β Ρ ΡΡΠΈΡΠ°Ρ, ΡΡΠΎ ΠΎΠ½ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠΏΡΠΎΡΠ°Π΅Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. ΠΠ΄Π½Π°ΠΊΠΎ Ρ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ, ΡΡΠΎ Π½Π΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΠ°ΠΌΠΎ ΠΏΠΎ ΡΠ΅Π±Π΅ ΠΏΠΎΡΡΠ΅Π±ΠΎΠ²Π°Π»ΠΎ Π±Ρ Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ, ΡΡΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΠΈ.
(ΠΠ΅ΡΡΠΌΠ° Π²Π΅ΡΠΎΡΡΠ½ΠΎ) ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΌΠΎΠ½ΠΎΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ
Gato GraphQL Π² ΠΈΡΠΎΠ³Π΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ 91 ΠΏΠ°ΠΊΠ΅Ρ. Π ΠΏΡΠΎΡΠ»ΠΎΠΌ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΈΠ· Π½ΠΈΡ ΡΠ°Π·ΠΌΠ΅ΡΠ°Π»ΡΡ Π² ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎΠΌ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ, ΡΡΠΎ ΠΊΡΠ°ΠΉΠ½Π΅ Π·Π°ΡΡΡΠ΄Π½ΡΠ»ΠΎ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ PR. ΠΠΎΡΡΠΎΠΌΡ Ρ Π±ΡΠ» Β«Π²ΡΠ½ΡΠΆΠ΄Π΅Π½Β» ΠΏΠ΅ΡΠ΅ΠΉΡΠΈ ΠΊ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Ρ Ρ ΠΌΠΎΠ½ΠΎΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠ΅ΠΌ.
Π₯ΠΎΡΡ ΠΎΠ³ΠΎΠ²ΠΎΡΠΈΡΡΡΡ: ΠΌΠ½Π΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π½ΡΠ°Π²ΠΈΡΡΡ ΠΌΠΎΠ½ΠΎΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ. ΠΠΎ Ρ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ, ΡΡΠΎ ΠΎΠ½ Π½ΡΠ°Π²ΠΈΡΡΡ Π½Π΅ Π²ΡΠ΅ΠΌ, ΠΈ Π΅Π³ΠΎ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΡΠΎΠΆΠ΅ ΡΡΠ΅Π±ΡΠ΅Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΡΡ ΡΡΠΈΠ»ΠΈΠΉ.
ΠΠΎΠ»Π΅Π·Π½ΡΠ΅ ΡΡΡΠ»ΠΊΠΈ
Π Π°Π½Π΅Π΅ Ρ ΠΏΠΈΡΠ°Π» ΠΎ ΡΠ²ΠΎΠΈΡ ΠΌΠΎΡΠΈΠ²Π°Ρ ΠΈ ΡΡΡΠ°ΡΠ΅Π³ΠΈΠΈ Π°Π±ΡΡΡΠ°Π³ΠΈΡΠΎΠ²Π°Π½ΠΈΡ WordPress-ΡΠ°ΠΉΡΠ°, ΠΏΡΠ΅Π²ΡΠ°ΡΠ΅Π½ΠΈΡ Π΅Π³ΠΎ Π² CMS-agnostic. ΠΠΌΠ΅Π½Π½ΠΎ ΡΡΡ ΠΆΠ΅ ΡΡΡΠ°ΡΠ΅Π³ΠΈΡ Ρ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠ» ΠΏΡΠΈ ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΠΈ ΠΊΠΎΠ΄ΠΎΠ²ΠΎΠΉ Π±Π°Π·Ρ Gato GraphQL:
- Abstracting WordPress Code To Reuse With Other CMSs: Concepts (Part 1)
- Abstracting WordPress Code To Reuse With Other CMSs: Implementation (Part 2)
ΠΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅: ΡΠΏΠΈΡΠΎΠΊ 91 ΠΏΠ°ΠΊΠ΅ΡΠ°, ΡΠΎΡΡΠ°Π²Π»ΡΡΡΠ΅Π³ΠΎ ΠΏΠ»Π°Π³ΠΈΠ½
Gato GraphQL ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ 91 ΠΏΠ°ΠΊΠ΅Ρ.
Π€ΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΡ Π΄Π²ΠΈΠΆΠΊΠ°:
getpop/access-control
getpop/cache-control
getpop/component-model
getpop/definitions
getpop/engine
getpop/engine-wp
getpop/field-query
getpop/guzzle-helpers
getpop/hooks
getpop/hooks-wp
getpop/loosecontracts
getpop/mandatory-directives-by-configuration
getpop/modulerouting
getpop/query-parsing
getpop/root
getpop/routing
getpop/routing-wp
getpop/translation
getpop/translation-wp
graphql-api/markdown-convertor
Π€ΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΡ API:
getpop/api
getpop/api-clients
getpop/api-endpoints
getpop/api-endpoints-for-wp
getpop/api-graphql
getpop/api-mirrorquery
Π€ΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΡ GraphQL-ΡΠ΅ΡΠ²Π΅ΡΠ°:
graphql-by-pop/graphql-clients-for-wp
graphql-by-pop/graphql-endpoint-for-wp
graphql-by-pop/graphql-parser
graphql-by-pop/graphql-query
graphql-by-pop/graphql-request
graphql-by-pop/graphql-server
ΠΠΎΠ΄Π΅Π»Ρ Π΄Π°Π½Π½ΡΡ :
pop-schema/basic-directives
pop-schema/categories
pop-schema/categories-wp
pop-schema/comment-mutations
pop-schema/comment-mutations-wp
pop-schema/commentmeta
pop-schema/commentmeta-wp
pop-schema/comments
pop-schema/comments-wp
pop-schema/custompost-mutations
pop-schema/custompost-mutations-wp
pop-schema/custompostmedia
pop-schema/custompostmedia-mutations
pop-schema/custompostmedia-mutations-wp
pop-schema/custompostmedia-wp
pop-schema/custompostmeta
pop-schema/custompostmeta-wp
pop-schema/customposts
pop-schema/customposts-wp
pop-schema/generic-customposts
pop-schema/media
pop-schema/media-wp
pop-schema/menus
pop-schema/menus-wp
pop-schema/meta
pop-schema/metaquery
pop-schema/metaquery-wp
pop-schema/pages
pop-schema/pages-wp
pop-schema/post-categories
pop-schema/post-categories-wp
pop-schema/post-mutations
pop-schema/post-tags
pop-schema/post-tags-wp
pop-schema/posts
pop-schema/posts-wp
pop-schema/queriedobject
pop-schema/queriedobject-wp
pop-schema/schema-commons
pop-schema/tags
pop-schema/tags-wp
pop-schema/taxonomies
pop-schema/taxonomies-wp
pop-schema/taxonomymeta
pop-schema/taxonomymeta-wp
pop-schema/taxonomyquery
pop-schema/taxonomyquery-wp
pop-schema/user-roles
pop-schema/user-roles-access-control
pop-schema/user-roles-wp
pop-schema/user-state
pop-schema/user-state-access-control
pop-schema/user-state-mutations
pop-schema/user-state-mutations-wp
pop-schema/user-state-wp
pop-schema/usermeta
pop-schema/usermeta-wp
pop-schema/users
pop-schema/users-wp