Рубрики
Без рубрики

Как я узнал, Graphql – лучший отдых

Введите Graphql – где здание серверу, API, управляемое полный стек приложений, как делать блинчики – смешать, тепло и есть – без беспорядка.

Автор оригинала: Joel Serino.

Обо мне

Привет. Я Джоэл, провидец, который научился использовать технологии для улучшения наших коллективных идей. Мне нравится путешествовать, исследовать, приключение, поход, подъем, писать, построить, поделиться и научиться получать лучшие идеи на рынок. Я смесь провидца, интегратора и маркете, чье истинное направление на севере. Я катаюсь на волне полного стека архитектора и маркетолога полного стека на ежедневной … найти лучшие способы добраться до нас отсюда, где мы знаем, что мы хотим быть.

Почему я хотел выучить graphql

Я всегда был известен и для того, чтобы быть на кровотеченном краю продвижения, либо в технологии, философии, либо в другом месте … Это необходимый дар того, чтобы быть провидцем. Поэтому для кого-то, кто начинает много новых проектов на стеках, которые становятся растущими предприятиями, которые должны масштабировать весь насадочный инструментарий, включая методы защиты и транспортировки данных между конечными точками любого типа (IOT, мобильный, веб, API, чат, бот, так далее); а также зная, что связь в реальном времени является просьбой, часто сделанным владельцами приложений и дизайнерами продуктов; Я намеревался послушать то, что говорилось о том, как говорилось об сообществе технологических футуристов и то, что я слышал, было это снова и снова; Отдых мертв.

Ну – да, это должно быть. Это может быть довольно сложно обеспечить, оптимизировать и настроить эффективность в масштабе (особенно на опыте разработчика), что большинство приложений в конечном итоге требуют за пределами двухлетнего знака. Все программы раздувается, и мне нужен способ предоставить разработчикам приложений лучшего рабочего процесса для создания будущих доказательств для своего бизнеса, поэтому они могут продолжать сосредоточиться на том, что действительно имеет значение больше всего: создание ценности для клиентов и/или пользователей.

Введите Graphql – где здание серверу, API, управляемое полный стек приложений, как делать блинчики – смешать, тепло и есть – без беспорядка.

Graphql Это новый стандарт API, который обеспечивает более эффективную, мощную и гибкую альтернативу для отдыха. Это было разработано и Открытый с помощью Facebook И теперь поддерживается крупным сообществом компаний и лиц со всего мира.

API стали повсеместными компонентами программных инфраструктур. Короче говоря, API Определяет, как клиент может загрузить данные из Сервер Отказ

На его ядре Graphql позволяет Декларативные данные для получения Где клиент может точно указать, какие данные им нуждаются в API. Вместо нескольких конечных точек, которые возвращают фиксированные структуры данных, сервер GraphQL предоставляет только одну конечную точку и отвечает именно то данные, которые задают клиент.

Graphql – язык запроса для API

Большинство приложений сегодня имеют необходимость получать данные с сервера, где данные хранятся в базе данных. Это обязанность API предоставить интерфейс для хранимых данных, которые соответствует потребностям приложения.

GraphQL часто путается с технологией базы данных. Это неправильное представление, graphql – это Язык запроса Для API – не базы данных. В этом смысле это база данных Agnostic и эффективно может использоваться в любом контексте, где используется API.

Более эффективная альтернатива для отдыха

💡 Узнайте больше о главных причинах использовать GraphQL в это Сообщение блога.

Отдых был популярным способом выставить данные с сервера. Когда была разработана концепция отдыха, клиентские приложения были относительно простыми, а темпы развития были почти там, где это сегодня. Отдых таким образом был хорош для многих приложений. Однако ландшафт API радикально изменился за последние пару лет. В частности, есть три фактора, которые были сложными, как спроектирован API:

1. Увеличение мобильного использования Создание необходимости для эффективной загрузки данных

