SlideShare a Scribd company logo
1 of 44
Vladimir Zaets, Magento
- новый взгляд на API
SERVICE
Get User data
Get Posts data
Get Comments data
Get …. data
Preprocessing
Data
Большое количество запросов для получения необходимых данных для страницы
Предварительная подготовка данных для UI
SERVICE
Endpoints for each pagePreprocessing
Data
SERVICE
Send list of endpointsPreprocessing
Data
domain.com/api/user
domain.com/api/comments
domain.com/api/posts
List of endpoints
Aggregation mechanism
Позволяет клиентскому приложению точно
указать, какие данные ему нужны используя
декларативную, графо-подобную структуру.
Позволяет клиенту точно указать, какие данные ему нужны используя
декларативную, графо-подобную структуру
Облегчает агрегацию данных и нескольких
источников
Облегчает агрегацию данных из нескольких
источников
Транспорт данных клиент-сервер
(http, WS, etc.)
CLIENT
SERVICE
SERVICE
Request - Response
Request - Response
Облегчает агрегацию данных из нескольких
источников
Транспорт данных клиент-сервер
(http, WS, etc.)
CLIENT
SERVICE
SERVICE
Использует систему типов для описания данных
Использует систему типов для описания
данных.
QUERY TYPES
VS
Возможность возвращать разные форматы данных
Только JSON Разные форматы
данных. XML, JSON
Возможность формировать структуру и объем
данных на клиенте
YES NO
Объем и структура
данных жестко
определенна на сервере
Передача параметров в запрос
Любое поле в запросе
может принимать параметры
Передача параметров возможно
лишь в весь запрос
domain/v1/user/:id?param=value
GraphQL CLIENT EDITOR
GraphQL CLIENT EDITOR
Query and Mutation
C R U DR
QUERY MUTATION
Для операции «Читать» Для операций «Создать», «Обновить», «Удалить»
Variables and Arguments
Декларация переменной.
Задается в JSON формате.
Передаем переменную “key” в качестве
аргумента указывая тип данной
переменной, в данном случаи “String ”.
Variables and Arguments
Значение по умолчанию
Aliases and Fragments
Aliases and Fragments
Aliases
Aliases and Fragments
Aliases
Aliases and Fragments
Фрагменты представляют собой набор
полей которые которые можно
переиспользовать
Directives
Directives
Directives
DirectiveLocation. QUERY
DirectiveLocation.INLINE_FRAGMENT
DirectiveLocation.FRAGMENT_SPREAD
Directives
https://github.com/lirown/graphql-custom-directive
GraphQL Interfaces
Interface declaration Interface implementation
GraphQL Interfaces
Request Response
GraphQL Inline Fragments
Request Response
Union types
Request Response
API для сложных выборок
https://facebook.github.io/relay/
https://github.com/facebook/relay
https://www.apollographql.com/
https://github.com/apollographql
Pagination
Pagination
Варианты имплементации:
• products( first:2 offset:2 ) – запрашиваются следующие два в списке.
Вариант 1: products( first:2 offset:2 )
PRODUCT 1
PRODUCT 2
PRODUCT 3
PRODUCT 4
PRODUCT 5
PRODUCT 6
PRODUCT 7
Возвращает
первые два
продукта
PRODUCT 0
PRODUCT 1
PRODUCT 2
PRODUCT 3
PRODUCT 4
PRODUCT 5
PRODUCT 6
PRODUCT 7
Возвращает
следующие
два, не
учитывая
добавленного
Добавлен продукт
Вариант 1: products( first:2 offset:2 )
PRODUCT 1
PRODUCT 2
PRODUCT 3
PRODUCT 4
PRODUCT 5
PRODUCT 6
PRODUCT 7
Возвращает
первые два
продукта
PRODUCT 2
PRODUCT 3
PRODUCT 4
PRODUCT 5
PRODUCT 6
PRODUCT 7
Возвращает
следующие
два, не
учитывая
удаленного
Удален Product 1
Pagination
Варианты имплементации:
• products( first:2 offset:2 ) – запрашиваются следующие два в списке.
• products( first:2 after:$cursor ) – получаем курсор из последнего элемента и
используем его для разбивки на страницы.
Вариант 2: products( first:2 after:$cursor )
PRODUCT 1
PRODUCT 2
PRODUCT 3
PRODUCT 4
PRODUCT 5
PRODUCT 6
PRODUCT 7
У PRODUCT2
cursor:
W29iamV=
Sorting and filtering
Sorting / Filtering
Дополнительный параметр sort у
которого поля:
”field” – поле по которому будет
выполнятся сортировка.
”order”- порядок сортировки.
Фильтрация выполняется
по sku продукта.
Sorting / Filtering
Гибкая фильтрация с
применением OR и AND
В каких случаях стоит использовать GraphQL?
• При использовании микросервисной
архитектуры.
• При разработке платформы/сервиса
которая рассчитан на интеграцию с
другими системами/приложениями.
• Если команды размещены в разных
локалях. (сложность коммуникации)
• При разработке простого API.
• При использовании только одного
ресурса предоставления данных.
• При условии что вы разрабатываете
финальный продукт не рассчитанный
на дальнейшее развитие в ближайшем
времени. (Интернет-магазины, промо
сайты, т.д)
• GraphQL Voyager - визуально представляет GraphQL API в виде
интерактивного графа.
https://github.com/APIs-guru/graphql-voyager
• GraphCMS - создание, редактирование GraphQL контента.
https://graphcms.com/
• GraphQL Docs – позволяет создать статическую документацию на основе
вашего API.
https://github.com/2fd/graphdoc
• GraphQL Faker – позволяет подменять данные вашего API.
Полезно для тестирования.
https://github.com/APIs-guru/graphql-faker
• Optics – метрики запросов в GraphQL API.
https://www.apollographql.com/engine/
Any questions?
The end.  Thank You.
Vladimir Zaets
https://github.com/VladimirZaets
https://www.linkedin.com/in/vladimir-zaets-22b2149a/
https://www.facebook.com/vladimir.zaets.75

