Урок за GraphQL за начинаещи: какво е, функции и пример
⚡ Умно обобщение
GraphQL е език за заявки от страна на сървъра, който позволява на клиент да поиска точно необходимите му данни с едно извикване. Тази страница обяснява ключовите му компоненти, заявки, променливи, мутации, абонаменти и как се различава от REST.

Какво е GraphQL?
GraphQL е сървърна технология на приложния слой, разработена от Facebook, сега Meta, за изпълнение на заявки със съществуващи данни. Тя беше пусната публично през 2015 г. и се управлява от GraphQL. Foundation от 2018 г. GraphQL може да оптимизира RESTful API извиквания. Той предоставя декларативен начин за извличане и актуализиране на вашите данни. GraphQL ви помага да зареждате данни от сървъра към клиента. Позволява на програмистите да избират типовете заявки, които искат да правят.
Какво трябва да научите, преди да научите GraphQL?
Този урок за GraphQL е базиран на Експресен намлява NodeJs. Следователно можете да научите GraphQL много лесно с основно разбиране на NodeJS.
Защо да използвате GraphQL?
Следват причините да използвате GraphQL:
- Той предоставя четима от човека заявка.
- В GraphQL е много лесно да се работи с много бази данни.
- Подходящ е за микроуслуги и сложни системи.
- Можете да извлечете данни с едно извикване на API.
- Помага ви при групирането и кеширането на заявки.
- Няма да се сблъсквате с проблеми с прекомерно или недостатъчно извличане на данни.
- Приспособяване на заявките към вашите нужди.
- Помага ви да откриете схемата в подходящия формат.
- GraphQL автоматично поддържа документацията в синхрон с промените в API.
- Развитието на API е възможно без създаване на версии.
- Полетата на GraphQL се използват в множество заявки, които могат да бъдат споделени на по-високо ниво на компонент за повторно използване.
- Можете да изберете кои функции да изложите и как работят.
- Може да се използва за бързо създаване на прототипи на приложенияping.
Приложения на GraphQL
Ето важните приложения на GraphQL:
- Той предоставя Relay и други клиентски рамки
- GraphQL ви помага да подобрите ефективността на мобилното приложение.
- Може да намали проблема с преизвличането, за да намали облачната услуга от страната на сървъра и да намали използването на мрежата от страна на клиента.
- Може да се използва, когато клиентското приложение трябва да посочи кои полета са необходими във формат на дълга заявка.
- GraphQL може да се използва напълно, когато трябва да добавите функционалност към вашия стар или съществуващ API.
- Използва се, когато трябва да опростите сложен API.
- Смесете и пасирайте фасаден шаблон, който обикновено се използва в обектно-ориентираното програмиране.
- Когато трябва да обедините данни от повече от едно място в един удобен API.
- Можете да използвате GraphQL като коремни упражненияtracция на съществуващ API, за да се определи структурата на отговора въз основа на нуждите на потребителя.
Всички тези предимства се основават на три движещи се части, работещи заедно.
Ключови компоненти на GraphQL
Сега в този урок за GraphQL нека научим ключовите компоненти на GraphQL:

Както е показано на фигурата по-горе, има три ключови компонента на GraphQL: 1) Заявка, 2) Резолвер и 3) Схема.
Запитване
Заявката е API заявка, направена от приложението на клиентската машина. Поддържа разширения и точки към масиви. Заявката се използва за четене или извличане на стойности.
Части от заявката:
Следват важните части на Query
- Невярно:
Полето просто показва, че искаме от сървъра определена информация. Следва пример на GraphQL за поле в GraphQL заявка.
query {
team {
id
name
}
}
Сървърът отговаря с JSON документ, чиято форма отразява заявката:
{
"data": {
"team": [
{
"id": 1,
"name": "Avengers"
}
]
}
}
В горния пример с GraphQL, ние питаме сървъра за полето, наречено team, и неговите подполета като id и name. GraphQL сървърът връща точно данните, които сме поискали.
- Аргументи
In ПОЧИВКА, можем да предадем само един набор от аргументи като URL сегменти и параметри на заявката. За да се получи конкретен профил, типичното REST извикване ще изглежда по следния начин:
GET /api/team?id=2 Content-Type: application/json { "id": 2, "name": "Justice League" }
за преобразуване
Резолверите предоставят указанията за преобразуване на GraphQL операция в данни. Те разрешават заявката към данни, като дефинират функции за преобразуване.
Той показва на сървъра процеса, както и местоположението за извличане на данни според конкретно поле. Резолверът също разделя схемата на базата данни и схемата на API. Разделената информация помага за модифициране на съдържанието, получено от базата данни.
схема
Схемата на GraphQL е центърът на внедряването на GraphQL. Той описва функционалността, достъпна за клиентите, които се свързват с него.
Характеристики на GraphQL
Ето важни характеристики на GraphQL:
- Той предоставя декларативен език за заявки, което не е задължително.
- Той е йерархичен и ориентиран към продукта.
- GraphQL е строго типизиран. Това означава, че заявките се изпълняват в контекста на определена система.
- Заявките в GraphQL се кодират в клиента, а не в сървъра.
- Той има всички характеристики на приложния слой на модела OSI.
Клиенти на GraphQL
GraphQL клиент е код, който прави POST заявки към съответен GraphQL сървър. Можете да направите заявка директно към GraphQL API, но добрият подход е да използвате специална клиентска библиотека с помощта на Relay.
Това JavaБиблиотеката със скриптове е разработена от Facebook за създаване на React приложения с GraphQL. Клиентите на GraphQL могат да бъдат CMS като Drupal, едностранично приложение, мобилно приложение и т.н.
GraphQL сървъри
GraphQL сървърите са сървърни имплементации на спецификацията на GraphQL. Те изобразяват вашите данни като GraphQL API, към който вашата клиентска програма може да отправя заявки. база данни.
Шлюзове на GraphQL
Gateway е микросървисен модел, където можете да изградите отделна услуга, която да се справя с други backend услуги. Той предлага работеща документация и предоставя удобен начин за събиране на данни от повече от един източник с една заявка.
Какво представлява променливата в GraphQL?
A Променлива в GraphQL се използва за отделяне на динамичните стойности от клиентската заявка и предаване на заявката като уникален речник. Променливата в GraphQL може също да се използва за повторно използване на заявката или мутациите, написани от клиента с индивидуални аргументи. В graphQL не можете да предавате динамични аргументи директно в низа на заявката. Причината е, че кодът от страна на клиента трябва да манипулира динамично низа на заявката по време на изпълнение на програмата.
GraphQL има един добър начин за факторизиране на динамичните стойности от заявката. Той ги предава като отделен речник. Тези стойности са известни като променливи. Винаги, когато работим с променливи, трябва да направим следните три неща:
- Заменете статичната стойност в заявката с име на променлива.
- Декларирайте името на променливата като една от променливите, които се приемат от GraphQL заявката.
- Предайте стойността в специфичния за транспорта речник на променливите.
Ето как изглежда всичко заедно. Първо заявката, която декларира променливата:
query HeroNameAndFriends($episode: Episode) { hero(episode: $episode) { name friends { name } } }
След това, заедно с него, се изпраща и отделен речник със стойности на променливи:
{
"episode": "JEDI"
}
И отговорът, върнат от сървъра:
{
"data": {
"hero": {
"name": "R2-D2",
"friends": [
{ "name": "Luke Skywalker" },
{ "name": "Han Solo" },
{ "name": "Leia Organa" }
]
}
}
}
Както можете да видите в горния пример на GraphQL, ние просто сме предали различна променлива, различна от необходимостта да конструираме нова заявка.
Какво е мутация?
Мутацията е начин за промяна на набора от данни в GraphQL. Той променя данните в хранилището на данни и връща стойност. Мутациите ви помагат да вмъквате, актуализирате или изтривате данни. Обикновено мутациите се определят като част от схемата.
Точки, които трябва да имате предвид при проектирането на GraphQL мутации
Ето важните точки при проектирането на GraphQL:
- наименуване: На първо място, трябва да назовете мутациите си с глагол. След това съществителното или „обект“, ако е приложимо. Използвайте camelCase, докато наименувате мутации.
- Специфичност: Трябва да направите възможно най-специфични за мутациите. Мутациите трябва да представляват семантични действия, предприети от потребителя.
- Входен обект: Използвайте един, уникален, задължителен тип входен обект като аргумент за изпълнение на мутация на клиента.
- Уникален тип полезен товар: Трябва да използвате уникален тип полезен товар за всяка мутация. Можете също така да добавите изхода за мутация като поле към този конкретен тип полезен товар.
- Влагане: Използвайте влагане на вашата мутация, където има смисъл. Позволява ви да използвате напълно GraphQL API.
Заявки за четене и мутации за запис. Третият тип операция обхваща данни, които се променят, докато клиентът е все още свързан.
Какво е абонамент в GraphQL?
A абонамент е третият тип операция в спецификацията на GraphQL, наред със заявката и мутацията. Заявката и мутацията се изпълняват в една заявка и отговор. Абонаментът вместо това поддържа дълготрайна връзка отворена, обикновено през WebSockets, така че сървърът изпраща нов резултат към клиента всеки път, когато възникне определено събитие.
Синтаксисът отразява заявка, като ключовата дума subscription замества query:
subscription OnCommentAdded($postId: ID!) { commentAdded(postId: $postId) { id content author { name } } }
Три точки разграничават абонаментите на практика.
- Управлявано от събития, не е анкетирано: Клиентът регистрира интерес веднъж. Нищо повече не се изпраща, докато сървърът не публикува съответстващо събитие, което е далеч по-евтино от многократното анкетиране.
- Едно коренно поле на абонамент: Спецификацията позволява само едно поле от най-високо ниво, за разлика от заявка, която може да изисква няколко едновременно.
- Най-добре е да се съхранява в малък размер: Изпращайте само полетата, които интерфейсът трябва да обнови. Чат на живо, известия и ценови ленти са типичните приложения.
Разлика между GraphQL и REST
Следващата таблица показва важна разлика между GraphQL и REST.
| GraphQL | ПОЧИВКА |
|---|---|
| Той следва архитектура, управлявана от клиента. | Той следва сървърно управлявана архитектура. |
| GraphQL може да бъде организиран по отношение на схема. | REST може да бъде организиран по отношение на крайни точки. |
| GraphQL е нарастваща общност. | REST е много голяма общност. |
| Скоростта на разработка в GraphQL е висока. | Скоростта на разработка в REST е бавна. |
| Кривата на обучение в GraphQL е стръмна. | Кривата на обучение в REST е умерена. |
| Самоличността е отделена от това как я извличате. | Крайната точка, която извиквате в REST, е самоличността на определен обект. |
| В GraphQL клиентът определя кои полета да получава. | Формата и размерът на ресурса се определят от сървъра в REST. |
| GraphQL осигурява висока последователност във всички платформи. | Трудно е да се постигне последователност във всички платформи. |
Недостатъци на GraphQL
Ето недостатъците на GraphQL:
- Млада екосистема
- Липса на ресурси в задната част.
- Липсва модел на дизайн за сложно приложение.
- Проблеми с производителността при сложни заявки.
- Прекалено много за малки приложения
- GraphQL не зависи от методите за кеширане на HTTP, които позволяват съхраняване на съдържание на заявка.
- GraphQL не разбира файлове. Следователно функцията за качване на файлове не е включена в него.
- С GraphQL бъдете готови да имате много обучение преди разработката, като изучаване на езика за дефиниране на схеми.
Приложения и инструменти с отворен код, използвани от GraphQL
Важните приложения и инструменти с отворен код, използвани от GraphQL, са следните:
- ГетсбиGatsby е приложение, задвижвано от GraphQL, което може да използва данни, получени от повече от един GraphQL API източник. Можете да го използвате за разработване на статично и клиентски базирано React приложение.
- GraphiQL: Това е IDE, която се интегрира с браузъра и взаимодейства с API на GraphQL. Някои от функциите, които GraphiQL включва, са мутации, заявки за данни и автоматично довършване на заявки.
- Графична площадка на GraphQL: Това е мощна IDE среда с вграден редактор за обработка на мутации, валидиране, GraphQl заявки, абонаменти и др. Разработчикът може да използва тази IDE среда, за да визуализира структурата на схемата. Проектът вече е оттеглен и неговите функции са върнати обратно в GraphiQL.
- Prisma: Prisma е база данни ABStracслой tion, вече предлаган като типово-безопасен ORM, който е широко сдвоен със сървър GraphQL, за да разкрие CRUD (създаване, четене, актуализиране и изтриване) операции.
- Малко: Това е инструмент и платформа с отворен код, която преобразува код за многократна употреба в компоненти. Разработчиците могат да ги използват за споделяне и разработване на различни проекти.
