Грапх Куери Лангуаге (ГрапхКЛ) је језик и спецификација за интеракцију са ГрапхКЛ АПИ-јима, архитектуром клијент-сервер заснованом на ХТТП-у за комуникацију широм веба.
Фацебоок је објавио ГрапхКЛ као алтернативу РЕСТ архитектонском стандарду. ГрапхКЛ решава већину проблема са РЕСТ-ом на начин без стања и могућност кеширања. Пружа једноставну и интуитивну синтаксу која описује очекивани излаз(е) или улаз(е), а АПИ преноси податке који одговарају захтеву.
Пошто је ГрапхКЛ спецификација, можете да правите и користите ГрапхКЛ АПИ-је у било ком програмском језику на страни сервера, укључујући Го.
Почетак рада са ГрапхКЛ АПИ-јима у Го
ГрапхКЛ је заснован на ХТТП архитектури, а Го пружа ХТТП функционалност у својој уграђеној хттп пакет.
Можете користити хттп пакет до користите РЕСТфул АПИ-је у Го, између осталих карактеристика. За ГрапхКЛ, можете да правите упите и мутације на серверима ГрапхКЛ АПИ-ја са хттп пакет и други уграђени пакети.
ГрапхКЛ клијентски пакети попут Машинске кутије или схурЦооЛ'с учините процес интеракције са ГрапхКЛ АПИ-јима још лакшим.
Можете користити хттп пакет без икаквих зависности за интеракцију са ГрапхКЛ АПИ-јем. Увезите ове пакете у своју Го датотеку да бисте започели:
увоз (
"бајтови"
"кодирање/јсон"
"фмт"
"ио/иоутил"
"нет/хттп"
"време"
)
Користићете бајтова пакет за креирање новог бафера за захтев и јсон пакет за слање мапе у тело захтева ЈСОН. Можете користити иоутил да прочита тело одговора и време пакет за постављање временског ограничења за захтев.
Упити за ГрапхКЛ АПИ-је са Го
Постоји много бесплатних јавних ГрапхКЛ АПИ-ја које можете питати и интегрисати у своје апликације. За овај чланак, питаћете Аполло ГрапхКЛ-ов АПИ за земље да бисте упитали податке о земљама широм света.
Све ГрапхКЛ операције су обично ПОСТ захтеви јер морају имати корисни терет (тело захтева). Већина ГрапхКЛ АПИ-ја прихвата ЈСОН тело захтева као тип садржаја и Го пружа функционалност за коришћење мапа и структура за рад са ЈСОН-ом.
Мораћете да проучите структуру ГрапхКЛ шеме да бисте поставили упит за АПИ. Упит ће бити исти као и уобичајени ГрапхКЛ упит осим што је операција (упит или мутација) кључ, а подаци су вредност мапе.
Ево како можете декларисати инстанцу ЈСОН мапе коју ћете унети у ЈСОН за захтев.
јсонМапИнстанце := Мапа[низ]низ {
"упит": `
{
земље {
име,
телефон,
валута,
код,
емоји
}
}
`,
}
Тхе јсонМапИнстанце променљива је инстанца мапе за тело захтева. Вредност је низ података упита које очекујете од АПИ-ја. У овом случају, подаци упита које очекујете од АПИ-ја земље шеме су име, телефон, валута, код, и емоји поља.
Можете користити маршал методом јсон пакет за кодирање инстанце мапе у ЈСОН. Тхе маршал метода враћа кодирани ЈСОН и грешку за случајеве са проблемом кодирања.
јсонРесулт, ерр := јсон. Маршал (јсонМапИнстанце)
ако ерр != нула {
фмт. Принтф("Дошло је до грешке при маршалирању ЈСОН инстанце %в", грешка)
}
Када кодирате мапу у ЈСОН, можете послати ПОСТ захтев АПИ-ју. Можете креирати нову инстанцу захтева помоћу НевРекуест метод, који узима тип захтева, УРЛ и ЈСОН бафер.
Тхе НевРекуест метода враћа инстанцу захтева. Мораћете да подесите тип садржаја у зависности од спецификација АПИ-ја. Можете да подесите тип садржаја за ХТТП захтеве помоћу Комплет методом Хеадер метод инстанце вашег захтева.
невРекуест, ерр := хттп. НевРекуест("ПОСТ", "хттпс://цоунтриес.треворбладес.цом/грапхкл", бајтова. НевБуффер (јсонРесулт))
невРекуест. Хеадер. Сет("Цонтент-Типе", "апплицатион/јсон")
Можете креирати једноставан ХТТП клијент за свој захтев помоћу Клијент метод ХТТП пакета. Тхе Клијент метод такође вам омогућава да поставите временско ограничење за ваш захтев са време пакет.
клијент := &хттп. Клијент{Тимеоут: време. Други * 5}
одговор, грешка := клијент. Уради (нови захтев)
ако ерр != нула {
фмт. Принтф("Дошло је до грешке при извршавању захтева%в", грешка)
}
Након што сте декларисали ХТТП клијента, извршите свој АПИ захтев са Урадите методом. Тхе Урадите метода прихвата инстанцу захтева и враћа одговор и грешку.
Можете прочитати одговор на АПИ захтев са иоутил пакета РеадАлл методом. Узима излазни ток и враћа део бајтова података са грешком коју можете да решите.
респонсеДата, ерр := иоутил. Прочитај све (одговор. тело)
ако ерр != нула {
фмт. Принтф("Грешка читања података%в", грешка)
}
Са уграђеном функцијом стринга, можете конвертовати одговор бајтног пресека у тип стринга.
фмт. Принтлн(низ(респонсеДата))
Ево одговора који приказује резултат АПИ захтева:
Коришћење РЕСТфул АПИ-ја је као коришћење ГрапхКЛ АПИ-ја
Пошто и РЕСТ и ГрапхКЛ АПИ-ји користе ХТТП протокол, коришћење сваког од њих је веома сличан процес и можете да користите хттп пакет за оба случаја.
Мораћете да креирате клијенте, захтевате инстанце и читате податке са истим пакетима.