More Related Content

Similar to Владимир Заец "GraphQL - новый взгляд на API."

Мобильный клиент Парус. Встречайте!
Мобильный клиент Парус. Встречайте!Мобильный клиент Парус. Встречайте!
Мобильный клиент Парус. Встречайте!Адмирал Сервис
 
Performance Monitor для Microsoft SQL Server
Performance Monitor для Microsoft SQL ServerPerformance Monitor для Microsoft SQL Server
Performance Monitor для Microsoft SQL ServerDBPLUS
 
Time series data in a relational database. TimescaleDB and PipelineDB extensi...
Time series data in a relational database. TimescaleDB and PipelineDB extensi...Time series data in a relational database. TimescaleDB and PipelineDB extensi...
Time series data in a relational database. TimescaleDB and PipelineDB extensi...Ivan Muratov
 
руководство пользователя на ас
руководство пользователя на асруководство пользователя на ас
руководство пользователя на асNatalia Zhelnova
 
"API «Битрикс24» — разбор с пристрастием". Александр Сербул, 1С-Битрикс
"API «Битрикс24» — разбор с пристрастием". Александр Сербул, 1С-Битрикс"API «Битрикс24» — разбор с пристрастием". Александр Сербул, 1С-Битрикс
"API «Битрикс24» — разбор с пристрастием". Александр Сербул, 1С-БитриксYandex
 
Report generators
Report generatorsReport generators
Report generatorsYuriiG
 
Превышаем скоростные лимиты с Angular 2 / Алексей Охрименко (IPONWEB)
Превышаем скоростные лимиты с Angular 2 / Алексей Охрименко (IPONWEB)Превышаем скоростные лимиты с Angular 2 / Алексей Охрименко (IPONWEB)
Превышаем скоростные лимиты с Angular 2 / Алексей Охрименко (IPONWEB)Ontico
 
Превышаем скоростные лимиты с Angular 2
Превышаем скоростные лимиты с Angular 2Превышаем скоростные лимиты с Angular 2
Превышаем скоростные лимиты с Angular 2Oleksii Okhrymenko
 
Подход к комплексному применению методологий систематизации требований
Подход к комплексному применению методологий систематизации требованийПодход к комплексному применению методологий систематизации требований
Подход к комплексному применению методологий систематизации требованийAnatoly Simkin
 
Hadoops MapReduce framework explanations
Hadoops MapReduce framework explanationsHadoops MapReduce framework explanations
Hadoops MapReduce framework explanationsevamariiagure
 
Droidcon Moscow 2015. Clean Architecture и MVP. Алексей Макаров - Zvooq
Droidcon Moscow 2015. Clean Architecture и MVP. Алексей Макаров - ZvooqDroidcon Moscow 2015. Clean Architecture и MVP. Алексей Макаров - Zvooq
Droidcon Moscow 2015. Clean Architecture и MVP. Алексей Макаров - ZvooqMail.ru Group
 
Drupal -organizaciya_razrabotki
Drupal  -organizaciya_razrabotkiDrupal  -organizaciya_razrabotki
Drupal -organizaciya_razrabotkidrupalconf
 
Drupal организация разработки
Drupal   организация разработкиDrupal   организация разработки
Drupal организация разработкиAnna Fedoruk
 
C++ и базы данных
C++ и базы данныхC++ и базы данных
C++ и базы данныхmcroitor
 
Performance Monitor для Oracle
Performance Monitor для OraclePerformance Monitor для Oracle
Performance Monitor для OracleDBPLUS
 