Увеличение мобильного использования, с низким энергопотреблением устройств и небрежные сети были первоначальными причинами, по которым Facebook разработала GraphQL. GraphQL минимизирует объем данных, которые необходимо перенести по сети и, таким образом, в основном улучшается приложения, работающие в этих условиях.

2. Разнообразие различных Frontend Frameworks и платформ

Гетерогенный ландшафт Frontend Frameworks и платформ, которые управляют клиентскими приложениями, затрудняют создание и поддерживать одну API, которая соответствует требованиям всех. С GraphQL каждый клиент может получить доступ точно к нужным данным.

3. Быстрое развитие и ожидание для быстрого развития функции

Непрерывное развертывание стало стандартом для многих компаний, быстрые итерации и частые обновления продукта являются незаменимыми. С помощью API по поводу остальных, то, как данные выставлены на сервере, часто необходимо изменять для учета конкретных требований и изменений дизайна на стороне клиента. Это препятствует быстрой практике развития и итерации продукта.

История, контекст и усыновление

Graphql не только для разработчиков реагирования

Facebook начал использовать GraphQL в 2012 году в своих собственных мобильных приложениях. Интересно, однако, GraphQL в основном поднял, чтобы использовать в контексте веб-технологий и приобрел только небольшое сцепление в родном мобильном пространстве.

Первый раз, когда Facebook публично говорил о Graphql был в Rect.js conf 2015 и вскоре после объявления их планирует открыть исходный код Это. Потому что Facebook всегда всегда говорил о GraphQL в контексте Реагировать Потребовалось некоторое время для разработчиков без реагирования, чтобы понять, что GraphQL был ни в коем случае, не является технологией, которая была ограничена использованием реагирования.

Дэн Шафер & Jing chen. публично ввести graphql rest.js conf 2015. Смотреть видео .

Быстро растущее сообщество

Фактически, Graphql – это технология, которую можно использовать везде, который клиент связывается с API. Интересно, другие компании, как Netflix или Курсера работали над сопоставимыми идеями, чтобы сделать взаимодействия API более эффективным. Coursera предусматривала аналогичную технологию, чтобы позволить клиенту указать свои требования к данным и Netflix, даже открытым их решением, называемым Falcor Отказ После того, как GraphQL была открыта открыта, Курсера полностью отменил свои собственные усилия и прыгнул на поезде GraphQL.

Сегодня GraphQL используется в производстве Много разных компаний Такие как Github, Twitter, Yelp и Shopify – просто назвать только несколько.

Несмотря на то, что настолько молодые технологии, Graphql уже принято. Учить кто еще использует GraphQL в производстве.

Есть все конференции, посвященные GraphQL, такие как Summit GraphQL или Graphql Europe и больше ресурсов, таких как GraphQL Radio подкаст и Graphql Weekly Новостная рассылка.

Как я подошел к изучению Graphql

За последнее десятилетие Отдых Стал стандартным (пока нечеткий) для проектирования веб-API. Он предлагает несколько отличных идей, таких как серверы без гражданства и Структурированный доступ к ресурсам Отказ Тем не менее, API для отдыха показали слишком негибко, чтобы не отставать от быстро меняющихся требований клиентов, которые их получают.

GraphQL был разработан, чтобы справиться с необходимостью более гибкости и эффективности! Это решает многие недостатки и неэффективности, которые разработчики испытывают при взаимодействии с API для отдыха.

Чтобы проиллюстрировать основные различия между отдыхом и графом, когда речь идет о получении данных из API, давайте рассмотрим простой, но типичный сценарий:

Приложение контента, которое необходимо отобразить названия постов определенного пользователя

Та же экран также отображается имена последних 3 подписчиков этого пользователя. Как эта ситуация будет решена с отдыхом и графом?

Получение данных с REST VS GraphQL

С помощью API отдыха мы обычно собираем данные, доступа к нескольким конечным точкам. В этом примере это может быть /пользователи/ Конечная точка для получения начальных пользовательских данных. Во-вторых, вероятно, будет /пользователи/>/посты Конечная точка, которая возвращает все сообщения для пользователя. Третья конечная точка будет тогда /пользователи//подписчики Это возвращает список последователей на пользователя.

