Graph Query Language (GraphQL) е език и спецификация за взаимодействие с API на GraphQL, базирана на HTTP клиент-сървър архитектура за комуникация в мрежата.

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

Тъй като GraphQL е спецификация, можете да създавате и използвате API на GraphQL на всеки език за програмиране от страна на сървъра, включително Go.

Първи стъпки с API на GraphQL в Go

GraphQL е базиран на HTTP архитектура, а Go предоставя HTTP функционалност във вградената си http пакет.

Можете да използвате http пакет до използват RESTful API в Go, наред с други функции. За GraphQL можете да правите заявки и мутации към GraphQL API сървъри с http пакет и други вградени пакети.

Клиентски пакети на GraphQL като Машинна кутия или shurCooL’s направи процеса на взаимодействие с GraphQL API още по-лесен.

instagram viewer

Можете да използвате http пакет без никакви зависимости за взаимодействие с GraphQL API. Импортирайте тези пакети във вашия Go файл, за да започнете:

импортиране (
"байтове"
"кодиране/json"
"fmt"
"io/ioutil"
"net/http"
"време"
)

Ще използвате байтове пакет за създаване на нов буфер за заявката и json пакет за маршал на карта към тялото на заявката JSON. Можеш да използваш ioutil за да прочетете тялото на отговора и време пакет, за да зададете времеви лимит за заявката.

Извършване на заявки за GraphQL API с Go

Има много безплатни публични API на GraphQL, които можете да правите заявки и да ги интегрирате във вашите приложения. За тази статия ще направите запитване към API за държави на Apollo GraphQL, за да направите заявка за данни за държави по целия свят.

Всички GraphQL операции обикновено са POST заявки, тъй като те трябва да имат полезен товар (тяло на заявката). Повечето API на GraphQL приемат тялото на JSON заявка като тип съдържание и Go предоставя функционалност за използване на карти и структури за работа с JSON.

Ще трябва да проучите структурата на схемата GraphQL, за да направите заявка към API. Заявката ще бъде същата като обикновена GraphQL заявка, с изключение на това, че операцията (заявка или мутация) е ключът, а данните са стойността на картата.

Ето как можете да декларирате екземпляр на JSON карта, който ще маршалирате в JSON за заявката.

jsonMapInstance := карта[низ]низ {
"заявка": `
{
държави {
име,
телефон,
валута,
код,
емотикони
}
}
`,
}

The jsonMapInstance променливата е екземплярът на картата за тялото на заявката. Стойността е низ от данните за заявката, които очаквате от API. В този случай данните за заявката, които ще очаквате от API държави схемата са име, телефон, валута, код, и емотикони полета.

Можете да използвате маршал метод на json пакет за кодиране на екземпляра на картата в JSON. The маршал метод връща кодирания JSON и грешка за случаи с проблем с кодирането.

jsonResult, грешка := json. Маршал (jsonMapInstance)

ако грешка!= нула {
fmt. Printf("Възникна грешка при сортирането на JSON екземпляра %v", грешка)
}

След като сте кодирали картата в JSON, можете да изпратите POST заявката към API. Можете да създадете нов екземпляр на заявка с Нова заявка метод, който приема типа на заявката, URL адреса и JSON буфера.

The Нова заявка метод връща екземпляр на заявка. Ще трябва да зададете типа съдържание в зависимост от спецификациите на API. Можете да зададете типа съдържание за HTTP заявки с Комплект метод на Заглавка метод на вашия екземпляр на заявка.

нова заявка, грешка := http. NewRequest("POST", "https://countries.trevorblades.com/graphql", байтове. NewBuffer (jsonResult))
нова заявка. Заглавка. Set("Content-Type", "application/json")

Можете да създадете прост HTTP клиент за вашата заявка с Клиент метод на HTTP пакета. The Клиент метод също ви позволява да зададете времеви лимит за вашата заявка с време пакет.


клиент := &http. Клиент{Изчакване: време. второ * 5}
отговор, грешка := клиент. Направи (нова заявка)

ако грешка!= нула {
fmt. Printf("Възникна грешка при изпълнение на заявката%v", грешка)
}

След като сте декларирали HTTP клиента, изпълнете своята API заявка с Направи метод. The Направи методът приема екземпляра на заявката и връща отговора и грешка.

Можете да прочетете отговора на API заявката с ioutil пакет ReadAll метод. Той приема изходен поток и връща байтов отрязък от данните с грешка, която можете да обработите.

responseData, грешка := ioutil. ReadAll (отговор. тяло)

ако грешка!= нула {
fmt. Printf("Грешка при четене на данни%v", err)
}

С вградената функция за низ можете да преобразувате отговора на байтовото парче към типа низ.

fmt. Println(низ(данни за отговор))

Ето отговор, показващ резултата от заявката за API:

Използването на RESTful API е като използване на GraphQL API

Тъй като API на REST и GraphQL използват HTTP протокола, използването на всеки е много подобен процес и можете да използвате http пакет и за двата случая.

Ще трябва да създавате клиенти, да заявявате екземпляри и да четете данните със същите пакети.