Многофункциональный сервер приложений, обеспечивающий среду запуска, и дающий...
Многофункциональный сервер приложений, обеспечивающий среду запуска, и дающий...Многофункциональный сервер приложений, обеспечивающий среду запуска, и дающий...
Многофункциональный сервер приложений, обеспечивающий среду запуска, и дающий...GeeksLab Odessa
 
Новые возможности языка SQL в Firebird 3.0
Новые возможности языка SQL в Firebird 3.0Новые возможности языка SQL в Firebird 3.0
Новые возможности языка SQL в Firebird 3.0Alexey Kovyazin
 
Web осень 2013 лекция 8
Web осень 2013 лекция 8Web осень 2013 лекция 8
Web осень 2013 лекция 8Technopark
 
0012
00120012
0012JIuc
 

Similar to Владимир Заец "GraphQL - новый взгляд на API." (20)

Мобильный клиент Парус. Встречайте!
Мобильный клиент Парус. Встречайте!Мобильный клиент Парус. Встречайте!
Мобильный клиент Парус. Встречайте!
 
Performance Monitor для Microsoft SQL Server
Performance Monitor для Microsoft SQL ServerPerformance Monitor для Microsoft SQL Server
Performance Monitor для Microsoft SQL Server
 
Time series data in a relational database. TimescaleDB and PipelineDB extensi...
Time series data in a relational database. TimescaleDB and PipelineDB extensi...Time series data in a relational database. TimescaleDB and PipelineDB extensi...
Time series data in a relational database. TimescaleDB and PipelineDB extensi...
 
руководство пользователя на ас
руководство пользователя на асруководство пользователя на ас
руководство пользователя на ас
 
"API «Битрикс24» — разбор с пристрастием". Александр Сербул, 1С-Битрикс
"API «Битрикс24» — разбор с пристрастием". Александр Сербул, 1С-Битрикс"API «Битрикс24» — разбор с пристрастием". Александр Сербул, 1С-Битрикс
"API «Битрикс24» — разбор с пристрастием". Александр Сербул, 1С-Битрикс
 
Report generators
Report generatorsReport generators
Report generators
 
Превышаем скоростные лимиты с Angular 2 / Алексей Охрименко (IPONWEB)
Превышаем скоростные лимиты с Angular 2 / Алексей Охрименко (IPONWEB)Превышаем скоростные лимиты с Angular 2 / Алексей Охрименко (IPONWEB)
Превышаем скоростные лимиты с Angular 2 / Алексей Охрименко (IPONWEB)
 
Превышаем скоростные лимиты с Angular 2
Превышаем скоростные лимиты с Angular 2Превышаем скоростные лимиты с Angular 2
Превышаем скоростные лимиты с Angular 2
 
Подход к комплексному применению методологий систематизации требований
Подход к комплексному применению методологий систематизации требованийПодход к комплексному применению методологий систематизации требований
Подход к комплексному применению методологий систематизации требований
 
1p
1p1p
1p
 
Hadoops MapReduce framework explanations
Hadoops MapReduce framework explanationsHadoops MapReduce framework explanations
Hadoops MapReduce framework explanations
 
Droidcon Moscow 2015. Clean Architecture и MVP. Алексей Макаров - Zvooq
Droidcon Moscow 2015. Clean Architecture и MVP. Алексей Макаров - ZvooqDroidcon Moscow 2015. Clean Architecture и MVP. Алексей Макаров - Zvooq
Droidcon Moscow 2015. Clean Architecture и MVP. Алексей Макаров - Zvooq
 
Drupal -organizaciya_razrabotki
Drupal  -organizaciya_razrabotkiDrupal  -organizaciya_razrabotki
Drupal -organizaciya_razrabotki
 
Drupal организация разработки
Drupal   организация разработкиDrupal   организация разработки
Drupal организация разработки
 
C++ и базы данных
C++ и базы данныхC++ и базы данных
C++ и базы данных
 
Performance Monitor для Oracle
Performance Monitor для OraclePerformance Monitor для Oracle
Performance Monitor для Oracle
 
Многофункциональный сервер приложений, обеспечивающий среду запуска, и дающий...
Многофункциональный сервер приложений, обеспечивающий среду запуска, и дающий...Многофункциональный сервер приложений, обеспечивающий среду запуска, и дающий...
Многофункциональный сервер приложений, обеспечивающий среду запуска, и дающий...
 
Новые возможности языка SQL в Firebird 3.0
Новые возможности языка SQL в Firebird 3.0Новые возможности языка SQL в Firebird 3.0
Новые возможности языка SQL в Firebird 3.0
 
Web осень 2013 лекция 8
Web осень 2013 лекция 8Web осень 2013 лекция 8
Web осень 2013 лекция 8
 
0012
00120012
0012
 

More from Fwdays

