Какво е GraphQL? Развенчани общи митове.

Обичам да говоря за GraphQL, особено с хора, които са работили с GraphQL или са мислили да приемат GraphQL. Един често срещан въпрос, който хората имат, е защо някой би искал да премине към GraphQL от REST.

Има много ресурси там, които говорят за разликата между REST и GraphQL и те са чудесни, за да проверите дали се интересувате от това как тези два са различни. В тази публикация в блога искам да отговоря на някои често срещани заблуди и въпроси, зададени за GraphQL.

Как се възползвате от GraphQL на предния край?

Като фронт инженер обичам да работя с API на GraphQL по следните причини:

  1. Можете незабавно да тествате заявки и мутации с помощта на GraphiQL или детска площадка
  2. По-малко данни означава по-леко управление на държавата
  3. Той разтоварва тежко повдигане до сървъра чрез резолвери
  4. Той разполага с актуална и интерактивна документация

Как е по-добре от REST?

  1. Има една крайна точка за извличане на всички ресурси.
  2. Избягвате излишното извличане на данни (получаването на твърде много полета, когато са необходими само няколко полета).
  3. Избягвате недостатъчно извличане на данни (да се налага да извиквате множество API, защото един API не връща цялата необходима информация).

Мит: GraphQL се използва за запитване на графични бази данни.

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

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

Мит: GraphQL работи само с бази данни или източници на данни, които са базирани на графики.

Погрешно е схващането, че трябва да пренапишете вашата база данни, за да приемете GraphQL. GraphQL може да бъде обвивка около всеки източник на данни, включително бази данни. GraphQL е query language for your API- което означава, че е синтаксис на това как да се искат данни.

Мит: Извличането на данни с разделители, заявки и мутации работят магически.

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

Мит: GraphQL замества Redux или друга библиотека за управление на състоянието

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

Все пак ще трябва да управлявате състоянието - макар и по-лек начин. Клиентските библиотеки като Apollo и Relay могат да се използват за управление на състоянието и имат вградено кеширане. GraphQL не е заместител на Redux - той помага да се намали нуждата от него.

Мит: GraphQL е език на базата данни.

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

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

Мит: Не можете да имате REST крайни точки във вашата реализация с GraphQL.

Можете да включите множество крайни точки REST или дори множество GraphQL крайни точки във вашето приложение. Въпреки че не е най-добрата практика да има множество REST крайни точки, технически е възможно.

Мит: GraphQL е трудно да се въведе в съществуващ проект.

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

Ако преминаването към крайна точка на GraphQL все още е обезсърчаваща задача, можете да започнете, като маскирате REST крайна точка в крайна точка на GraphQL с помощта на разделители.

Мит: GraphQL е само за предни разработчици

GraphQL е агностик на платформата. Според мен красотата на предимствата на GraphQL започва отвътре навън - от заден край до преден край.

Като заден разработчик можете да разширите API чрез добавяне на полета, без да се налага да публикувате нова версия на API. Не е необходимо да пишете различни крайни точки за различни нужди, тъй като клиентите могат да извличат каквито и да са данни, от които се нуждаят.

С GraphQL имате видимост какви полета използват клиентите, което осигурява мощни инструменти.

Мит: GraphQL ще пише запитвания към базата данни сам, просто трябва да посоча схеми и връзката между тях

Може да се наложи да напишете заявки към базата данни в зависимост от това коя библиотека на GraphQL използвате. Въпреки това, някои библиотеки като Neo4j и Prisma също пишат заявки към база данни и абстрахират логиката далеч от разработчика. Всичко, включително преобразуватели, заявки и мутации, трябва да бъде дефинирано.

Мит: GraphQL се използва за рисуване на графики.

Често хората, които са нови в GraphQL, мислят, че това е софтуер за графика на графики като D3. GraphQL не начертава графики.

Мит: GraphQL изисква сложни клиенти и е почти невъзможно да се направи с обикновено HTTP извличане

Мит: Той замества ORM.

Напоследък виждаме много интеграция на DB и GraphQL, но самият GraphQL не е това.

Мисля, че GraphQL е страхотен! Има множество библиотеки, които помагат на потребителя да започне работа с GraphQL. Ако се интересувате да научите за GraphQL, започнете с документацията или разгледайте този курс Udemy, който намерих за полезен, когато бях нов в GraphQL.

Обявявам война!

var war; #DevJoke

- Shruti Kapoor (@ shrutikapoor08) 12 декември 2019 г.