ГрапхКЛ нуди флексибилну алтернативу класичном РЕСТ приступу када правите АПИ.

Један од најважнијих фактора који треба узети у обзир при дизајнирању апликације је тип АПИ архитектуре који се користи. Ефикасан дизајн АПИ-ја је кључан у обезбеђивању перформанси апликација током свог животног циклуса.

РЕСТфул архитектура је најпопуларнији приступ, али има један значајан недостатак: фиксну структуру крајње тачке која враћа унапред одређене податке. Овај дизајн може довести до неефикасне комуникације.

Насупрот томе, ГрапхКЛ — алтернатива РЕСТ-у — нуди већу флексибилност омогућавајући вам да захтевате само податке који су вам потребни.

Шта су ГрапхКЛ АПИ-ји?

ГрапхКЛ је језик упита који можете користити за писање позадинских АПИ-ја (апликационих програмских интерфејса). за разлику од РЕСТ АПИ-ји, који имају више крајњих тачака за различите податке, ГрапхКЛ АПИ-ји имају само једну улазну тачку.

Клијенти могу да наведу податке који су им потребни у својим упитима са ове јединствене улазне тачке, чинећи је флексибилнијом и ефикаснијом за преузимање само неопходних података.

instagram viewer

Једноставно речено, ГрапхКЛ АПИ имплементира ГрапхКЛ архитектуру коју описује ГрапхКЛ спецификације. Овај дизајн укључује дефинисање шеме, упита и мутација са којима клијенти могу да комуницирају.

Ево поједностављене анализе основних компоненти ГрапхКЛ АПИ архитектуре:

  1. Шема: Шема је опис типова података и операција које пружа АПИ. У основи, шема дефинише структуру доступних података и тип упита и мутација које клијент може да изврши да би модификовао податке.
  2. Упити: Клијенти користе упите за преузимање података из базе података наводећи структуру података који су им потребни. Штавише, они могу да угнезде више упита у једном ХТТП захтеву да дохвате повезане податке са више крајњих тачака.
  3. Мутације: Мутације су операције које се користе за модификацију података у бази података. Клијенти могу да шаљу захтеве за мутацију за креирање, ажурирање или брисање података.

Подесите МонгоДБ базу података

Започети, креирајте МонгоДБ базу података. Алтернативно, можете бесплатно поставите МонгоДБ кластер у облаку.Када сте подесили своју базу података, копирајте МонгоДБ-ов УРИ низ везе са базом података.

Код овог пројекта можете пронаћи у њему ГитХуб спремиште.

Креирајте Аполло сервер

Аполло Сервер је популарна имплементација ГрапхКЛ сервера која ће вам омогућити да направите ГрапхКЛ АПИ-је у ЈаваСцрипт окружењима, укључујући Ноде.јс, Екпресс и још много тога.

Креирајте директоријум за нови пројекат и цд у то:

мкдир грапхкл-АПИ-монгоДБ
цд грапхкл-АПИ-монгоДБ

Затим иницијализујте нови Ноде.јс пројекат.

нпм инит --да

Ова команда ствара а пацкаге.јсон фајл.

Инсталирајте потребне зависности

Покрените следећу команду да бисте инсталирали пакете.

нпм инсталл аполло-сервер грапхкл монгоосе

На крају, креирајте ан индек.јс датотеку у основном директоријуму вашег пројекта.

Подесите Аполло сервер

Отвори индек.јс и додајте код испод:

конст { АполлоСервер } = захтевају('аполло-сервер');
конст мунгоосе = захтевају('Мунгос');
конст типеДефс = захтевају("./грапхкл/типеДефс");
конст разрешивачи = захтевају("./грапхкл/ресолверс");

конст сервер = Нова АполоСервер({
типеДефс,
разрешивачи
});

конст МОНГО_УРИ = 'монгодб://лоцалхост: 27017';

Мунгос
.цоннецт (МОНГО_УРИ, {
усеНевУрлПарсер: истина,
усеУнифиедТопологи: истина,
})
.онда(() => {
конзола.Пријава(`Дб Цоннецтед`);
повратак сервер.листен({ Лука: 5000 });
})
.онда((рес) => {
конзола.Пријава(`Сервер ради на ${рес.урл}`);
})
.улов(ерр => {
конзола.лог (ерр.мессаге);
});

Овај код иницијализује локални ГрапхКЛ сервер користећи Аполло Сервер библиотеку. Затим успоставља везу са МонгоДБ базом података са датим УРИ-јем везе.

Обратите пажњу на то како код шаље два аргумента новој инстанци АполлоСервера: типеДефс и разрешивачи. Они одређују типове података и операције које ГрапхКЛ АПИ може да изврши.

Након што је конекција са МонгоДБ базом података постављена, сервер почиње да слуша на порту 5000.

Дефинишите модел података

Креирајте нову фасциклу у основном директоријуму фасцикле вашег пројекта и дајте јој име модели. У овој фасцикли направите нова имена датотека датаМодел.јс и додајте му следећи код:

конст {модел, шема} = захтевају('Мунгос');

конст емплоиееСцхема = Нова Шема({
име: Низ,
одељење: Низ,
плата: Низ,
});

модул.екпортс = модел('Запослени', емплоиееСцхема);

Дефинишите ГрапхКЛ шему

ГрапхКЛ шема дефинише структуру података које можете испитивати користећи ГрапхКЛ АПИ. Шема такође описује упите и мутације које АПИ може да покрене. Можете користити упите за преузимање података и мутације да их модификујете.