"How Preply reduced ML model development time from 1 month to 1 day",Yevhen Y...
"How Preply reduced ML model development time from 1 month to 1 day",Yevhen Y..."How Preply reduced ML model development time from 1 month to 1 day",Yevhen Y...
"How Preply reduced ML model development time from 1 month to 1 day",Yevhen Y...Fwdays
 
"GenAI Apps: Our Journey from Ideas to Production Excellence",Danil Topchii
"GenAI Apps: Our Journey from Ideas to Production Excellence",Danil Topchii"GenAI Apps: Our Journey from Ideas to Production Excellence",Danil Topchii
"GenAI Apps: Our Journey from Ideas to Production Excellence",Danil TopchiiFwdays
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...Fwdays
 
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr LapshynFwdays
 
"What is a RAG system and how to build it",Dmytro Spodarets
"What is a RAG system and how to build it",Dmytro Spodarets"What is a RAG system and how to build it",Dmytro Spodarets
"What is a RAG system and how to build it",Dmytro SpodaretsFwdays
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
"Distributed graphs and microservices in Prom.ua", Maksym Kindritskyi
"Distributed graphs and microservices in Prom.ua",  Maksym Kindritskyi"Distributed graphs and microservices in Prom.ua",  Maksym Kindritskyi
"Distributed graphs and microservices in Prom.ua", Maksym KindritskyiFwdays
 
"Rethinking the existing data loading and processing process as an ETL exampl...
"Rethinking the existing data loading and processing process as an ETL exampl..."Rethinking the existing data loading and processing process as an ETL exampl...
"Rethinking the existing data loading and processing process as an ETL exampl...Fwdays
 
"How Ukrainian IT specialist can go on vacation abroad without crossing the T...
"How Ukrainian IT specialist can go on vacation abroad without crossing the T..."How Ukrainian IT specialist can go on vacation abroad without crossing the T...
"How Ukrainian IT specialist can go on vacation abroad without crossing the T...Fwdays
 
"The Strength of Being Vulnerable: the experience from CIA, Tesla and Uber", ...
"The Strength of Being Vulnerable: the experience from CIA, Tesla and Uber", ..."The Strength of Being Vulnerable: the experience from CIA, Tesla and Uber", ...
"The Strength of Being Vulnerable: the experience from CIA, Tesla and Uber", ...Fwdays
 
"[QUICK TALK] Radical candor: how to achieve results faster thanks to a cultu...
"[QUICK TALK] Radical candor: how to achieve results faster thanks to a cultu..."[QUICK TALK] Radical candor: how to achieve results faster thanks to a cultu...
"[QUICK TALK] Radical candor: how to achieve results faster thanks to a cultu...Fwdays
 
"[QUICK TALK] PDP Plan, the only one door to raise your salary and boost care...
"[QUICK TALK] PDP Plan, the only one door to raise your salary and boost care..."[QUICK TALK] PDP Plan, the only one door to raise your salary and boost care...
"[QUICK TALK] PDP Plan, the only one door to raise your salary and boost care...Fwdays
 
"4 horsemen of the apocalypse of working relationships (+ antidotes to them)"...
"4 horsemen of the apocalypse of working relationships (+ antidotes to them)"..."4 horsemen of the apocalypse of working relationships (+ antidotes to them)"...
"4 horsemen of the apocalypse of working relationships (+ antidotes to them)"...Fwdays
 
"Reconnecting with Purpose: Rediscovering Job Interest after Burnout", Anast...
"Reconnecting with Purpose: Rediscovering Job Interest after Burnout",  Anast..."Reconnecting with Purpose: Rediscovering Job Interest after Burnout",  Anast...
"Reconnecting with Purpose: Rediscovering Job Interest after Burnout", Anast...Fwdays
 
"Mentoring 101: How to effectively invest experience in the success of others...
"Mentoring 101: How to effectively invest experience in the success of others..."Mentoring 101: How to effectively invest experience in the success of others...
"Mentoring 101: How to effectively invest experience in the success of others...Fwdays
 
"Mission (im) possible: How to get an offer in 2024?", Oleksandra Myronova
"Mission (im) possible: How to get an offer in 2024?",  Oleksandra Myronova"Mission (im) possible: How to get an offer in 2024?",  Oleksandra Myronova
"Mission (im) possible: How to get an offer in 2024?", Oleksandra MyronovaFwdays
 
"Why have we learned how to package products, but not how to 'package ourselv...
"Why have we learned how to package products, but not how to 'package ourselv..."Why have we learned how to package products, but not how to 'package ourselv...
"Why have we learned how to package products, but not how to 'package ourselv...Fwdays
 
"How to tame the dragon, or leadership with imposter syndrome", Oleksandr Zin...
"How to tame the dragon, or leadership with imposter syndrome", Oleksandr Zin..."How to tame the dragon, or leadership with imposter syndrome", Oleksandr Zin...
"How to tame the dragon, or leadership with imposter syndrome", Oleksandr Zin...Fwdays
 

