Если вы не знаете, что такое GraphQL API, то сразу отметим, они разнятся от классических REST API способом доступа к информации. В REST API пользователь, как правило, просто отсылает GET-запрос, дабы получить информацию конкретного ресурса. Например, GET-запрос к https://api.zippopotam.us/us/90211 вернет точную геолокацию, которая относится к индексу Соединенных Штатов Америки 90211.
В отличие от этого, в случае с GraphQL, пользователь создает GraphQL-запрос и шлет его к API посредством POST. Подобные манипуляции позволяют получать информацию от нескольких источников (в потенциале – от массы источников данных) единым, полностью агрегированным API-вызовом.
Например, если вы хотите получить наименование глобальной компании SpaceX, а также ФИО ее генерального директора и исполнительного директора, то это можно реализовать, выполнив GraphQL-запрос к API сайта SpaceX – https://api.spacex.land/graphql/
{
company {
ceo
coo
name
}
}
Подобные манипуляции вернут ответ с JSON-телом:
{
«data»: {
«company»: {
«ceo»: «Elon Musk»,
«coo»: «Gwynne Shotwell»,
«name»: «SpaceX»
}
}
}
Как можно наблюдать из примеров, сам запрос использует оригинальный синтаксис GraphQL, но ответ возвращается на простом JSON. Это очень хорошая новость для тех, кто планирует применять библиотеку запросов для проверки GraphQL API. Далее разберем, как правильно это делать.
Самый простой вариант создания и отправки GraphQL-запроса к выбранному API – это произвести жесткое кодирование запроса внутри программного кода теста в виде строки:
query_company_ceo_coo_name = «»»
{
company {
ceo
coo
name
}
}
«»»
Теперь все, что необходимо для отправки запроса к GraphQL API – это разработать JSON-тело запроса с одноэлементным запросом, где строка запроса является значением. Ничего сложного!
Также обратите внимание на пример, как все вышеописанное отображается в тесте с применением requests и pytest, вместе с тестированием статус-кода ответа – дабы проверить, что тестовый запрос корректно обработан:
def test_retrieve_graphql_data_should_yield_http_200():
response = requests.post(«https://api.spacex.land/graphql/», json={‘query’: query_company_ceo_coo_name})
assert response.status_code == 200
Все это на удивление очевидно. Единственное, что может немного смутить – максимально жесткое кодирование каждого запроса GraphQL как строк кода. Но это уже материал других исследований.
Оставить комментарий