Урок за GraphQL за начинаещи: какво е, функции и пример

Какво е GraphQL?

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

Защо да използвате GraphQL?

Следват причините да използвате GraphQL:

  • Той предоставя четима от човека заявка.
  • В GraphQL е много лесно да се работи с много бази данни.
  • Подходящ е за микроуслуги и сложни системи.
  • Можете да извлечете данни с едно извикване на API.
  • Помага ви при групирането и кеширането на заявки.
  • Не се сблъсквате с проблеми с над и под извличане.
  • Приспособяване на заявките към вашите нужди.
  • Помага ви да откриете схемата в подходящия формат.
  • GraphQL автоматично поддържа документацията в синхрон с промените в API.
  • Развитието на API е възможно без създаване на версии.
  • Полетата на GraphQL се използват в множество заявки, които могат да бъдат споделени на по-високо ниво на компонент за повторно използване.
  • Можете да изберете кои функции да изложите и как работят.
  • Може да се използва за бързо създаване на прототипи на приложения.

Приложения на GraphQL

Ето важните приложения на GraphQL:

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

Какво трябва да научите, преди да научите GraphQl?

Този урок за GraphQL е базиран на Експресен намлява NodeJs. Следователно можете да научите GraphQL много лесно с основно разбиране на NodeJS.

Ключови компоненти на GraphQL

Сега в този урок за GraphQL нека научим ключовите компоненти на GraphQL:

Ключови компоненти на GraphQL
Ключови компоненти на GraphQL

Както е показано на фигурата по-горе, има три ключови компонента на GraphQL: 1) Заявка, 2) Резолвер и 3) Схема.

Запитване

Заявката е API заявка, направена от приложението на клиентската машина. Поддържа разширения и точки към масиви. Заявката се използва за четене или извличане на стойности.

Части от заявката:

Следват важните части на Query

  1. Невярно:

Едно поле просто показва, че искаме от сървъра конкретна информация. Следва пример на GraphQL за поле в заявка на graphQL.

query {
    team {
        id name
    }
}

"data": {
    "team":[ {
        "id": 1, 
        "name": "Avengers"
    }
    ,
    …
]
}
}

В горния пример на GraphQL ние питаме сървъра за полето, наречено team, и неговите подполета като id и name. Сървърът GraphQL връща данни, които поискахме.

  1. Аргументи

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 от страна на сървъра. Той изобразява вашите данни като API на GraphQL, който вашата клиентска програма може да търси база данни.

Шлюзове на GraphQL

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

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

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

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

  1. Заменете статичната стойност в заявката с име на променлива.
  2. Декларирайте името на променливата като една от променливите, които се приемат от GraphQL заявката.
  3. Предайте стойността в специфичния за транспорта речник на променливите.

Ето как изглежда всичко заедно:

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 и REST

Следващата таблица показва важна разлика между GraphQL и REST.

GraphQL ПОЧИВКА
Той следва архитектура, управлявана от клиента. Той следва сървърно управлявана архитектура.
GraphQL може да бъде организиран по отношение на схема. REST може да бъде организиран по отношение на крайни точки.
GraphQL е нарастваща общност. REST е много голяма общност.
Скоростта на разработка в GraphQL е висока. Скоростта на разработка в REST е бавна.
Кривата на обучение в GraphQL е трудна. Кривата на обучение в REST е умерена.
Самоличността е отделена от това как я извличате. Крайната точка, която извиквате в REST, е самоличността на определен обект.
В GraphQL сървърът определя наличните ресурси. Формата и размерът на ресурса се определят от сървъра в REST.
GraphQL осигурява висока последователност във всички платформи. Трудно е да се постигне последователност във всички платформи.

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

Ето недостатъците на GraphQL:

  • Млада екосистема
  • Липса на ресурси в задната част.
  • Липсва модел на дизайн за сложно приложение.
  • Проблеми с производителността при сложни заявки.
  • Прекалено много за малки приложения
  • GraphQL не зависи от методите за кеширане на HTTP, които позволяват съхраняване на съдържание на заявка.
  • GraphQL не разбира файлове. Следователно функцията за качване на файлове не е включена в него.
  • С GraphQL бъдете готови да имате много обучение преди разработката, като изучаване на езика за дефиниране на схеми.

Приложения и инструменти с отворен код, използвани от GraphQL

Важните приложения и инструменти с отворен код, използвани от GraphQL, са следните:

  • Гетсби: Gastby е приложение, поддържано от GraphQL, което може да използва данни, които са извлечени от повече от един източник на GraphQL API. Можете да го използвате за разработване на статично и клиентско приложение React.
  • GraphiQL: Това е идентификатор, който се интегрира с браузъра и също така взаимодейства с API на GraphQL. Някои от функциите, които GraphiQL включва, са мутации, заявки за данни и заявки за автоматично довършване.
  • Графична площадка на GraphQL: Това е мощна IDE, която има вграден редактор за обработка на мутации, валидиране, GraphQl заявки, абонаменти и т.н. Разработчикът може да използва тази IDE, за да визуализира структурата на схемата.
  • Prisma: Prisma е слой за абстракция на база данни, който превръща вашите бази данни в GraphQL API с операции CRUD (Създаване, Четене, Актуализиране и Изтриване).
  • Малко: Това е инструмент и платформа с отворен код, която преобразува код за многократна употреба в компоненти. Разработчиците могат да ги използват за споделяне и разработване на различни проекти.

Oбобщение

  • GraphQL е технология от страна на сървъра на приложния слой, която е разработена от Facebook за изпълнение на заявки със съществуващи данни.
  • Можете да използвате GraphQL за извличане на данни с едно извикване на API.
  • GraphQL ви помага да подобрите ефективността на мобилното приложение.
  • Важни компоненти на заявката на GraphQL са: 1) Заявка, 2) Резолвер, 3) Схема.
  • GraphQL е строго типизиран. Това означава, че заявките се изпълняват в контекста на определена система.
  • GraphQL клиент е код, който прави POST заявки към съответен GraphQL сървър.
  • GraphQL сървърите са изпълнение на спецификацията на GraphQL от страна на сървъра.
  • Gateway е модел на микроуслуга, където можете да изградите отделна услуга, за да се справите с други бекенд услуги.
  • GraphQL има един добър начин за факторизиране на динамичните стойности от заявката.
  • Мутацията е начин за промяна на набора от данни в GraphQL.
  • Важните моменти при проектирането на GraphQL са: 1) Наименуване, 2) Специфичност, 3) Уникален тип полезен товар на входния обект и 4) Вмъкване.
  • GraphQL може да бъде организиран по отношение на схема, докато REST може да бъде организиран по отношение на крайни точки.
  • Недостатъкът на GraphQL е, че му липсват ресурси в задната част.