More from Fwdays (20)

"How Preply reduced ML model development time from 1 month to 1 day",Yevhen Y...
"How Preply reduced ML model development time from 1 month to 1 day",Yevhen Y..."How Preply reduced ML model development time from 1 month to 1 day",Yevhen Y...
"How Preply reduced ML model development time from 1 month to 1 day",Yevhen Y...
 
"GenAI Apps: Our Journey from Ideas to Production Excellence",Danil Topchii
"GenAI Apps: Our Journey from Ideas to Production Excellence",Danil Topchii"GenAI Apps: Our Journey from Ideas to Production Excellence",Danil Topchii
"GenAI Apps: Our Journey from Ideas to Production Excellence",Danil Topchii
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
 
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
 
"What is a RAG system and how to build it",Dmytro Spodarets
"What is a RAG system and how to build it",Dmytro Spodarets"What is a RAG system and how to build it",Dmytro Spodarets
"What is a RAG system and how to build it",Dmytro Spodarets
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
"Distributed graphs and microservices in Prom.ua", Maksym Kindritskyi
"Distributed graphs and microservices in Prom.ua",  Maksym Kindritskyi"Distributed graphs and microservices in Prom.ua",  Maksym Kindritskyi
"Distributed graphs and microservices in Prom.ua", Maksym Kindritskyi
 
"Rethinking the existing data loading and processing process as an ETL exampl...
"Rethinking the existing data loading and processing process as an ETL exampl..."Rethinking the existing data loading and processing process as an ETL exampl...
"Rethinking the existing data loading and processing process as an ETL exampl...
 
"How Ukrainian IT specialist can go on vacation abroad without crossing the T...
"How Ukrainian IT specialist can go on vacation abroad without crossing the T..."How Ukrainian IT specialist can go on vacation abroad without crossing the T...
"How Ukrainian IT specialist can go on vacation abroad without crossing the T...
 
"The Strength of Being Vulnerable: the experience from CIA, Tesla and Uber", ...
"The Strength of Being Vulnerable: the experience from CIA, Tesla and Uber", ..."The Strength of Being Vulnerable: the experience from CIA, Tesla and Uber", ...
"The Strength of Being Vulnerable: the experience from CIA, Tesla and Uber", ...
 
"[QUICK TALK] Radical candor: how to achieve results faster thanks to a cultu...
"[QUICK TALK] Radical candor: how to achieve results faster thanks to a cultu..."[QUICK TALK] Radical candor: how to achieve results faster thanks to a cultu...
"[QUICK TALK] Radical candor: how to achieve results faster thanks to a cultu...
 
"[QUICK TALK] PDP Plan, the only one door to raise your salary and boost care...
"[QUICK TALK] PDP Plan, the only one door to raise your salary and boost care..."[QUICK TALK] PDP Plan, the only one door to raise your salary and boost care...
"[QUICK TALK] PDP Plan, the only one door to raise your salary and boost care...
 
"4 horsemen of the apocalypse of working relationships (+ antidotes to them)"...
"4 horsemen of the apocalypse of working relationships (+ antidotes to them)"..."4 horsemen of the apocalypse of working relationships (+ antidotes to them)"...
"4 horsemen of the apocalypse of working relationships (+ antidotes to them)"...
 
"Reconnecting with Purpose: Rediscovering Job Interest after Burnout", Anast...
"Reconnecting with Purpose: Rediscovering Job Interest after Burnout",  Anast..."Reconnecting with Purpose: Rediscovering Job Interest after Burnout",  Anast...
"Reconnecting with Purpose: Rediscovering Job Interest after Burnout", Anast...
 
"Mentoring 101: How to effectively invest experience in the success of others...
"Mentoring 101: How to effectively invest experience in the success of others..."Mentoring 101: How to effectively invest experience in the success of others...
"Mentoring 101: How to effectively invest experience in the success of others...
 
"Mission (im) possible: How to get an offer in 2024?", Oleksandra Myronova
"Mission (im) possible: How to get an offer in 2024?",  Oleksandra Myronova"Mission (im) possible: How to get an offer in 2024?",  Oleksandra Myronova
"Mission (im) possible: How to get an offer in 2024?", Oleksandra Myronova
 
"Why have we learned how to package products, but not how to 'package ourselv...
"Why have we learned how to package products, but not how to 'package ourselv..."Why have we learned how to package products, but not how to 'package ourselv...
"Why have we learned how to package products, but not how to 'package ourselv...
 
"How to tame the dragon, or leadership with imposter syndrome", Oleksandr Zin...
"How to tame the dragon, or leadership with imposter syndrome", Oleksandr Zin..."How to tame the dragon, or leadership with imposter syndrome", Oleksandr Zin...
"How to tame the dragon, or leadership with imposter syndrome", Oleksandr Zin...
 

