Существует множество GraphQL (в дальнейшем именуемый gql), а с тех пор, как появилась спецификация или идея GraphQL, прошло уже больше трех лет.Многие компании практиковали это, некоторые преуспели, а некоторые оставили много дыр и никуда не убегут. На Big Nuggets есть перевод под названием "REST API мертв, GraphQL навсегда", прошло много времени, а мало кто им пользуется😅, так что делитесь базовыми знаниями и учитесь друг у друга. Наконец, я думаю, что в более традиционной области 2B SaaS потенциал gql не был полностью раскрыт.
Что это такое? откуда? Что делать?
Проще говоря, для внешнего интерфейса это то, что заставляет вас чувствовать себя комфортно, отправляя запросы.
Строго говоря, это идея дизайна API, которая используется для замены доминантной спецификации интерфейса интерфейса API для отдыха. Он отображает API-интерфейсы, требуемые внешним интерфейсом, аналогично структуре данных графа (граф), позволяя внешнему интерфейсу легко получать необходимые данные.
Происхождение, проблема с restful API
Если используется restful API, серверная часть продолжит поддерживать документ API, но фактический сценарий выглядит следующим образом:
1. Когда приходят новые требования, сначала оценивается и разрабатывается бэкенд, бэкенд почти такой же, запускается фронтенд, а затем кардинально меняются мидл и бэкенд.
2. Бэкенд по разным причинам часто сам тайно меняет переданные параметры или возвращаемые значения.После того как интерфейс сообщает об ошибке, сестра теста вызывает фронтенд для батча.Х такой цикл очень сильно влияет на эффективность разработки .
появляется gql
Из-за вышеперечисленных проблем Facebook практиковал GraphQL внутри компании в 2012 году. Когда он был впервые открыт в 2015 году, он привлек внимание многих крупных компаний и сообществ и реализовал множество спецификаций и фреймворков. Подробную историю смотрите в видео на YouTube ниже.
Такая вещь, называемая GraphQL, помогает людям пройти ряд определений и спецификаций, может очень удобно отправлять запросы gql для получения желаемых данных и даже изменять данные без сотрудничества с фоном, и как только схема определена (определена на со стороны базы данных хорошо), интерфейс и серверная часть могут быть быстро разработаны параллельно. Например, информация об определенном пользователе получена на следующем рисунке. Я могу написать любые атрибуты, которые я хочу для этого пользователя. Инструмент graphiQl может дать полные и подробные подсказки, а тело запроса простое и понятное.
query{
student{
id
name
age
}
course{
id
title
}
}
Идеальный вариант использования gql
После того, как модель базы данных построена, интерфейсные и серверные части могут начать разработку требований синхронно. Только несколько внешних интерфейсов должны полагаться на интерфейс серверной части. В процессе разработки внешних интерфейсов вы можете легко получить данные, которые вы хотите, тем самым экономя много времени на совместную отладку интерфейсов и быстро завершая проект.
Принцип реализации
Реализация gql достаточно сложная, код немного сложен для понимания, но принцип относительно прост и понятен😀
var { graphql, buildSchema } = require('graphql');
// Construct a schema, using GraphQL schema language
var schema = buildSchema(`
type Query {
hello: String
}
`);
// The root provides a resolver function for each API endpoint
var root = {
hello: () => {
return 'Hello world!';
},
};
// Run the GraphQL query '{ hello }' and print out the response
graphql(schema, '{ hello }', root).then((response) => {
console.log(response);
});
Выше приведена самая простая версия узла gql-сервера.
gql получает определенную схему и использует синтаксический анализатор разрешения, такой как root, для анализа отправленных'{ hello }'
запрос, а затем вернуться к соответствующему значению json. Ответ, напечатанный приведенным выше кодом, выглядит следующим образом
{
data:
{
hello: 'Hello world!'
}
}
Конечно, будут некоторые проблемы с парсингом послойно, если resolve запрашивает базу данных, она будет использована.DataLoader
DataLoader является ключевой частью производительности сервера gql, а также основным направлением продвижения сообщества gql.Так же, как и shouldComponentUpdate в реакции, он ограничивает производительность сервера gql.
DataLoader позволяет нам считывать данные из базы данных и обрабатывать данные с помощью GraphQL. Вместо того, чтобы напрямую извлекать данные из базы данных с помощью SQL-запросов, мы используем DataLoader в качестве прокси-сервера, чтобы уменьшить количество SQL-запросов, которые нам действительно нужно отправить. базу данных. DataLoader реализован с использованием комбинации пакетной обработки и кэширования. Если один и тот же запрос клиента приводит к нескольким запросам к базе данных, DataLoader интегрирует эти проблемы и извлекает данные запроса из базы данных в пакетах. DataLoader будет кэшировать эти данные одновременно, и при последующих запросах, требующих тех же ресурсов, их можно будет получить прямо из кэша.
конкретное использование
Строго определяя тип метаданных, запрашиваемых сервером, мы можем возвращать ожидаемый соответствующий тип данных, если мы отправляем запрос gql на стороне клиента.
На следующем рисунке представлен формат запроса, запрос [запрос], мутация [модификация] и подписка [подписка] — это три метода отправки API, запрос используется чаще, мутация менее надежна и безопасна, чем традиционный отдых, подписка аналогична веб-сокету.
query
{
schema {
types {
id
name // 获取根字段名
fields {
id
name // 获取字段名
}
}
}
}
Надпись в формальной среде, вероятно, длинная, как на картинке ниже, некоторые детали, такие как скаляры и фрагменты, не о чем говорить, см.Официальный китайский сайт GraphQLочень подробный
Вспомогательные инструменты графика и игровая площадка
Артефакт для разработки gql на интерфейсе очень прост в использовании, с умными подсказками, какие типы есть в этой схеме, какой тип значения будет возвращать каждый тип, числа или строки, это понятно с первого взгляда, намного быстрее, чем чтение API-документы
graphiql — веб-версия, достаточно простая в использовании
Игровая площадка делает graphiql на шаг впереди и реализует некоторые небольшие функции.Это приложение, созданное электроном, похожее на react-devtools в RN.
Клиентско-серверная среда, инкапсулирующая gql
В процессе использования gql можно самостоятельно выполнять вторичную инкапсуляцию исходя из бизнеса, а можно использовать готовый фреймворк для более удобной отправки gql-запросов и взаимодействия с react или vue компонентами. Фреймворков сообщества слишком много, просто выберите несколько и расскажите о них, вы можете увидеть детали.Все данные graphql собраны на github
apollo-boost
Он содержит 5 фреймворков, показанных на рисунке ниже. Он используется вместе с react-apollo. Это интерфейсный метод, рекомендованный сообществом apollo. Он быстро разрабатывается, но его неудобно расширять и модифицировать, и это не подходит для пользовательских проектов компании.
apollo-client
Фигура 5 в ядре рамки, различные типы операций базы данных и сервисных интерфейсов Micro-encapsated Integrated redux, проще в использовании, но слегка раздутые, лично чувствуют, GQL Direct Communication с базой данных - это преимущества, такие как док-станция A немного отдохнуть обход.
relay
Официальная структура внешнего кэширования Facebook, похожая на apollo-client, количество звезд на 2 тыс. выше, чем у apollo-client, и конкретное использование аналогично
apollo-server
apollo-server — это веб-промежуточное программное обеспечение, которое создает сервер grqphql на nodejs. Он поддерживает экспресс, коа и т. д. Я мало что знаю об этом. В конце концов, сервер gql поддерживает множество внутренних языков, а также основные языки, такие как java может инкапсулировать сервер gql.
graphpack
Известный как gql-сервер с нулевой конфигурацией, он подходит для быстрого обучения созданию gql-сервера.
Принцип: высокоинкапсулированный сервер apollo, использующий webpack и nodemon для локального открытия сервера gql.
Gatsby
GatsbyJS — очень популярный за рубежом фреймворк, отличный фреймворк для генерации статических сайтов, плюс в том, что его очень удобно создавать и поддерживать, и его можно давать даже людям, которые совсем не разбираются в программировании.
Особенность заключается в том, что он чрезвычайно подходит для научных веб-сайтов и различных рамочных документов (наиболее подходит для создания блогов с уценкой), а также хорошо инкапсулирует плагины для анализа gql и уценки.
prisma
Библиотека orm плюс легкий серверный сервис могут автоматически генерировать интерфейс gql и выставлять его.Экология вокруг prisma изначально установлена, и сообщество продвигает prisma2.Сейчас он находится в стадии выпуска, и можно ожидать будущего.
Преимущества и недостатки по сравнению с отдыхом
преимущество
- Преимущество в том, что серверная часть может использовать на несколько меньше интерфейсов для записи🐶, что может снизить затраты.
- Совместная фронтенд и бэкэнд разработка, что экономит время на строительство
- Меньше обслуживания документации API, экономия усилий
Сказав это, на самом деле, только для передней части это не очень полезно.
Недостатки и сложности в продвижении
-
Для внутреннего или среднего уровня сложно инкапсулировать соответствующий бизнес с помощью gql и подключиться к базе данных, что требует высококвалифицированных кадров.
-
Внешний интерфейс должен немного изучить SQL-подобные операторы, но большинство сценариев могут инкапсулировать фиксированные SQL-операторы.
-
Плохая инкапсуляция gql вызовет проблемы с производительностью SQL, и старые проблемы трехуровневого вложенного совместного запроса и n+1 снова появятся, и потребуется постоянная оптимизация.
-
Устранение неполадок во внешнем интерфейсе требует определенного объема внутренних знаний и некоторого понимания архитектуры внешнего и внутреннего интерфейса.
Суммировать
1. Если вы попытаетесь разработать проект GraphQL, рекомендуется перейти непосредственно в семейное ведро Аполлона
2. По мере того, как сообщество становится все более зрелым, порог ввода в выходной сигнал также опускается, и GraphQL может дать ему попробовать
3. С точки зрения современных технологий, graphql подходит только для запросов к базе данных док-станции, а другие затраты на разработку все еще слишком высоки.
4. Садитесь в автобус как можно раньше, выучите еще один предмет и не перегружайте себя множеством навыков
Из-за ограниченного места это всего лишь краткое введение.Каждый маленький пункт представляет собой статью, поэтому я не буду вдаваться в подробности.Если вы хотите испытать GQL, повышение производительности, принесенное им, определенно стоит своих денег! Если вам что-то не понятно или то, что автор говорит не так, пожалуйста, оставьте сообщение в области комментариев, и я начну его пересматривать😘 Кроме того, из-за постоянного углубления личных когнитивных исследований и быстрого изменение технологии интерфейса, эта статья также будет постоянно обновляться.
Отлично собрана информация
Некоторая отличная информация о рынке, приглашаю всех добавить!
Официальный китайский сайт GraphQL
Учебный веб-сайт github superstar (английский язык может быть переведен автоматически)
официальный сайт apollo-graphql (английский)
Все данные graphql собраны на github
Английские речи боссов фейсбука на ютубе (надо опрокинуть стену)
Иностранцы используют небольшую демонстрацию на стороне клиента и на стороне сервера apollo && демонстрационный сервер
Разговоры о GRAPHQL, из понимания графа
Десять вещей, которые мешают вам использовать GraphQL
Совместная разработка интерфейсов и серверов с использованием правильной позиции GraphQL.