Ще разгледаме някои от най-добрите клиенти на GraphQL за 2020 г. Преди да започнете, важно е да имате основни познания за GraphQL и неговите сървърни и клиентски приложения.

Какво е GraphQL?

Ако GraphQL изглежда донякъде познат, това е защото звучи като имената на други видове езици за заявки като MySQL. Въпреки че GraphQL е език за заявки (QL), той работи различно от типичния QL. Той използва една крайна точка на API, за да позволи на приложенията да заявяват точно данните, които искат чрез HTTP Post заявка. Това е значително подобрение от необходимостта да се извиква конкретна крайна точка за всеки тип данни.

Тази технология е сравнително нова и беше пусната за обществеността от Facebook през 2015 г. Въпреки това, тя беше част от Facebook от 2012 г. и оттогава бележи бърз растеж и приемане. Това е мощен език за заявки, който може да се използва за комуникация между клиент (обикновено приложение, базирано на браузър) и сървър. Той позволява по-ефективно структуриране на приложения, управлявани от данни, в сравнение с RESTful подход.

GraphQL може да бъде имплементиран във всеки сървърен език и езикова рамка на интерфейса. Важно е да имате предвид, че GraphQL не е обвързан с конкретна технология или приложение за бази данни.

Предимствата на GraphQL

  • В сравнение с уеб услугите RESTful е възможно да поискате конкретни точки от данни, без да получавате целия обект от данни. Необходимите точки от данни могат да бъдат посочени в заявката на GraphQL (заявка за HTTP Post).
  • GraphQL е строго типизиран и строгите изисквания към документите правят наличните точки от данни прозрачни за клиентските приложения.
  • Един недостатък на RESTful крайните точки е, че те изискват много поддръжка, ако структурата на данните на вашата организация се променя често. GraphQL е гъвкав и позволява бързо адаптиране към тези промени, тъй като промените трябва да се обработват само в заявките на GraphQL.

Недостатъците на GraphQL

Въпреки че GraphQL има много предимства, той носи и някои фундаментални проблеми, които могат да нарушат сделката.

  • За разлика от RESTful крайните точки, единствената крайна точка на GraphQL няма собствени възможности за кеширане. Ще трябва да настроите своя собствена логика за кеширане.
  • Друг проблем е, че всички заявки връщат HTTP 200 отговор, независимо от действителния статус на отговора.
  • Настройването на крайна точка на GraphQL може да бъде относително по-сложно от RESTful уеб услуга. Ако вашите структури от данни са относително прости и не изискват постоянни промени, може да си струва да избягвате GraphQL.

Тъй като вече знаете плюсовете и минусите на GraphQL, нека видим най-добрите клиенти на GraphQL за 2020 г.

Съвет: Използвайте Bit (Github), за да споделяте, документирате и управлявате компоненти на React за многократна употреба. Това е чудесен начин да увеличите повторното използване на кода, да ускорите разработката и да създадете приложения с мащаб.



1. Аполо-клиент

Apollo-Client е цялостна JavaScript библиотека, използвана за управление на локални и отдалечени данни с GraphQL. Той има много предимства като управление на състоянието, извличане, кеширане и модифициране на данни на приложението. Той осигурява ефективен и декларативен начин за структуриране на код в съответствие със съвременните процеси на разработка. Apollo-Client има собствена поддръжка за React и се разширява до други слоеве на изглед като Vue и Ember чрез проекти на общността.

Последната версия на Apollo поддържа събиране на отпадъци, съхранение както за нормализирани, така и за ненормализирани данни. Освен това има персонализиране на кеширани данни с TypePolicy и FieldPolicy API.

Примерен код за използване на Apollo-Client в React приложение

Нека инсталираме най-новата версия на клиента Apollo и необходимите пакети:

npm install @apollo/client graphql

Сега създайте компонент с име apolloClient.js. След като всички зависимости бъдат инсталирани, инициализирайте екземпляр на ApolloClient. Започнете с импортиране на ApolloClient и InMemoryCache.

import { ApolloClient, InMemoryCache, gql } from “@apollo/client”;

Сега дефинирайте функция за експортиране по следния начин и добавете следните кодови фрагменти в нея:

Както може би вече сте забелязали, URI е URL адрес на GraphQL сървър, работещ в рамките на CodeSandbox. Сега клиентът е готов да извлече данните.

Дефинирайте низ за заявка, както е показано по-долу. Препоръчително е да импортирате функцията gql, за да анализирате низа на заявката (вече импортиран).

