В 2012 году, когда Facebook начал реархитектуру своих мобильных приложений на основе HTML5, чтобы они стали родными приложениями для iOS или Android, компания изобрела GraphQL . Этот новый язык запросов с открытым исходным кодом позиционируется как прямая замена REST . GraphQL обеспечивает более эффективный способ поддерживать объем взаимодействия, который происходит в приложениях Facebook каждый день, но он не зависит от базы данных и создан для использования за пределами Facebook.
Хотя GraphQL все еще относительно нов, крупные компании, такие как Intuit, Coursera, Pinterest и Shopify, уже используют его в производстве. В прошлом месяце GitHub объявил о поддержке GraphQL для своего GitHub API , чтобы устранить некоторые недостатки своей архитектуры REST.
GraphQL предлагает новый способ структурирования связи между клиентом и сервером, что делает выборку данных более эффективной. В своей статье GraphQL в эпоху REST API Петр Бела резюмирует разницу между двумя типами архитектуры:
Сила GraphQL заключается в простой идее — вместо того, чтобы определять структуру ответов на сервере, гибкость предоставляется клиенту. В каждом запросе указывается, какие поля и отношения он хочет получить, и GraphQL создаст ответ, адаптированный для этого конкретного запроса. Преимущество: требуется только один круговой обход для получения всех сложных данных, которые в противном случае могли бы охватывать несколько конечных точек REST, и в то же время возвращать только те данные, которые действительно необходимы, и ничего более.
В прошлом месяце Facebook объявил, что GraphQL выходит из стадии «технической предварительной версии» и теперь готов к работе. Он был реализован на многих различных языках программирования и уже принят компаниями, которым нужен более эффективный способ доступа к данным.
WordExpress добавляет GraphQL в WordPress
Рамсей Ланье, разработчик интерфейса JavaScript, который работает в nclud в Вашингтоне, округ Колумбия, создал реализацию WordPress на основе GraphQL под названием WordExpress . Ланье не является поклонником PHP и не любит работать с циклами или шаблонами — всеми теми вещами, которые исторически составляли основную часть разработки интерфейса WordPress. Он создал WordExpress как приложение Node.js с целью заменить PHP на JavaScript для презентационной части WordPress. Он использует компоненты Express на бэкэнде и компоненты React на внешнем интерфейсе. GraphQL находится между ними для извлечения данных из базы данных WordPress.
«Когда я первоначально начал с идеи для WordExpress, я хотел использовать REST API, но обнаружил, что существующие конечные точки не то, что мне нужно», — сказал Ланье. «В конечном итоге мне пришлось бы написать кучу пользовательских конечных точек и объединить вызовы в цепочку. Поэтому я решил попробовать GraphQL».
Он обнаружил, что GraphQL более эффективен, чем REST, потому что он сокращает количество обращений к серверу, позволяя разработчикам сосредоточиться на том, какие данные действительно нужны клиенту. Ланье выделил преимущества сайтов WordPress:
С GraphQL клиент определяет точные данные, которые ему нужны, с помощью запроса GraphQL. Запрос GraphQL имеет пользовательскую разрешающую функцию, которая определяет, как эти данные извлекаются. В этой функции вы даже можете обращаться к нескольким базам данных. Например, в WordPress у вас есть база данных MySQL, но у вас также может быть база данных Mongo для приложения, в котором хранятся другие данные, которые не обязательно должны быть реляционными. В разрешающей функции GraphQL вы можете совершать вызовы для извлечения данных из обеих баз данных и отправлять их обратно клиенту за одно обращение к серверу.
WordExpress в его нынешнем виде является хорошей отправной точкой для создания приложений на основе JavaScript, которые используют WordPress для администрирования. Ланье сказал, что эта установка для разработки позволяет ему создавать компоненты веб-страниц и приложений намного проще, чем с помощью шаблонов PHP.
«В React каждый компонент содержит не только разметку для отображения информации, но и стили для этого компонента, данные, необходимые для работы, а также любую логику взаимодействия — и все это в одном или двух файлах», — сказал он.
Текущие проблемы WordExpress: совместимость плагинов и рендеринг на стороне сервера
Несмотря на все впечатляющие преимущества более эффективных запросов и возможности внешнего интерфейса на основе JavaScript, проект WordExpress имеет ряд серьезных проблем, которые затруднили бы его использование в производстве, кроме простой установки блога. Он несовместим с подавляющим большинством плагинов WordPress, так как большинство из них написаны на PHP.
«По сути, я заменил весь внешний интерфейс, а это значит, что любые плагины, влияющие на внешний интерфейс, ничего не сделают», — сказал Ланье. «Однако вы, безусловно, можете использовать существующие плагины, которые влияют на административную часть вещей (например, расширенные настраиваемые поля или плагин AWS S3). Все, что манипулирует тем, как данные WordPress хранятся в MySQL, по-прежнему можно использовать — вам просто нужно изменить схему GraphQL и запросы для работы с ними».
Другая серьезная проблема — заставить работать рендеринг на стороне сервера, который необходим для обработки таких вещей, как SEO и метатеги. Apollostack, который WordExpress использует для извлечения данных и доставки их компонентам React, только недавно добавил раннюю поддержку автоматического рендеринга на стороне сервера .
«Я перешел с Facebook Relay на ApolloStack, — сказал Ланье. «Обе технологии довольно новые, и я не уверен, что хоть одна из них действительно хорошо разобралась в том, как правильно обрабатывать рендеринг на стороне сервера. Я не интересовался этим несколько месяцев, и с ApolloStack дела идут довольно быстро, так что они, возможно, уже поняли это».
На данный момент WordExpress является всего лишь проверкой концепции, и Ланье сказал, что у него нет планов пытаться поддерживать существующие плагины. Учитывая, что WordExpress в настоящее время не может использовать темы и плагины, одни из лучших частей экосистемы WordPress, Ланье сказал, что разработчики, использующие этот стек, вероятно, больше заинтересованы в сохранении возможностей административной части WordPress.
«Мне нравится администратор WordPress», — сказал он. «Он очень мощный и простой в использовании для управления контентом. WordExpress станет отправной точкой для любого разработчика JavaScript, который хочет создавать приложения WordPress, используя только JavaScript».
Цель Lanier с WordExpress — превратить его в пакет npm, который можно повторно использовать в различных проектах React. Он уже опубликовал два пакета WordExpress npm, которые работают вместе: wordexpress-schema (обрабатывает схему GraphQL и параметры подключения) и wordexpress-components (в настоящее время содержит первые два компонента, WordExpressPage и WordExpressMenu). Поскольку проект построен на Node.js, разработчики могут использовать любой пакет npm, который они хотят, в качестве утешения для ограниченной совместимости плагинов.
GraphQL и WP REST API
Многие из тех, кто предсказывает, что GraphQL станет прямой заменой REST, также считают, что они могут сосуществовать. На самом деле Facebook недавно написал руководство по обертыванию REST API в GraphQL .
«Вероятно, если GraphQL окажется эффективным, он будет сосуществовать с REST API», — сказал Петр Бела. «Некоторые API будут использовать REST, некоторые будут использовать GraphQL. Некоторые могут поддержать и то, и другое». Он предсказывает , что отрасли потребуются годы, возможно, даже десятилетие, чтобы полностью перейти с REST на GraphQL.
WordExpress от Lanier, недавно получивший 1000 звезд на GitHub, в настоящее время является единственным проектом с открытым исходным кодом, который публично исследует реализацию WordPress на базе GraphQL. Беглый поиск на GitHub показывает, что многие другие экспериментируют с аналогичными настройками. К счастью, GraphQL не требует каких-либо изменений в ядре WordPress, чтобы сайты могли использовать API для запросов к базе данных.
Ланье сказал, что ценит работу тех, кто пытается объединить WP REST API с ядром, и не видит в реализации GraphQL угрозы для этого.
«Я думаю, что работа, которую они делают с REST API, — это хорошо», — сказал он. «Они определенно должны были сделать этот шаг. REST существует уже давно — GraphQL все еще довольно нов, поэтому имеет смысл пойти по пути REST. Кроме того, гораздо больше людей знают, как его использовать. Преимущество GraphQL в том, что вы можете использовать его для обертывания REST API, так что они оба могут сосуществовать».
Возможность того, что WordExpress выйдет за рамки простой проверки концепции, зависит от отзывов сообщества. Ланье сказал, что разработчики проявляют интерес к WordExpress, разветвляя его и задавая вопросы.
«Люди используют его, играют и (надеюсь) делают его по-своему», — сказал он. «Я думаю, интерес есть. Однако, чтобы сделать это действительно осуществимым, вам нужна целая команда разработчиков, чтобы сделать это первоклассным вариантом ».
Ланье недавно устроился на новую работу, где он использует React на 100%, и какое-то время у него не было возможности использовать WordPress, но он сказал, что открыт для изучения сотрудничества, чтобы подготовить WordExpress к производству.
«Если бы люди были действительно заинтересованы и хотели бы собраться вместе, чтобы превратить это в осуществимое решение, я бы на 100% участвовал в этом», — сказал он.
Разработчикам, которые хотят протестировать его и начать разработку с помощью WordExpress, потребуется базовое понимание того, как работает React. Ланье написал подробную документацию о том, как настроить реализацию GraphQL и как расширить запросы GraphQL и модели баз данных. Сайт WordExpress.io — это живая демонстрация кода, которую вы можете найти на GitHub .