Владимир Заец "GraphQL - новый взгляд на API."

Editor's Notes

  1. Всем привет, тема которую я хочу представить, это graphql.Как вы уже знаете GraphQL — это стандарт декларирования структуры данных и способов получения данных который выступает дополнительным layer между клиентом и сервером.
  2. Всем привет, тема которую я хочу представить, это graphql.Как вы уже знаете GraphQL — это стандарт декларирования структуры данных и способов получения данных который выступает дополнительным layer между клиентом и сервером.
  3. Всем привет, тема которую я хочу представить, это graphql.Как вы уже знаете GraphQL — это стандарт декларирования структуры данных и способов получения данных который выступает дополнительным layer между клиентом и сервером.
  4. Всем привет, тема которую я хочу представить, это graphql.Как вы уже знаете GraphQL — это стандарт декларирования структуры данных и способов получения данных который выступает дополнительным layer между клиентом и сервером.
  5. Graphql из коробки имеет свой IDE который работает в браузере и называется он GraphiqlОн довольно удобный, сохраняет историю, подствечивает синтаксис, имеет подсказки свойствкоторые мы можем запросить, и так же он умеет парсить документацию описанную в типах, и мы можем читатьее непосредственно при написании запроса.
  6. Graphiql можно включить либо через конфигурациюgraphql с помощу настройки graphiql = true и перейдя по пути имя домена слеш graphql, либо же использоватьодин из екстеншенов для браузера, они имеют немного разный вид но по факту одинаковые.
  7. Давайте более детально разберемся из чего состоит graphql и собственно его синтаксис. СRUD. Все знают 4 базові функції управління даними, CRUD, создание, чтение, обновлениеи удаление. В случаи реста, который основан на http протоколе, данные возможности реализуютсяс помощу типа запроса, get для чтения, post для создания, put для изменения и delete для удаления соответсвенноgraphql предоставляет всего 2 основных типа запросов, чтение выполняется с помощу типа queryа удаление обновление и создание с помощу типа mutation. При этом query в стучае с http могут использоватьи get и post метод.Основе различие между query и mutation в том что query выполняются паралельно, т.к они не изменяют данных, а мутейшены выполняются последовательно, т.к они изменяют данные, и если бы они выполнялись паралельно то могли б возникать сайд ефекты в виду колизии данных.
  8. graphql query language поддерживает понятие переменных, формат записи переменных это обычныйJSON. В данном случаи мы передаем переменную key в запрос User, явно определя ожидаемыйтип этой переменной. Знак восклицания означает что это обьязательный параметр.далее мы можем использовать данную переменную в любом месте запроса. В данном случаи мы String в данном случаи указывает тип параметра.
  9. Так же мы можем декларировать значения по умолчанию. В данномслучаи 4242.
  10. Алиасы и фрагменты. Допустим в нашем запросе мы хотил получить данныео двух пользователях. В этом случи мы используем алиасы.Мы определяем имя алиаса и непосредственно поле которые мы хотим получить. Результирующиеданные вернутся под ключем с именем алиаса. Так же это довольно юзабельный кейс допустимдаже если нам нужна одна сущность но наш фронтенд для рендеринга ожидает определенный ключ,и что бы не производить пост процессинг, мы можем использовать алиасы.Фрагменты это еще одна довольна удобная фича graphql. Мы можем определить набор полейи переиспользовать их. Если мы вернемся к примеру то мы видим, что мы запрашиваем два юзерано тем не менее поля у них хотим аналогичные и что бы не копипастить поля мы используем фрагмент.Помимо этого мы можем запросить дополнительные поля вместе с фрагментом.
  11. Алиасы и фрагменты. Допустим в нашем запросе мы хотил получить данныео двух пользователях. В этом случи мы используем алиасы.Мы определяем имя алиаса и непосредственно поле которые мы хотим получить. Результирующиеданные вернутся под ключем с именем алиаса. Так же это довольно юзабельный кейс допустимдаже если нам нужна одна сущность но наш фронтенд для рендеринга ожидает определенный ключ,и что бы не производить пост процессинг, мы можем использовать алиасы.Фрагменты это еще одна довольна удобная фича graphql. Мы можем определить набор полейи переиспользовать их. Если мы вернемся к примеру то мы видим, что мы запрашиваем два юзерано тем не менее поля у них хотим аналогичные и что бы не копипастить поля мы используем фрагмент.Помимо этого мы можем запросить дополнительные поля вместе с фрагментом.
  12. Алиасы и фрагменты. Допустим в нашем запросе мы хотил получить данныео двух пользователях. В этом случи мы используем алиасы.Мы определяем имя алиаса и непосредственно поле которые мы хотим получить. Результирующиеданные вернутся под ключем с именем алиаса. Так же это довольно юзабельный кейс допустимдаже если нам нужна одна сущность но наш фронтенд для рендеринга ожидает определенный ключ,и что бы не производить пост процессинг, мы можем использовать алиасы.Фрагменты это еще одна довольна удобная фича graphql. Мы можем определить набор полейи переиспользовать их. Если мы вернемся к примеру то мы видим, что мы запрашиваем два юзерано тем не менее поля у них хотим аналогичные и что бы не копипастить поля мы используем фрагмент.Помимо этого мы можем запросить дополнительные поля вместе с фрагментом.
  13. Алиасы и фрагменты. Допустим в нашем запросе мы хотил получить данныео двух пользователях. В этом случи мы используем алиасы.Мы определяем имя алиаса и непосредственно поле которые мы хотим получить. Результирующиеданные вернутся под ключем с именем алиаса. Так же это довольно юзабельный кейс допустимдаже если нам нужна одна сущность но наш фронтенд для рендеринга ожидает определенный ключ,и что бы не производить пост процессинг, мы можем использовать алиасы.Фрагменты это еще одна довольна удобная фича graphql. Мы можем определить набор полейи переиспользовать их. Если мы вернемся к примеру то мы видим, что мы запрашиваем два юзерано тем не менее поля у них хотим аналогичные и что бы не копипастить поля мы используем фрагмент.Помимо этого мы можем запросить дополнительные поля вместе с фрагментом.
  14. Директивы, из коробки их всего две @include и @skip, они по сути инверсивны, то естьв данном случае если инклуд тру то мы будем получать данные по этому полю, и наоборотесли же скип тру не будет получать данные по полю.Так же есть возможность писать кастомные директивы, в документации я не нашел что бы было сказано об этом, но если посмотреть на реализацию директив то это не сложно и это работает.Я предпологаю что в будущих версиях graphql набор директив из коробки увеличится.
  15. Директивы, из коробки их всего две @include и @skip, они по сути инверсивны, то естьв данном случае если инклуд тру то мы будем получать данные по этому полю, и наоборотесли же скип тру не будет получать данные по полю.Так же есть возможность писать кастомные директивы, в документации я не нашел что бы было сказано об этом, но если посмотреть на реализацию директив то это не сложно и это работает.Я предпологаю что в будущих версиях graphql набор директив из коробки увеличится.
  16. Директивы, из коробки их всего две @include и @skip, они по сути инверсивны, то естьв данном случае если инклуд тру то мы будем получать данные по этому полю, и наоборотесли же скип тру не будет получать данные по полю.Так же есть возможность писать кастомные директивы, в документации я не нашел что бы было сказано об этом, но если посмотреть на реализацию директив то это не сложно и это работает.Я предпологаю что в будущих версиях graphql набор директив из коробки увеличится.
  17. Мы можем создавать интерфесы и имплементировать их в своих типах, это добавляет дополнительную строгостьчто как по мне довольно хорошо. Давайте посмотрим на пример, мы создали интерфейс Character, и создали два типа имплементировав интерфейс Character, тип human также имеет два дополнительныхполя старшипс и тотал кредитс, а дроид поле приймари фанкшн. Теперь допустим мы хотим получить главного героя в эпизоде. Мы обьявили поле hero которое ожидает в качестве параметра эпизод и возвращает данные о главном герое. Главным героем может иметь тип либо human (человек) либо дроид.И допустим мы хотим получить данные о поле праймариФанкшн которое существует у типа дроид но отсутсвует у типа хюман.Просто обьявив это поле в явном виде мы получим ошибку. В данном случаи нам и нужно использовать инлайн фрагменты.По факту это те же фрагменты только обьявлены непосредственно в запросе, и имеют немного другое предназначение.В данном случаи мы говорим что если тип героя Droid тогда возвращаем данные по полю primaryFunction.
  18. Мы можем создавать интерфесы и имплементировать их в своих типах, это добавляет дополнительную строгостьчто как по мне довольно хорошо. Давайте посмотрим на пример, мы создали интерфейс Character, и создали два типа имплементировав интерфейс Character, тип human также имеет два дополнительныхполя старшипс и тотал кредитс, а дроид поле приймари фанкшн. Теперь допустим мы хотим получить главного героя в эпизоде. Мы обьявили поле hero которое ожидает в качестве параметра эпизод и возвращает данные о главном герое. Главным героем может иметь тип либо human (человек) либо дроид.И допустим мы хотим получить данные о поле праймариФанкшн которое существует у типа дроид но отсутсвует у типа хюман.Просто обьявив это поле в явном виде мы получим ошибку. В данном случаи нам и нужно использовать инлайн фрагменты.По факту это те же фрагменты только обьявлены непосредственно в запросе, и имеют немного другое предназначение.В данном случаи мы говорим что если тип героя Droid тогда возвращаем данные по полю primaryFunction.
  19. Мы можем создавать интерфесы и имплементировать их в своих типах, это добавляет дополнительную строгостьчто как по мне довольно хорошо. Давайте посмотрим на пример, мы создали интерфейс Character, и создали два типа имплементировав интерфейс Character, тип human также имеет два дополнительныхполя старшипс и тотал кредитс, а дроид поле приймари фанкшн. Теперь допустим мы хотим получить главного героя в эпизоде. Мы обьявили поле hero которое ожидает в качестве параметра эпизод и возвращает данные о главном герое. Главным героем может иметь тип либо human (человек) либо дроид.И допустим мы хотим получить данные о поле праймариФанкшн которое существует у типа дроид но отсутсвует у типа хюман.Просто обьявив это поле в явном виде мы получим ошибку. В данном случаи нам и нужно использовать инлайн фрагменты.По факту это те же фрагменты только обьявлены непосредственно в запросе, и имеют немного другое предназначение.В данном случаи мы говорим что если тип героя Droid тогда возвращаем данные по полю primaryFunction.
  20. Работа с юнион типами очень похожа на работу с инлайн фрагментами, разница лишь в том что юнион типы не могут иметь общих значени.
  21. С основными проблемами GraphQL вроде как все, давайте теперь разберем имплементацию более сложных выборок.Я добавил на слайд два самых популярных фреймворка для имплементацииGraphQL API, это Relay от фейсбука и apollo. практически всео чем мы будем сейчас с вами говорить уже реализовано в этих фреймворках.
  22. Первый самый явный вариант реализации пагинации это использовать2 аргумента, первый говорит нам сколько айтемов мы хотим получить,и второй это шаг смещения.
  23. Давайте рассмотрим пример. у нас есть список продуктов, такой запрос возвращает первые два элемента, затем еще два и вроде все работает. Но допустим мы получили первый набор данных для первой страниц. После этого добавился еще продукт в начало колекции. В таком случаи следуйщий запрос на получение данных по второй странице вернет уже не валидные данные, а собственно, еще раз вернет второй продукт.
  24. Либо наоборот, кто то удалит первый продукт в списке, в таком случаи наша выборка пропустит третий продукт.
  25. Теперь давайте рассмотрим второй, правильный вариант. Мы так же передаем два аргумента, first который по врежнему отвечает за количество продуктов которые мы хотим получить, и after который говорит нам что следущие айтемы нужно брать после этого значения. Значение в данном случаи это курсор.
  26. Курсор это так называемый идинтифакатор который представленный как base64 строка которая получена на основесвойств обьекта или чаще всего только на одном свойстве-идентификаторе.Мы отправляем запрос, получаем ответ вместе с курсором, который нам нужен для получения следущего набора данных. Чаще всего добавляют еще дополнительнуюинформационые свойства, к примеру nextPage, которое говорит нам есть ли данные для следущей станици или тоталс - на сколько страниц у нас есть данныхи т.д.Собственно такой подход реализации пагинации не спецефичен для graphql это обычная cursor-based пагинация.
  27. Далее давайте поговорим про сортировку и фильтрацию.
  28. Для сортировки в качестве параметра к полю мы используем обьект sort у него есть два свойства это field - поля по которому будет происходить сортировка и ордер которое отвечает за порядок сортировкис фильтрацие все происходит ровно так же, передаем аргументом обьект фильтр, у которого свойство выступает ключем по которому будет происходить фильтация.
  29. Так же давайте рассмотрим более гибкую реализацию фильтация. В данном случаи появляются дополнительные поля OR и AND, в остальном фильтрация выполняется таким же образом.
  30. Теперь давайте разберемся в каких случаях вам стоит использоватьGraphQL а в каких не стоит. И так нужно использовать в случаяхесли у вас микросервисная архитектура, в таком случаи у вас в любом случаи будет какой либо API Gateway, так почему не использовать для этого GraphQLДалее, разработке платформы/сервиса которая рассчитан на интеграцию с другими системами/приложениями.Конечно если интеграция является довольно важным аспектом вашего приложения то очень важно иметь удобный API. По моему мнениюGraphQL действительно очень удобный, и в таких случаях затраты на имплементацию отправданы.И третий случай, если комманды размещены в разных локалях, и имеются сложности в комуникации. GraphQL позволяет максимально разделить серверную и клиенскую часть и это позволяет не создаватьботл неки между командами. И на последок, ответ на вопрос, является ли GraphQL убийцей REST?Мое мнение нет не является, и у GraphQL и у REST есть свои предназначенияс которыми они отлично справляются. Все плюсы и минусы которые я озвучилявляются обобщенными и субьективными, т.к когда какое API вам использовать зависит от очень большого количества причин и нужно рассматривать конкретный случай.Всем спасибо, и на последнем сайте ссылки на полезные утилиты при разработке GraphQL API