Раскройте контент с помощью Strapi и GraphQL в системе запросов функций на GSOC’20.
Вы определенно получили именно то, что хотели, и вам понравилось пользоваться этим. Теперь вы просто хотите знать, как это на самом деле работает под капотом. Это настоящая магия? Бог только что сформировал его в соответствии с вашими потребностями и послал его с небес? Пойдемте со мной, и я отвечу на все ваши GraphQL
вопросы.
Что я делал на этой неделе?
Мне потребовалось некоторое время, чтобы понять, что GraphQL
— это не другой язык программирования. Это спецификация или технический стандарт. Это означает, что он может иметь несколько реализаций и вариаций. GraphQL.js
— эталонная реализация JavaScript. Такие легенды, как Strapi
, реализовали полностью настраиваемый GraphQL
плагин, который создает новую конечную точку /graphql
и интерфейс GraphiQL. Плагин добавляет новый слой, позволяющий легко запрашивать API с помощью GraphQL
, не нарушая существующие конечные точки.
GraphQL
по умолчанию защищает все запросы, и плагин хорошо сочетается с плагином пользователей и разрешений. Когда мы делаем запрос с GraphQL
, мы выполняем те же действия контроллера, что и с конечными точками REST
.
Я использовал систему самоанализа GraphQL
, чтобы получить все категории, доступные нашему пользователю, при создании новой истории.
Я также использовал мутацию для создания новой пользовательской истории, которая принимает все данные, введенные пользователем, в качестве параметра. Я пропускаю все свои запросы GraphQL
через набор настраиваемых политик, прежде чем они попадут в мои настраиваемые контроллеры проверки подлинности в настроенной серверной части Strapi
. На этом функция создания новой пользовательской истории завершена.
На стороне сервера я создал новую модель для комментариев к историям, которая содержит 3 поля. Первое поле представляет собой форматированное текстовое поле для написания комментария, а два оставшихся поля представляют собой поля отношений с моделями запросов пользователей и функций. Это означает, что мне также пришлось добавить поле отношения к модели запроса функции, чтобы связать ее с моей моделью комментариев.
Следующей большой особенностью недели было добавление функциональности для отображения всех историй на главной странице в соответствии с их текущим статусом. Функция Shadow CRUD плагина Strapi
GraphQL
автоматически генерирует определение типа, запросы, мутации и преобразователи на основе наших моделей. Эта функция также позволяет нам создавать сложные запросы с множеством аргументов, таких как limit
, sort
, start
и where
. Это помогло мне реализовать запрос GraphQL
для получения необходимой информации обо всех пользовательских историях и сортировки их по наибольшему количеству голосов и последним созданным историям. Я использовал ответ на запрос, чтобы отобразить заголовок, описание и номер. голосов и комментариев для всех историй на главной странице.
Все эти функции за неделю помогли мне очень быстро догнать GraphQL
. Это было совершенно новым для меня, и я чувствовал себя застрявшим всего за неделю до этого. Теперь, к концу недели, я счастлив, что могу понять, как это работает так эффективно в глубине слоев.
Что будет дальше?
Я буду работать над отображением всей информации о каждой пользовательской истории на отдельной странице. Для этого требуется запрос для получения всех деталей истории по идентификатору истории. Дата публикации и сведения об авторе также будут доступны на этой странице.
Системе нужна функция редактирования, которая может позволить нашим любимым пользователям добавлять информацию в свою историю. Однако им не будет разрешено редактировать существующее описание.
Я где-нибудь застрял?
Иногда бывает трудно обнаружить редкие ошибки, и вы можете застрять, пытаясь их решить. На этой неделе я столкнулся с чем-то странным.
Весь мой код и функциональность успешно работали в моей среде разработки. После слияния Gitlab CI развернул его на наших промежуточных серверах, и все приложение рухнуло, как на стороне клиента, так и на стороне сервера.
Наконец-то я решил все ошибки и узнал, что Strapi
хранит в базе данных все роли и разрешения, которые мы назначаем нашим пользователям. В этом случае наши серверы разработки и подготовки используют разные базы данных. Простой :)
Мы только что экспортировали данные всех наших моделей из тестовой базы данных в ту, которая используется нашим промежуточным сервером.
Еще одна ошибка заключалась в том, чтобы указать точное cors
происхождение, которое может получить доступ к нашему серверу, поскольку я использовал withCredentials : true
в моей конфигурации Axios
для хранения файлов cookie в браузере и отправки их обратно в будущих запросах.
На этом неделя завершилась первыми оценками, в ходе которых я получил потрясающие отзывы от своих наставников и с честью прошел их. Я поблагодарил их за всю их поддержку и руководство. Впереди большое путешествие :)