У основном директоријуму вашег пројекта креирајте нову фасциклу и дајте јој назив грапхкл. Унутар ове фасцикле додајте две датотеке: типеДефс.јс и ресолверс.јс

Додајте код испод у датотеку типеДефс.јс:

конст {гкл} = захтевају("аполо-сервер");

конст типеДефс = гкл`
укуцајте запослени {
урадио сам!
име: Низ
одељење: Низ
плата: Низ
}
унос ЕмплоиееИнпут {
име: Низ
одељење: Низ
плата: Низ
}
укуцајте упит {
гетЕмплоиее (ид: ИД): Емплоиее #повратак Запослени по ИД
запослени: [Запослени] #повратак низ оф Запослени
}
тип мутације {
цреатеЕмплоиее (емплоиееИнпут: ЕмплоиееИнпут): Запослени
упдатеЕмплоиее (ид: ИД, ЕмплоиееИнпут: ЕмплоиееИнпут): Боолеан
делетеЕмплоиее (ид: ИД): Боолеан
}
`;

модул.екпортс = типеДефс;

Овај горњи код користи гкл функција коју обезбеђује пакет аполло-сервер за креирање ГрапхКЛ шеме за податке о запосленима.

Шема се састоји од четири главна елемента: типова података за информације о запосленима, типова уноса, упита и мутација које АПИ може да изврши.

Дефинишите Ресолвере за ГрапхКЛ АПИ

Ресолвер је ГрапхКЛ функција која дефинише податке који ће бити прослеђени када клијент пошаље АПИ упит за преузимање података. У суштини, његова примарна улога је да преузме потребне податке из наведеног извора података и врати их клијенту.

Додајте код испод у ресолверс.јс фајл у грапхкл фолдер. Ресолвери су, у овом случају, специфицирани унутар објеката Куери и Мутатион.

Објекат Куери дефинише две методе: запослених и гетЕмплоиее. Ове методе су одговорне за преузимање података о запосленима из базе података на захтев клијента.

конст Емплоиее= захтевају("../моделс/емплоиеесМодел");

// ГрапхКЛ Ресолверс
конст разрешивачи = {
Упит: {
запослени: асинц () => {
покушати {
конст запослени = чекати Емплоиее.финд({});
повратак запослени;
} улов (грешка) {
конзола.еррор (грешка);
бацитиНоваГрешка(„Неуспешно преузимање запослених“);
}
},
гетЕмплоиее: асинц (родитељ, аргс) => {
покушати {
конст запослени = чекати Емплоиее.финдБиИд (аргс.ид);
повратак запослени;
} улов (грешка) {
конзола.еррор (грешка);
бацитиНоваГрешка(„Неуспешно преузимање запосленог по ИД-у“);
}
},
},

Објект Мутатион има три методе: цреатеЕмплоиее, упдатеЕмплоиее, и делетеЕмплоиее. Ове методе уносе промене у податке ускладиштене у бази података МонгоДБ.

 мутација: {
асинц цреатеЕмплоиее (_, { ЕмплоиееИнпут: { име, одељење, плата } }) {
конст невЕмплоиее = Нова Запослени({
име: име,
одељење: одељење,
плата: плата
});

конст одговор = чекати невЕмплоиее.саве();
конзола.лог (невЕмплоиее);

повратак {
ид: одговор._ид,
...одговор._доц
}
},

асинц упдатеЕмплоиее (_, {ид, ЕмплоиееИнпут: {име, одељење, плата}}) {
конст упдатедЕмплоиее = чекати Емплоиее.упдатеОне(
{ _ид: ид },
{ име, одељење, плата }
);

ако (!упдатедЕмплоиее) {
бацитиНоваГрешка(`Запослени са личном картом: ${ид} није пронађено`);
}

повратакистина; // Враћа логичку вредност која указује на успех ажурирања
},

асинц делетеЕмплоиее (_, {ид}) {
конст делетедЕмплоиее = чекати Емплоиее.делетеОне({ _ид: ид });

ако (!делетедЕмплоиее || делетедЕмплоиее.делетедЦоунт 0) {
бацитиНоваГрешка(`Запослени са личном картом ${ид} није пронађено`);
}

повратакистина; // Враћа логичку вредност која указује на успех брисања
},
 },
};

модул.екпортс = ресолвери;

Коначно, покрените ову команду да бисте покренули сервер:

индекс чвора.јс

Када успостави везу са базом података, сервер ће се покренути на порту 5000.

Можете наставити и тестирати функционалност ГрапхКЛ АПИ-ја тако што ћете направити ХТТП захтеве са ГрапхКЛ игралишта у вашем претраживачу.

На пример, можете користити цреатеЕмплоиее мутација за додавање нових података о запосленима у базу података МонгоДБ.

ГрапхКЛ популарност у заједници програмера

ГрапхКЛ постаје све популарнији у заједници програмера као алтернативни приступ дизајну АПИ-ја популарној РЕСТ архитектури.

Ово је због његове способности да обезбеди флексибилнији и ефикаснији начин за преузимање података из различитих извора, све са једне улазне тачке. Ово избегава потребу за управљањем више крајњих тачака за различите податке, што је уобичајен проблем са РЕСТ АПИ архитектуром. Ово дизајнерско решење поједностављује процес изградње и управљања позадинским АПИ-јима.