С остальным мы должны сделать три запроса на разные конечные точки, чтобы получить необходимые данные. Мы тоже перенапряжение Поскольку конечные точки возвращают дополнительную информацию, которая не требуется.

В GraphQL с другой стороны, мы просто отправляем один запрос на сервер GraphQL, который включает в себя конкретные требования к данным. Затем сервер отвечает объектом JSON, где выполняются эти требования.

Использование GraphQL, клиент может точно указать данные, которые нужно в запрос Отказ Обратите внимание, что то состав Отклика сервера следует точно вложенной структурой, определенной в запросе.

Не более и недостаточно

Одной из наиболее распространенных проблем с остальным является то, что чрезмерное и недотверждение. Это происходит, потому что единственный способ для клиента для загрузки данных – это удаление конечных точек, которые возвращают Исправлено Структуры данных. Очень трудно разработать API таким образом, чтобы он мог предоставить клиентам своими точными потребностями данных.

«Думаю в графиках, а не конечных точках». Уроки от 4 лет GraphQl По Ли Байрон , Co-Inventor GraphQL.

Пересекание: загрузка лишних данных

Переселение означает, что клиент загружает больше информации, чем фактически требуется в приложении. Представьте, например, экран, который необходимо отобразить список пользователей только со своими именами. В API отдыха это приложение обычно ударило бы /пользователи Конечная точка и получите массив JSON с пользовательскими данными. Этот ответ, однако, может содержать дополнительную информацию о возвращении пользователей, например, их дни рождения или адреса – информация, которая бесполезна для клиента, потому что ему нужно только отображать имена пользователей.

Недооценение и проблема N + 1

Еще одна проблема Подстановка и N + 1 – проблему проблем. Подтверждение обычно означает, что определенная конечная точка не обеспечивает достаточного количества необходимой информации. Клиенту придется внести дополнительные запросы, чтобы получить все необходимое. Это может обостриться в ситуации, когда клиент должен сначала загрузить список элементов, но затем необходимо сделать один дополнительный запрос на элемент для получения необходимых данных.

В качестве примера рассмотрите то же приложение также нужно будет отображать последние три подписчика на пользователя. API обеспечивает дополнительную конечную точку /пользователи/>/подписчики Отказ Чтобы иметь возможность отобразить необходимую информацию, приложение придется сделать один запрос на /пользователи конечная точка, а затем нажмите /пользователи/>/подписчики конечная точка для каждый Пользователь.

Быстрые итерации продукта на Frontend

Общий шаблон с API для отдыха состоит в том, чтобы структурировать конечные точки в соответствии с мнениями, которые мы имеем внутри нашего приложения. Это удобно, поскольку он позволяет клиенту получить всю необходимую информацию для определенного представления, просто доступ к соответствующей конечной точке.

Основным недостатком этого подхода является то, что он не допускает быстрых итераций на интерфейсе. С каждым изменением, сделанным для UI, существует высокий риск, который теперь требуется больше (или меньше) данных, требуемых, чем раньше. Следовательно, бэкэнда также должна быть скорректирована для учета новых потребностей данных. Это убивает производительность и, в частности, замедляет возможность включать в себя обратную связь пользователей в продукт.

С GraphQL эта проблема решена. Благодаря гибкому характеру GraphQL, изменения на стороне клиента могут быть сделаны без дополнительной работы на сервере. Поскольку клиенты могут указать свои точные требования к данным, ни один инженер-инженер не должен внести корректировки, когда требуется дизайн и данные на изменение интерфейса.

Проницательная аналитика на бэкэнде

GraphQL позволяет нам иметь тонкозернистые идеи о данных, которые запрашивают на бэкэнде. Поскольку каждый клиент указывает именно то, какую информацию он заинтересован, можно глубокое понимание того, как используются доступные данные. Это может, например, помочь в развитии API и обесценения определенных полей, которые больше не требуются никаких клиентов.