Отворете компонента ApolloClient.js и импортирайте ApolloProvider, както следва, за да го свържете към компонента React.

import { ApolloProvider } from “@apollo/client”;

Добавете следния кодов фрагмент в израза за връщане, както следва:

Сега импортирайте ApolloClientExample в компонента App.js, както следва:

import { ApolloClientExapmle } from “./graphql/apolloClient”;

Добавете следния оператор за връщане:

Това е. Нека да стартираме кода и да проверим отговора в конзолата. Както се вижда на екранната снимка по-долу, вие ще можете да наблюдавате свойство данни с прикачени тарифи, заедно със зареждане и networkStatus.

GraphQL-заявка

GraphQL-Request е известен като Isomorphic, защото работи както с Node, така и с браузъри. Това е минимален GraphQL клиент, поддържащ Node и браузъри за скриптове и прости приложения и включва няколко функции. GraphQL-Request е лек и прост GraphQL клиент, който поддържа async и await. По-важното е, че поддържа Typescript.

Примерен код за използване на GraphQL-Request в React приложение

Нека създадем проста GraphQL заявка. Започнете с инсталиране на най-новата версия на graphql-request с помощта на мениджър на пакети на възли (npm):

npm install graphql-request

Сега създайте файл с име graphqlRequest.js и импортирайте graphql-заявката, както следва:

import request from “graphql-request”;

Вътре в новосъздадения файл добавете функция за експортиране със следната заявка за извличане на данните от филм:

Запишете отговора в конзолата със следния код, за да можем да го проверим:

Добавете следния оператор за връщане, за да завършите компонента.

Импортирайте компонента graphqlRequest.js в компонента App.js и го извикайте по следния начин:

Сега стартирайте приложението и проверете конзолата, за да видите данните от филма в обекта за отговор.

GraphQL-CLI

GraphQL-CLI е малко по-различен от клиентите, които разглеждахме досега. Той е базиран на команден ред и предоставя много полезни инструменти за създаване и управление на приложения, които използват GraphQL. В допълнение към многото команди, които предоставя, за да направи вашите рутинни задачи по-ефективни, ще можете да разширите персонализираните команди чрез добавки. Ярката екосистема на GraphQL-CLI отваря към много ресурси като библиотеки, редактори и IDE.

Интересен факт за GraphQL-CLI е, че той ви позволява да създадете функционираща структура на приложение с пълен стек в рамките на минути с помощта на командата init, както е показано по-долу.

Примерен код за използване на GraphQL-CLI в React приложение

Инсталирайте CLI чрез npm, като използвате интерфейса на командния ред (CMD).

npm install graphql-cli@canary

Нека създадем нов проект с GraphQL-CLI чрез командата init.

graphql init

Следвайте процеса, като отговорите на следните въпроси. Това е, за да отговаря на нашия примерен код. Можете също да изпробвате много други сценарии.

Променете директорията в папката на проекта:

cd Full Stack

Сега инсталирайте съответните зависимости:

yarn install

Променете директорията в папката на проекта, т.е. GraphQL-Project и изпълнете следните действия:

Стартирайте базата данни

docker-compose up -d

Генерирайте ресурси (схема и резолвери) и създайте базата данни

yarn graphql generate — backend
yarn graphql generate -backend
yarn graphql generate — db

Генериране на типове за схема на база данни и преобразуватели

yarn schemats generate
yarn graphql codegen

Стартирайте сървъра

yarn start: server

Генериране на заявки, мутации и абонаменти за проекта от страна на клиента

yarn graphql generate — client

Генерирайте React компоненти

yarn graphql codegen

Стартирайте приложението React

yarn start:client

Ето резултата, който ще видите.

GraphQL-съставяне

GraphQL-Compose е отличен инструментариум за генериране на сложни GraphQL схеми на Node.js. Това е може би най-добрият инструмент за изграждане на генератор на схеми на GraphQL и включва методи за редактиране на типове изход/вход на GraphQL. Въведен е graphql fieldConfigs, който е Resolver, който може да се използва за търсене, актуализиране и изтриване на записи.

GraphQL-Compose предоставя метод за преобразуване на OutputType към InputType и анализатор на проекция от AST. Този клиент предоставя регистър на типове с куп методи за изграждане на програмна схема.

Езикът на схемата GraphQL може да се използва за дефиниране на:

Типове генератори, вградени отгоре:

  • GraphQL-Compose-JSON
  • GraphQL-Compose-Mongoose
  • GraphQL-Compose-ElasticSearch
  • GraphQL-Compose-AWS

