Π‘Π»ΠΎΠ³

πŸ’πŸ½β€β™‚οΈ ΠŸΠΎΡ‡Π΅ΠΌΡƒ для ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ CMS-agnosticism Gato GraphQL Π±Ρ‹Π» Ρ€Π°Π·Π΄Π΅Π»Ρ‘Π½ Π½Π° ~90 ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ², ΠΈ ΠΊΠ°ΠΊΠΎΠ²Ρ‹ прСимущСства ΠΈ нСдостатки этого ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π°

Leonardo Losoviz
Автор: Leonardo Losoviz Β·

На ΠΏΡ€ΠΎΡˆΠ»ΠΎΠΉ Π½Π΅Π΄Π΅Π»Π΅ я ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π» ΡΡ‚Π°Ρ‚ΡŒΡŽ πŸ’πŸ»β€β™€οΈ ΠŸΠΎΡ‡Π΅ΠΌΡƒ Gato GraphQL Π½ΡƒΠΆΠ΅Π½ ΠΌΠΎΠ½ΠΎΡ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ ΠΈ ΠΊΠ°ΠΊ ΠΎΠ½ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½, ΠΎΠ±ΡŠΡΡΠ½ΡΡŽΡ‰ΡƒΡŽ, ΠΊΠ°ΠΊ ΠΈ ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΌΠΎΠ½ΠΎΡ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ GatoGraphQL/GatoGraphQL, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ хранится ΠΊΠΎΠ΄ Gato GraphQL, ΠΌΠΎΠΆΠ΅Ρ‚ эффСктивно ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΊΠΎΠ΄ΠΎΠ²ΠΎΠΉ Π±Π°Π·ΠΎΠΉ ΠΏΠ»Π°Π³ΠΈΠ½Π°.

Π― подСлился своСй ΡΡ‚Π°Ρ‚ΡŒΡ‘ΠΉ Π½Π° Reddit ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ» ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ:

Π‘Ρ‚Π°Ρ‚ΡŒΡ Π°Π²Ρ‚ΠΎΡ€Π° ΠΈ ΡΡ‚Π°Ρ‚ΡŒΠΈ, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ½Π° ссылаСтся, Ρ‡ΠΈΡ‚Π°ΡŽΡ‚ΡΡ Ρ‚Π°ΠΊ, Π±ΡƒΠ΄Ρ‚ΠΎ ΠΌΠΎΠ½ΠΎΡ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ β€” это Π²Π΅Π»ΠΈΡ‡Π°ΠΉΡˆΠ΅Π΅ ΠΈΠ·ΠΎΠ±Ρ€Π΅Ρ‚Π΅Π½ΠΈΠ΅ со Π²Ρ€Π΅ΠΌΡ‘Π½ Π½Π°Ρ€Π΅Π·Π½ΠΎΠ³ΠΎ Ρ…Π»Π΅Π±Π°.

Π‘ΠΎΠ»Π΅Π΅ интСрСсной Π±Ρ‹Π»Π° Π±Ρ‹ ΡΡ‚Π°Ρ‚ΡŒΡ, ΠΎΠ±ΡŠΡΡΠ½ΡΡŽΡ‰Π°Ρ, ΠΏΠΎΡ‡Π΅ΠΌΡƒ Π²Ρ‹ Ρ€Π΅ΡˆΠΈΠ»ΠΈ, Ρ‡Ρ‚ΠΎ CMS-agnosticism Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ раздСлСния всСго Π½Π° ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ малСнькиС ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹, ΠΈ ΠΏΠΎΡ‡Π΅ΠΌΡƒ Π²Ρ‹ посчитали, Ρ‡Ρ‚ΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ ΠΈΠ· Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅ΠΌ 200 ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² Π½ΡƒΠΆΠ΅Π½ свой ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ.

Π­Ρ‚ΠΎ интСрСсный вопрос. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ я Ρ€Π΅ΡˆΠΈΠ» Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π΄Π°Π½Π½ΡƒΡŽ ΡΡ‚Π°Ρ‚ΡŒΡŽ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π΅Π³ΠΎ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅.

Но сначала я ΠΎΡΡ‚Π°Π½ΠΎΠ²Π»ΡŽΡΡŒ Π½Π° Π΄Π²ΡƒΡ… смСТных Ρ‚Π΅ΠΌΠ°Ρ…: сколько ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎ трСбуСтся ΠΏΠ»Π°Π³ΠΈΠ½Ρƒ ΠΈ ΠΏΠΎΡ‡Π΅ΠΌΡƒ я ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π°ΡŽ, Ρ‡Ρ‚ΠΎ Π»Π΅ΠΆΠ°Ρ‰ΠΈΠΉ Π² основС GraphQL-сСрвСр являСтся CMS-agnostic.

Из ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² состоит ΠΏΠ»Π°Π³ΠΈΠ½

Π₯отя я ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π» Π±ΠΎΠ»Π΅Π΅ 200 PHP-ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ², это относится ΠΊ ΠΌΠΎΠ½ΠΎΡ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΡŽ; для ΠΏΠ»Π°Π³ΠΈΠ½Π° ΠΈΡ… Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ мСньшС.

ΠœΠΎΠ½ΠΎΡ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ GatoGraphQL/GatoGraphQL ΠΎΡ…Π²Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ 5 ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ²:

  1. PoP β€” сСрвСрная Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π½ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ (ΠΊΠ°ΠΊ React, Π½ΠΎ для бэкСнда)
  2. GraphQL by PoP β€” CMS-agnostic GraphQL-сСрвСр для PHP
  3. Gato GraphQL
  4. конструктор сайтов (WIP)
  5. 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:

Π”ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅: список 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

ΠŸΠΎΠ΄ΠΏΠΈΡˆΠΈΡ‚Π΅ΡΡŒ Π½Π° Π½Π°ΡˆΡƒ рассылку

Π‘ΡƒΠ΄ΡŒΡ‚Π΅ Π² курсС всСх ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΉ Gato GraphQL.