С GraphQL мы также можем сделать мониторинг производительности низкого уровня запросов, которые обрабатываются нашим сервером. Graphql использует концепцию Функции Resolver Чтобы собрать данные, которые запрашиваются клиентом. Инструментальные и измерительные характеристики этих резольвенсе предоставляют важнейшие идеи о узких местах в нашей системе.

Преимущества системы схемы и типа

GraphQL использует систему сильного типа для определения возможностей API. Все типы, которые выставляются в API, записываются в Схема Использование языка определения схемы GraphQL (SDL). Эта схема служит договором между клиентом и сервером для определения того, как клиент может получить доступ к данным.

Как только схема определена, команды, работающие на Frontend и Bratends, могут выполнять свою работу без дополнительной связи, поскольку они оба знают о определенной структуре данных, которые отправляются по сети.

Команды Frontend могут легко проверить свои приложения путем издевания требуемых структур данных. После того, как сервер будет готов, переключатель может быть перевернут для клиентских приложений для загрузки данных из фактического API.

Проблемы я столкнулся

Задача в создании API в наши дни – фундаментальные языковые конструкции GraphQL. Это включает в себя первый проблеск, который мы берем на синтаксис для определения Типы а также отправка Запросы и Мутации … Это совершенно невосприимчиво и очень запоминает дни бега SQL Запросы для получения данных.

Так что помочь нам преодолеть начальный горб, вот как мы разбиваем основные концепции Graphql, где в конце мы начнем проект.

Язык определения схемы (SDL)

GraphQL имеет систему собственного типа, которая используется для определения Схема API. Синтаксис для написания схем называется Язык определения схемы (SDL).

Вот пример того, как мы можем использовать SDL, чтобы определить простой тип под названием Человек :

type Person {
  name: String!
  age: Int!
}

Этот тип имеет два Поля , они называются Имя и возраст и соответственно типа Строка и Int Отказ ! После типа означает, что это поле Требуется Отказ

Также возможно выражать отношения между типами. В примере Блоггинг Приложение, A Человек может быть связан с Пост :

type Post {
  title: String!
  author: Person!
}

И наоборот, другой конец отношений должен быть размещен на Человек тип:

type Person {
  name: String!
  age: Int!
  posts: [Post!]!
}

Обратите внимание, что мы только что создали один ко многим -Соделиться между Человек и Пост Так как Сообщения поле на Человек на самом деле массив постов.

Получение данных с запросами

При работе с API на отдых данные загружаются из определенных конечных точек. Каждая конечная точка имеет четко определенную структуру информации, которую она возвращается. Это означает, что требования к данным клиента эффективно закодирован в URL, к которому он соединяется.

Подход, который принимается в GraphQL, радикально отличается. Вместо того, чтобы иметь несколько конечных точек, которые возвращают фиксированные структуры данных, APIS GraphQL обычно выставляют только одна конечная точка Отказ Это работает, потому что структура возвращаемых данных не исправлена. Вместо этого он полностью гибкий и позволяет клиенту решить, какие данные на самом деле необходимы.

Это означает, что клиент должен отправить больше Информация на сервер, чтобы выразить его данные о потребностях данных – эта информация называется Запрос Отказ

Основные запросы

Давайте посмотрим на пример запроса, который клиент может отправить на сервер:

{
  allPersons {
    name
  }
}

AllPersons поле в этом запросе называется корневое поле запроса. Все, что следует за корневым полем, называется полезная нагрузка запроса. Единственное поле, которое указано в полезной нагрузке этого запроса, является Имя Отказ

Этот запрос вернет список всех лиц, которые в настоящее время хранятся в базе данных. Вот пример ответа:

{
  "allPersons": [
 "Johnny" },
    { "name": "Sarah" },
    { "name": "Alice" }
  ]
}

Обратите внимание, что у каждого человека есть только Имя В ответ, но возраст не возвращается сервером. Это именно потому, что Имя было единственное поле, которое было указано в запросе.

Если клиент также нужен ли люди возраст , все, что нужно сделать, это немного отрегулировать запрос и включить новое поле в полезную нагрузку запроса:

{
  allPersons {
    name
    age
  }
}

Одним из главных преимуществ GRAPHQL является то, что он позволяет для естественного запроса вложенные Информация. Например, если мы хотели загрузить все Сообщения что а Человек Написал, мы могли бы просто следовать структуре наших типов, чтобы запросить эту информацию:

{
  allPersons {
    name
    age
    posts {
      title
    }
  }
}

Запросы с аргументами

В графике, каждый поле может иметь нулевые или более аргументы, если это указано в Схема Отказ Например, AllPersons поле может иметь Последнее Параметр для возврата только до определенного количества людей. Вот что будет выглядеть соответствующий запрос:

{
  allPersons(last: 2) {
    name
  }
}

Написание данных с мутациями

Рядом с запросом информации с сервера большинство приложений также нуждается в моменте изменения данных, которые в данный момент хранятся на бэкэнде. С GraphQL эти изменения сделаны с использованием так называемых Мутации Отказ Как правило, три вида мутаций:

  • Создание новых данных
  • Обновление существующих данных
  • Удаление существующих данных

Мутации следуют той же синтаксической структуре, что и запросы, но им всегда нужно начинать с Мутация ключевое слово. Вот пример того, как мы могли бы создать новый Человек :

mutation {
  createPerson(name: "Bob", age: 36) {
    name
    age
  }
}

Обратите внимание, что похоже на запрос, который мы писали ранее, мутация также имеет корневое поле – В этом случае это называется CreatePerson Отказ Мы также уже узнали о концепциях аргументов для полей. В этом случае CreatePerson поле требует двух аргументов, которые указывают Имя и возраст Отказ

Как и с запросом, мы также можем указать полезную нагрузку для мутации, в которой мы можем задать разные свойства нового Человек объект. В нашем случае мы просим о Имя и возраст – Хотя по общему признанию, это не очень полезно в нашем примере, так как мы, очевидно, уже знаем их, когда мы передаем их в мутацию. Тем не менее, возможность также получить информацию о запросе при отправке мутаций может быть очень мощным инструментом, который позволяет нам получить новую информацию с сервера в одном тулпере!

Ответ сервера для вышеупомянутой мутации будет выглядеть следующим образом:

"createPerson": {
  "name": "Bob",
  "age": "36",
}

Один шаблон мы часто находим, что типы GraphQL имеют уникальные IDS которые генерируются сервером, когда новые объекты создаются. Расширение нашего Человек Тип раньше, мы могли бы добавить ID как это:

type Person {
  id: ID!
  name: String!
  age: Int!
}

Теперь, когда новый Человек Создан, мы могли бы напрямую спросить ID В полезной нагрузке мутации, поскольку это информация, которая была недоступна на клиенте заранее:

mutation {
  createPerson(name: "Alice", age: 36) {
    id
  }
}

Обновления в реальном времени с подписками

Еще одно важное требование для многих приложений сегодня – иметь в реальном времени Подключение к серверу, чтобы немедленно сообщить о важных событиях. Для этого в этом случае GraphQL предлагает концепцию подписки Отказ

Когда клиент Подписки Для события он будет инициировать и удерживать постоянное подключение к серверу. Всякий раз, когда этот конкретный событие фактически происходит, сервер нажимает соответствующие данные клиенту. В отличие от запросов и мутаций, которые следуют типичному « запрос-ответ -цикл», подписки представляют собой поток данных, отправленных на клиента.

Подписки записываются с использованием того же синтаксиса в качестве запросов и мутаций. Вот пример, где мы подписываемся на события, происходящие на Человек тип:

subscription {
  newPerson {
    name
    age
  }
}

После того, как клиент отправил эту подписку на сервер, между ними открывается соединение. Затем всякий раз, когда выполняется новая мутация, создает новый Человек Сервер отправляет информацию об этом человеке на клиента:

{
  "newPerson": {
    "name": "Jane",
    "age": 23
  }
}

Ключевые вынос

Определение схемы

