Грапх Куери Лангуаге (ГрапхКЛ) је језик и спецификација за интеракцију са ГрапхКЛ АПИ-јима, архитектуром клијент-сервер заснованом на ХТТП-у за комуникацију широм веба.

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

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

Почетак рада са ГрапхКЛ АПИ-јима у Го

ГрапхКЛ је заснован на ХТТП архитектури, а Го пружа ХТТП функционалност у својој уграђеној хттп пакет.

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

ГрапхКЛ клијентски пакети попут Машинске кутије или схурЦооЛ'с учините процес интеракције са ГрапхКЛ АПИ-јима још лакшим.

instagram viewer

Можете користити хттп пакет без икаквих зависности за интеракцију са ГрапхКЛ АПИ-јем. Увезите ове пакете у своју Го датотеку да бисте започели:

увоз (
"бајтови"
"кодирање/јсон"
"фмт"
"ио/иоутил"
"нет/хттп"
"време"
)

Користићете бајтова пакет за креирање новог бафера за захтев и јсон пакет за слање мапе у тело захтева ЈСОН. Можете користити иоутил да прочита тело одговора и време пакет за постављање временског ограничења за захтев.

Упити за ГрапхКЛ АПИ-је са Го

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

Све ГрапхКЛ операције су обично ПОСТ захтеви јер морају имати корисни терет (тело захтева). Већина ГрапхКЛ АПИ-ја прихвата ЈСОН тело захтева као тип садржаја и Го пружа функционалност за коришћење мапа и структура за рад са ЈСОН-ом.

Мораћете да проучите структуру ГрапхКЛ шеме да бисте поставили упит за АПИ. Упит ће бити исти као и уобичајени ГрапхКЛ упит осим што је операција (упит или мутација) кључ, а подаци су вредност мапе.

Ево како можете декларисати инстанцу ЈСОН мапе коју ћете унети у ЈСОН за захтев.

јсонМапИнстанце := Мапа[низ]низ {
"упит": `
{
земље {
име,
телефон,
валута,
код,
емоји
}
}
`,
}

Тхе јсонМапИнстанце променљива је инстанца мапе за тело захтева. Вредност је низ података упита које очекујете од АПИ-ја. У овом случају, подаци упита које очекујете од АПИ-ја земље шеме су име, телефон, валута, код, и емоји поља.

Можете користити маршал методом јсон пакет за кодирање инстанце мапе у ЈСОН. Тхе маршал метода враћа кодирани ЈСОН и грешку за случајеве са проблемом кодирања.

јсонРесулт, ерр := јсон. Маршал (јсонМапИнстанце)

ако ерр != нула {
фмт. Принтф("Дошло је до грешке при маршалирању ЈСОН инстанце %в", грешка)
}

Када кодирате мапу у ЈСОН, можете послати ПОСТ захтев АПИ-ју. Можете креирати нову инстанцу захтева помоћу НевРекуест метод, који узима тип захтева, УРЛ и ЈСОН бафер.

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

невРекуест, ерр := хттп. НевРекуест("ПОСТ", "хттпс://цоунтриес.треворбладес.цом/грапхкл", бајтова. НевБуффер (јсонРесулт))
невРекуест. Хеадер. Сет("Цонтент-Типе", "апплицатион/јсон")

Можете креирати једноставан ХТТП клијент за свој захтев помоћу Клијент метод ХТТП пакета. Тхе Клијент метод такође вам омогућава да поставите временско ограничење за ваш захтев са време пакет.


клијент := &хттп. Клијент{Тимеоут: време. Други * 5}
одговор, грешка := клијент. Уради (нови захтев)

ако ерр != нула {
фмт. Принтф("Дошло је до грешке при извршавању захтева%в", грешка)
}

Након што сте декларисали ХТТП клијента, извршите свој АПИ захтев са Урадите методом. Тхе Урадите метода прихвата инстанцу захтева и враћа одговор и грешку.

Можете прочитати одговор на АПИ захтев са иоутил пакета РеадАлл методом. Узима излазни ток и враћа део бајтова података са грешком коју можете да решите.

респонсеДата, ерр := иоутил. Прочитај све (одговор. тело)

ако ерр != нула {
фмт. Принтф("Грешка читања података%в", грешка)
}

Са уграђеном функцијом стринга, можете конвертовати одговор бајтног пресека у тип стринга.

фмт. Принтлн(низ(респонсеДата))

Ево одговора који приказује резултат АПИ захтева:

Коришћење РЕСТфул АПИ-ја је као коришћење ГрапхКЛ АПИ-ја

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

Мораћете да креирате клијенте, захтевате инстанце и читате податке са истим пакетима.