Home - Peeoner174/GraphQL GitHub Wiki
Welcome to the GraphQL wiki! На примере swift прослойки Apollo GraphQL Позволяет получить все необходимые данные за один запрос т е можно одним запросом получить доступ к свойствам нескольких ресурсов Еще в плане достоинств -- нет четкого версионирования API Есть свой API код-генератор для каждого языка В GraphQL чаще всего существует только одна конечная точка(в большинстве случаев http post) ккуда отправляются все запросы
Позволяет делать запрос с точным описанием полей, которые клиент ожидает получить. В ставлять запросы условия выборки в виде аргументов Объединять какие-то конкретные виды запросов с аргументами в typeAlias или в фрагменты Фрагменты похожи на функции любого языка программирования. С помощью них можно избежать кусков повторяющейся выборки в запросах Для запросов, которые изменяют какие данные на сервере, существует ключевое поле mutation, такие запросы возвращают обновленные данные. Для возвращаемых данных такого запроса также можно указать конкретные поля, которые ожидает получить клиент. Any client can use this schema to construct queries for any subset of data, including primitive fields and nested object references and lists. A GraphQL fragment lets you build multiple fields, and include them in multiple queries. You can think of it as functions in programming languages, that are reusable units. fragment Name on TypeName { field1 field2 field3 }
{ googleRepo: repository(owner: "google", name: "WebFundamentals") { name owner { ...ownerInfo //fragment } } facebookRepo: repository(owner: "facebook", name: "react") { name owner { ...ownerInfo //fragment } } }
GraphQL позволяет на этапе запросе строить сложные выборки, которые позволяют сократить колличество отдельных запросов по сравнению с REST в то же время в каждом запросе убрать поля, которые не будут необходимы клиенту GraphQL имеет единый ендпоинт, а запросы можно сравнить с SQL Graph - гибкая поддержка возможности выборки в языук QL - query language
GraphQL поддерживает интерфейсы(как в обычных языках программирования).
Граф, о котором мы говорим, — это группа сущностей, которые связаны друг с другом отношениями. Эти сущности и отношения имеют специальные названия в теории графов. Сущности называются узлами (nodes), а отношения между ними — рёбрами (edges).
GraphQL позволяет указывать небольшой участок графа, который нам нужен. Такой участок называется фрагментом. Фрагменты объединяются для создания бóльшего запроса.
При использовании GraphQL Вам не нужно хардкодить на сервере список необходимых свойств. Вместо этого, компонент предоставляет серверу список того, что ему нужно. Этот список объединяется со списками от других компонентов. Структура объединённого списка — это дерево, совсем как дерево компонентов. Его и передают на конечную точку. Существует лишь одна конечная точка, которая обрабатывает все запросы. Если Вам нужно добавить или удалить свойство, просто измените компонент... а не сервер.
query HeroForEpisode($ep: Episode!) { hero(episode: $ep) { name ... on Droid { primaryFunction } ... on Human { height } } }
Фрагмент hero запрашивает Character, character -- это интерфейс. внутри такого фрагмента можно построить условия какие поля возвращать взависимости от типа к которому мы обращаемся в конкретной данной ситуации, в данном примере, если в качестве аргумента фрагменту будет передан энтити типа Droid, то вернется его name, primaryFunction; человек -- name, height.
Просто же три точки означает вызов данного фрагмента, как вызов функции. С ключевым словом fragment -- объявление фрагмента
Объявление: запросить сущности типа OTPResult, и вернуть поля oneTimeLogin, nextBackoffTime fragment GQOTPResult on OTPResult { oneTimeLogin nextBackoffTime }
Вызов: mutation sendOTP($phone: PhoneNumber!) { makeOTP(phone: $phone) { ...GQOTPResult } }