Теперь, когда у нас есть базовое понимание того, как выглядят запросы, мутации и подписки, давайте поставьте все вместе и узнаем, как мы можем написать схему, которая позволила бы нам выполнить примеры, которые мы видели до сих пор.

Схема является одним из самых важных концепций при работе с API GraphQL. Он определяет возможности API и определяет, как клиенты могут запросить данные. Это часто рассматривается как контракт между сервером и клиентом.

Как правило, схема – это просто коллекция типов GraphQL. Однако при написании схемы для API есть особый корень Типы:

type Query { ... }
type Mutation { ... }
type Subscription { ... }

Запрос , Мутация и Подписка Типы являются Точки входа Для запросов, отправленных Клиентом. Чтобы включить AllPersons -Света, что мы видели раньше, Запрос Тип должен быть написан следующим образом:

type Query {
  allPersons: [Person!]!
}
```i
`allPersons` is called a *root field* of the API. Considering again the example where we added the `last` argument to the `allPersons` field, we'd have to write the `Query` as follows:

```graphql(nocopy)
type Query {
  allPersons(last: Int): [Person!]!
}

Точно так же для CreatePerson -Метация, нам придется добавить корневое поле в Мутация тип:

type Mutation {
  createPerson(name: String!, age: Int!): Person!
}

Обратите внимание, что это корневое поле также принимает два аргумента, Имя и возраст нового Человек Отказ

Наконец, для подписок мы должны были добавить Ньюперсон Корневое поле:

type Subscription {
  newPerson: Person!
}

Сделать все вместе, это полный Схема для всех запросов и мутаций, которые мы видим до сих пор:

type Query {
  allPersons(last: Int): [Person!]!
}

type Mutation {
  createPerson(name: String!, age: Int!): Person!
}

type Subscription {
  newPerson: Person!
}

type Person {
  name: String!
  age: Int!
  posts: [Post!]!
}

type Post {
  title: String!
  author: Person!
}

Советы и советы

Как видите, Graphql Graphqcl довольно весело и просто, если вы разрабатываете в ряде технологий в течение многих лет, поскольку вы получите лучшее из методов породы и реализации, проникающие по всей экосистеме GraphQL.

Если вы более новее для строительства приложений для производства, то вам понравится мощный и простой в использовании Servelless Toolchain, который поставляется с приложениями для создания электростанции GraphQQL.

Время проекта

Поскольку он всегда важен для практики, давайте подготовим среду песочницы для эксперимента с тем, что мы узнали до сих пор.

Окончательные мысли и следующие шаги

Увидеть Учебник реле вместо

Для этого QuickStart мы подготовили Репозиторий который содержит полный код React Code для клона Instagram. Все, что вам нужно сделать, это создать сервис Graphcool, которая будет выставлять API GraphQL и подключить его с помощью приложения React. Давайте начнем!

Клонировать примерное хранилище, содержащее приложение React:

git clone https://github.com/graphcool-examples/react-graphql.git
cd react-graphql/quickstart-with-apollo

Не стесняйтесь знакомы с кодом. Приложение содержит следующие реагирование Компоненты :

  • Пост : Оказывает один пост
  • Listpage : Оказывает список почтовых предметов
  • CreatePage : Позволяет создать новый пункт посту
  • Подробная страница : Оказывает детали поступления посту и позволяет обновлять и удалять его

Услуги графов управляются с GraphCool CLI. Поэтому, прежде чем двигаться дальше, вам сначала нужно его установить.

Установите GraphCool CLI:

npm install -g graphcool

Теперь, когда CLI установлен, вы можете использовать его для создания структуры файлов для новой службы с помощью команды init Graphcool.

Создайте локальную структуру файла для нового сервиса Graphcool внутри каталога, называемого Сервер :

# Create a local service definition in a new directory called `server`
graphcool init server

Graphcool init Создает местную структуру обслуживания внутри указанного Сервер Каталог:

.
└── server
    ├── graphcool.yml
    ├── types.graphql
    └── src
        ├── hello.graphql
        └── hello.js