Помощни добавки:

  • GraphQL-Compose-Relay
  • GraphQL-Compose-Connection
  • GraphQL-Compose-DataLoader

Примерен код за използване на GraphQL-Compose в React приложение

Инсталирайте го чрез npm, както следва:

npm install graphql-compose

Сега импортирайте необходимите модули:

import { schemaComposer } from “graphql-compose”;

Нека създадем някои фиктивни данни - два масива за автори и публикации.

Изграждането на GraphQL схема започва с декларации на сложни типове. Те трябва да бъдат наименувани уникално. Нека създадем два различни типа, както следва:

Сега създайте връзка между тях:

Сега нека изградим схема. Току-що установихме два типа и те са свързани и могат да извличат данни. Сега се препоръчва да инициализирате схемата с помощта на schemaComposer, който се импортира от модула, импортиран по-горе.

Посочете данните, които се изискват в заявката:

Заявките, които променят данни, трябва да бъдат поставени в Mutation.

Вече сме готови да изградим схема, която трябва да бъде предадена на express-graphql:

export const schema = schemaComposer.buildSchema();

Сега нека създадем HTTP сървър. Успешно изградихме схемата; трябва да внедри сървър. Както бе споменато по-горе, нека импортираме express-graphql и неговите необходими зависимости:

Това е. Разработихме приложение, използващо GraphQL-Compose.

@octokit/GraphQL

Това е GitHub GraphQL API клиент за браузъри и Node. Той предоставя няколко предимства, като например:

  • Изпращане на прости заявки
  • Управление на удостоверяването
  • Поддържа заглавки и променливи
  • Използва персонализирани екземпляри @octokit/request

Octokit.GraphQL позволява на .Net приложенията да имат достъп до API на GitHub GraphQL, като го излагат като строго въведена езикова интегрирана заявка, която стриктно се придържа към синтаксиса на заявката на GraphQL. Друго важно предимство на тази библиотека е, че позволява на разработчиците да „пишат тестове“ с фиктивни данни, за да тестват своите приложения.

Примерен код за използване на Octokit.GraphQL в React приложение

Инсталирайте чрез npm, както следва:

npm install @octokit/graphql

Сега импортирайте graphql от octokit:

import { graphql } from “@octokit/graphql”;

Изпратете проста заявка със следния код:

Препоръчително е тези заявки да се оторизират чрез заглавка за оторизация. PAT (Personal Access Token) може да бъде получен и използван като ключ в заглавката за оторизация, както е показано по-горе.

PAT може да се генерира чрез https://github.com/settings/tokens

Реле

Relay е друг важен клиент на GraphQL, който е специално създаден за React приложения. Неговият дизайн се фокусира главно върху удобството за потребителя, разширяемостта и производителността. В допълнение към обичайните звънци и свирки, налични с повечето клиенти на GraphQL, Relay подобрява капсулирането, което вече е налично сред компонентите на React.

За пълното разбиране на Relay е необходимо поне основно разбиране на обвързването на данни в React. Релето се конфигурира лесно с един конфигурационен файл чрез пакета relay-config.

Примерен код за използване на Relay в React приложение

Започнете, като инсталирате пакета react-relay чрез npm:

npm install react-relay

Сега създайте компонент с име ReactRelay.js и настройте средата за предаване. Средата обединява заедно конфигурацията, кеш паметта и мрежовата обработка, от които Relay се нуждае, за да работи.

Инсталирайте модула, необходим за конфигуриране на средата:

npm install relay-runtime

Следващата стъпка е да импортирате модула за релейно време, както следва:

import { Environment, Network, RecordSource, Store } from “relay-runtime”;

Това е кодът за функцията за извличане:

Представете заявката, както следва:

Добавете следните конфигурации:

Сега създайте функция за експортиране като ReactRelay, както следва:

export const Example = () => {}

Добавете следния кодов фрагмент в гореспоменатия оператор за връщане.

Отворете файла App.js и импортирайте ReactRelay, както следва:

Това е всичко за този прост пример. Но има много повече, които можете да направите с React Relay.

Заключение

За да разберете напълно GraphQL и неговите предимства, трябва да знаете плюсовете и минусите на RESTful уеб услугите. GraphQL е отлична алтернатива, но има някои сценарии, в които не е подходяща. Разгледахме ги в началото на тази статия.

След като сте установили, че GraphQL може да добави стойност към вашите приложения, следващата стъпка е да идентифицирате GraphQL клиент, който отговаря на езика за програмиране и рамката, които използвате, и което е по-важно, вашите бизнес изисквания.

Научете повече