Язык запросов Graph (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 вы можете выполнять запросы и изменения на серверах API GraphQL с помощью http package и другие встроенные пакеты.
Клиентские пакеты GraphQL, такие как Машинный ящик или шуркулы сделать процесс взаимодействия с API GraphQL еще проще.
Вы можете использовать http package без каких-либо зависимостей для взаимодействия с GraphQL API. Импортируйте эти пакеты в свой файл Go, чтобы начать:
Импортировать (
"байты"
"кодировка/json"
"ФМТ"
"io/ioutil"
"сеть/http"
"время"
)
Вы будете использовать байты package для создания нового буфера для запроса и json package для маршалинга карты в тело запроса JSON. Вы можете использовать ioutil читать тело ответа и время пакет, чтобы установить ограничение по времени для запроса.
Запрос API GraphQL с помощью Go
Существует множество бесплатных общедоступных API-интерфейсов GraphQL, которые вы можете запрашивать и интегрировать в свои приложения. В этой статье вы будете запрашивать API стран Apollo GraphQL для запроса данных по странам по всему миру.
Все операции GraphQL обычно представляют собой запросы POST, поскольку они должны иметь полезную нагрузку (тело запроса). Большинство API-интерфейсов GraphQL принимают тело запроса JSON в качестве типа контента и Go предоставляет функциональные возможности для использования карт и структур для работы с JSON..
Вам нужно будет изучить структуру схемы GraphQL, чтобы запросить API. Запрос будет таким же, как и обычный запрос GraphQL, за исключением того, что операция (запрос или изменение) является ключом, а данные — значением карты.
Вот как вы можете объявить экземпляр карты JSON, который вы будете маршалировать в JSON для запроса.
jsonMapInstance: = карта[нить]нить {
"запрос": `
{
страны {
имя,
телефон,
валюта,
код,
эмодзи
}
}
`,
}
jsonMapInstance переменная — это экземпляр карты для тела запроса. Значение представляет собой строку данных запроса, которые вы ожидаете от API. В этом случае данные запроса, которые вы ожидаете от API страны схема имя, телефон, валюта, код, и эмодзи поля.
Вы можете использовать Маршал метод json package для кодирования экземпляра карты в JSON. Маршал метод возвращает закодированный JSON и ошибку для случаев с проблемой кодирования.
jsonResult, ошибка := json. Маршал (jsonMapInstance)
если ошибся != ноль {
ФМТ. Printf("Произошла ошибка маршалинга экземпляра JSON %v", ошибка)
}
После того, как вы закодировали карту в JSON, вы можете отправить запрос POST в API. Вы можете создать новый экземпляр запроса с Новый запрос метод, который принимает тип запроса, URL-адрес и буфер JSON.
Новый запрос метод возвращает экземпляр запроса. Вам нужно будет установить тип контента в зависимости от спецификаций API. Вы можете установить тип контента для HTTP-запросов с помощью Набор метод Заголовок метод вашего экземпляра запроса.
новый запрос, ошибка := http. НовыйЗапрос("POST", "https://countries.trevorblades.com/graphql", байт. Ньюбуффер (jsonResult))
Новый запрос. Заголовок. Установить("Тип контента", "приложение/json")
Вы можете создать простой HTTP-клиент для вашего запроса с помощью Клиент метод HTTP-пакета. Клиент метод также позволяет вам установить ограничение по времени для вашего запроса с помощью время упаковка.
клиент := &http. Клиент{Время ожидания: время. Второй * 5}
ответ, ошибка := клиент. Выполнить (новый запрос)
если ошибся != ноль {
ФМТ. Printf("Произошла ошибка при выполнении запроса %v", ошибка)
}
После того, как вы объявили HTTP-клиент, выполните запрос API с Делать метод. Делать метод принимает экземпляр запроса и возвращает ответ и ошибку.
Вы можете прочитать ответ на запрос API с помощью ioutil пакет Читать все метод. Он принимает выходной поток и возвращает байтовый фрагмент данных с ошибкой, которую вы можете обработать.
данные ответа, ошибка := ioutil. Прочитать все (ответ. Тело)
если ошибся != ноль {
ФМТ. Printf("Ошибка чтения данных%v", ошибка)
}
С помощью встроенной строковой функции вы можете преобразовать ответ байтового среза в строковый тип.
ФМТ. Распечатать(нить(данные ответа))
Вот ответ, показывающий результат запроса API:
Использование API RESTful похоже на использование API GraphQL
Поскольку и REST, и GraphQL API используют протокол HTTP, использование каждого из них представляет собой очень похожий процесс, и вы можете использовать http пакет для обоих случаев.
Вам нужно будет создавать клиентов, запрашивать экземпляры и считывать данные с теми же пакетами.