- Оригинальный адрес:Руководство для разработчиков интерфейсов по GraphQL
- Оригинальный автор:PEGGY RAYZIS
- Перевод с:Программа перевода самородков
- Постоянная ссылка на эту статью:GitHub.com/rare earth/gold-no…
- Переводчик:ellcyyang
- Корректор:Xekin-FE, xueshuai
Каким бы сложным или простым ни было ваше приложение, вы всегда будете получать данные с удаленного сервера. На внешнем интерфейсе это означает создание REST-подключения к конечной точке, перевод и кэширование ответов сервера, а также повторный рендеринг пользовательского интерфейса. В течение многих лет REST был нормой для API, но в прошлом году новая технология API под названием GraphQL стала популярной благодаря большому опыту разработки и приему описательных данных.
В этой статье мы рассмотрим серию примеров, чтобы проиллюстрировать, как GraphQL может помочь вам решить проблему извлечения удаленных данных. Если вы новичок в GraphQL, не бойтесь! Я перечислю некоторые учебные ресурсы, которые помогут вам изучить GraphQL с помощью стека Apollo, чтобы вы могли освоить его на шаг впереди других.
GraphQL 101
Прежде чем мы сможем понять, почему GraphQL может упростить жизнь фронтенд-инженерам, нам нужно выяснить, что это такое. Когда мы говорим о GraphQL, мы имеем в виду либо сам язык, либо богатую экосистему инструментов, связанных с ним. По своей сути GraphQL — это типизированный язык запросов, разработанный Facebook, который позволяет вам выражать свои потребности в данных в описательной форме. Формат результатов вашего запроса должен соответствовать оператору запроса. В следующем примере мы ожидаем получитьcurrency
а такжеrates
объект недвижимости, гдеrates
содержит сноваcurrency
а такжеrate
Массив объектов ключей.
{
rates(currency: "USD") {
currency
rates {
currency
rate
}
}
}
Когда мы говорим о GraphQL в самом широком смысле, мы в основном имеем в виду экосистему инструментов, которые помогают внедрять GraphQL в приложения. На бэкэнде вы бы использовалиСервер Аполлонадля создания сервера GraphQL — конечной точки, которая анализирует запросы GraphQL и возвращает данные. Как сервер узнает, какие данные возвращать? вам нужно использоватьИнструменты GraphQLчтобы создать словарь (ваш план данных) и карту декомпозиции (ряд функций для извлечения данных из конечной точки REST, базы данных или чего-то еще).
Но на самом деле это проще, чем кажется — с помощью Apollo Launchpad (консоли сервера GraphQL) вы можете создать работающий сервер GraphQL в браузере, написав не более 60 строк кода! 😮 Мы ссылались на этоПанель запуска, которую я создал, который содержит Coinbase API, упомянутый в статье.
вы будете использоватьКлиент АполлонаПодключите свой собственный сервер GraphQL и приложение, это гибкий и быстрый клиент, который извлекает, кэширует и обновляет данные для вас. Поскольку клиент Apollo не связан с визуальным слоем, вы можете написать его на React, Angular, Vue или даже на простом JavaScript. Помимо кросс-фреймворка, Apollo еще и кроссплатформенный, он поддерживает React Native и Ionic.
Попробуйте! 🚀
Теперь, когда вы понимаете, что такое GraphQL на самом деле, давайте начнем с нескольких примеров применения Apollo в вашей работе с интерфейсом. Я уверен, что со временем вы это поймете — архитектура на основе GraphQL с использованием Apollo поможет вам быстрее доставлять данные.
1. Добавьте новые требования к данным без добавления новых конечных точек
Мы все были в такой ситуации: потратили несколько часов на создание идеального компонента пользовательского интерфейса, а затем вдруг требования к продукту изменились. Вы внезапно понимаете, что для получения данных, необходимых для реализации нового требования, вам придется реализовать сложную каскадную модель получения запросов API или, что еще хуже, новую конечную точку REST. Затем ваше задание блокируется, и вы должны попросить серверную часть добавить еще одну новую конечную точку для этого компонента.
Эта распространенная проблема больше не возникает в GraphQL, потому что данные, которые вам нужны на стороне клиента, больше не связаны с ресурсом в конечной точке. Вместо этого ваши запросы к серверу GraphQL всегда идут к одной и той же конечной точке. Ваш сервер указывает все доступные ресурсы через словарь, который вы отправляете, и позволяет вашему запросу определять формат результатов, которые вы получаете. впусти насмоя панель запускаЭти концепции проиллюстрированы на предыдущих примерах:
В строках 22-26 нашего словаря мы определяемExchangeRate
Типы. В этих полях перечислены все ресурсы, которые могут быть запрошены в нашем приложении.
type ExchangeRate {
currency: String
rate: String
name: String
}
В REST мы ограничены тем, что могут предоставить источники данных. если ваш/exchange-rates
Конечная точка не содержит имени, вам необходимо подключить новую конечную точку, например./currency
чтобы получить данные или создать их, если они не существуют.
С GraphQL мы можем проверить словарь и узнать, что поле имени можно запрашивать. Попробуйте добавить поле имени в правую панель панели запуска и запустить.
{
rates(currency: "USD") {
currency
rates {
currency
rate
name
}
}
}
Теперь удалите поле имени и повторите запрос. Видите изменение в формате результатов вашего запроса?
Ваш сервер GraphQL всегда будет добросовестно возвращать запрашиваемые вами данные, не более того. Это очень отличается от REST — в REST вы должны фильтровать и преобразовывать данные в то, что нужно вашим компонентам пользовательского интерфейса. Это не только экономит время, но также снижает нагрузку на сеть и память ЦП, необходимые для загрузки и анализа данных.
2. Сожмите шаблон управления состоянием
Как правило, получение данных включает в себя обновление состояния вашего приложения. Обычно вам нужно написать код для отслеживания как минимум трех действий: когда данные загружаются, успешно ли они поступают и возникают ли ошибки данных. Как только данные поступят, вы должны преобразовать их в то, что ожидают ваши компоненты пользовательского интерфейса, нормализовать их, кэшировать и обновить страницу. Этот процесс повторяется и требует бесчисленных строк кода шаблона для обработки запроса.
Давайте посмотрим на этот примерПример песочницы приложения ReactКак Apollo Client устранил этот скучный процесс. Проверитьlist.js
и перетащите полосу прокрутки вниз.
export default graphql(ExchangeRateQuery, {
props: ({ data }) => {
if (data.loading) {
return { loading: data.loading };
}
if (data.error) {
return { error: data.error };
}
return {
loading: false,
rates: data.rates.rates
};
}
})(ExchangeRateList);
В этом примереReact Apollo, интеграция React для клиента Apollo, которая связывает наш запрос обменного курса с компонентом ExchangeRateList. Как только клиент Apollo обрабатывает этот запрос, он автоматически отслеживает статус загрузки и ошибки и помещает его вdata
перейти к опоре. Когда клиент Apollo получает результат, он обновляется на основе результата запроса.data
prop, а затем обновите пользовательский интерфейс, указав обменный курс, который необходимо использовать при рендеринге.
Клиент Apollo автоматически выполняет форматирование и кэширование данных за вас. Попробуйте нажать на другую валюту на правой панели, чтобы увидеть обновление данных. Теперь снова выберите валюту и посмотрите, как сразу появляются данные? Это кеш Аполлона в действии. Вы можете получить их в клиенте Apollo бесплатно, без дополнительной настройки. 😍 открытьindex.js
Давайте посмотрим на наш код для инициализации клиента Apollo.
3. Быстрая отладка с помощью Apollo DevTools и GraphiQL
Похоже, что Apollo Client проделал для вас большую работу! Как мы можем заглянуть внутрь, чтобы понять, как это работает? Благодаря проверкам хранилища и полной видимости процесса запроса и преобразования Apollo DevTools может не только ответить на эти вопросы, но и сделать отладку менее скучной или даже более увлекательной! 🎉 Это доступно в виде плагина для Chrome и Firefox, и вскоре он также будет работать с React Native.
Если вы хотите попробовать, следуйте предыдущему примеру в своем любимом браузере.Установите инструменты разработчика Аполлоназатем перейдите кour CodeSandbox. Вам нужно нажать «Скачать» в верхней панели навигации, разархивировать файл, запуститьnpm install
потомnpm start
чтобы запустить пример локально. После того, как вы откроете панель инструментов разработчика вашего браузера, вы должны увидеть вкладку под названием Apollo.
Во-первых, давайте проверим Storage Inspector. Эта вкладка отражает состояние кэша клиента Apollo, что упрощает определение правильности хранения ваших данных на стороне клиента.
Apollo DevTools также позволяет тестировать запросы и изменения в GraphiQL, интерактивном редакторе запросов и браузере документации. На самом деле мы уже использовали GraphiQL в нашем первом примере при попытке добавить поле. Для удобства просмотра GraphiQL будет выполнять автозаполнение при вводе запроса в редактор и автоматически создавать документацию на основе системы типов GraphQL. Это чрезвычайно полезно для расширения словарей без каких-либо затрат на обслуживание для разработчиков.
попробовать вмоя панель запускаВыполните запрос в GraphiQL на правой панели! Наведите указатель мыши на поле в редакторе запросов и щелкните всплывающую подсказку, чтобы открыть браузер документации. Если ваш запрос успешно выполняется в GraphiQL, вы можете быть на 100 % уверены, что запрос будет успешно выполняться и в вашем приложении.
Обновите свои навыки GraphQL
Отлично, вы видели это здесь! 👏 Надеюсь, вам понравились примеры, и вы начали понимать, как использовать GraphQL во внешнем интерфейсе.
Хотите узнать больше? 🌮 Включите «Продолжайте изучать GraphQL» в своих новогодних обещаниях на 2018 год! Потому что я надеюсь, что в новом году он станет более популярным. Вот примеры приложений, которые научат вас применять недавно изученные концепции:
- React: код sandbox.io / yes / plus v margin 98 надеюсь…
- Angular (Ionic): AU GitHub.com/Aaron начните свой...
- Vue: code sandbox.IO/Yes/3VM8v Love 6 После прочтения…
Продолжайте использовать GraphQL (не забудьте подписаться на нас в Twitter@apollographql)! 🚀
Программа перевода самородковэто сообщество, которое переводит высококачественные технические статьи из Интернета сНаггетсДелитесь статьями на английском языке на . Охват контентаAndroid,iOS,внешний интерфейс,задняя часть,блокчейн,товар,дизайн,искусственный интеллектЕсли вы хотите видеть более качественные переводы, пожалуйста, продолжайте обращать вниманиеПрограмма перевода самородков,официальный Вейбо,Знай колонку.