Каждый из созданных файлов и каталогов имеет специальную цель в вашей службе Graphcool:

  • graphcool.yml : Содержит ваш Определение услуги Отказ
  • Типы. Графекл : Содержит Модель данных И любые дополнительные определения типа для вашего сервиса Graphcool, написанные в GraphQL Язык определения схемы (SDL).
  • SRC : Содержит исходный код (и при необходимости запросы GraphQL) для Функции Вы настроили для вашего сервиса. Обратите внимание, что новый сервис поставляется с по умолчанию «Hello World» (называется Hello в GraphCool.yml ), который вы можете удалить, если вы не хотите его использовать.
  • Package.json : Указывает зависящие от ваших функций (при необходимости).

Далее вы должны настроить модель данных для вашего обслуживания.

Открыть ./server/types.graphql И добавьте следующее определение типа (не стесняйтесь удалить существующие пользователь Тип):

type Post @model {
  id: ID! @isUnique    # read-only (managed by Graphcool)
  createdAt: DateTime! # read-only (managed by Graphcool)
  updatedAt: DateTime! # read-only (managed by Graphcool)

  description: String!
  imageUrl: String!
}

Изменения, которые вы представили, добавляя Пост Тип к модели данных являются чисто Местный до сих пор. Таким образом, следующий шаг на самом деле Развертывание обслуживание!

Перейдите к Сервер Справочник и развернуть ваш сервис:

cd server
graphcool deploy

При предложении, какой кластер вы хотите развернуть, выберите любой из Общие кластеры Опции ( Shared-Eu-West-1 , Shared-AP-Northeast-1 или Shared-US-West-2 ).

Примечание : Если вы не проверялись с помощью GraphCool CLI, эта команда собирается открыть окно браузера и попросить вас войти. Ваш токен аутентификации будет храниться в глобальном ~/.graphcoolrc Отказ

Вы обслуживаете вас развернуты и доступны через конечные точки HTTP, которые были напечатаны в выходе команды! Пост Тип добавляется в вашу модель данных, и соответствующие операции CRUD генерируются и выставлены Graphql api Отказ

Обратите внимание, что эта команда также создана Местный .graphcoolrc Внутри текущего каталога. Это используется для управления вашим Цели развертывания Отказ

Сохраните конечную точку HTTP для Простое API с вывода Graphcool Развертывает Команда, тебе понадобится позже!

Примечание : Если вы когда-нибудь проиграете конечную точку для вашего API GraphQL, вы можете просто получить доступ к нему снова, используя Info graphcool команда. При использовании APOLLO нужно использовать конечную точку для Простое API Отказ

Вы можете проверить API внутри GraphQL Playground который вы можете открыть с Graphcool Playground команда. Не стесняйтесь попробовать следующие запросы и мутацию.

Получение всех сообщений:

query {
  allPosts {
    id
    description
    imageUrl
  }
}

Создание нового поста:

mutation {
  createPost(
    description: "A rare look into the Graphcool office"
    imageUrl: "https://media2.giphy.com/media/xGWD6oKGmkp6E/200_s.gif"
  ) {
    id
  }
}

Следующим шагом является подключение приложения RACT с API GraphQL из вашего сервиса GraphCool.

Вставьте конечную точку HTTP для Простое API что вы сохранили после запуска Graphcool Развертывает в ./src/index.js Как Uri Аргумент в Httplink Конструктор звонит:

// replace `__SIMPLE_API_ENDPOINT__` with the endpoint from the previous step
const httpLink = new HttpLink({ uri: '__SIMPLE_API_ENDPOINT__' })

Вот и все. Последнее, что нужно сделать, на самом деле запускает приложение 🚀

Установите зависимости и запустите приложение:

yarn install
yarn start # open http://localhost:3000 in your browser

Поздравляю! Ты сделал это!!!

В следующем посте мы рассмотрим больше больших изображений с архитектурой GraphQL с клиентами, сервером (менее), инструментальным инструментом и безопасностью.

Учебник Apollo предоставлен Graph.cool & Примеры по Как fraphql.