SlideShare a Scribd company logo
GraphQL schema
design
Могила Борис
Agenda
1 ПРАВИЛА ІМЕНУВАННЯ
6
2
3
4
5
ПРАВИЛА ТИПІВ
ПРАВИЛА ПОЛІВ
ПРАВИЛА АРГУМЕНТІВ
ПРАВИЛА СПИСКІВ
ПРАВИЛА МУТАЦІЙ
2
7 ПРАВИЛА ЗВ’ЯЗКІВ
8 ІНШІ ПРАВИЛА
Що таке GraphQL?
Навіщо GraphQL?
Навіщо GraphQL?
Варіанти реалізації GraphQL схеми
Правила іменування
Використовуйте camelCase
для іменування полів і аргументів
Правила іменування
Використовуйте
UpperCamelCase
для іменування GraphQL-типів
Правила іменування
Використовуйте
CAPITALIZED_WITH_UNDERSCORES
для іменування ENUM-типів
Правила типів
Використовуйте кастомні скалярні типи
для визначення
семантичного значення
Правила типів
Використовуйте Enum
для полів з визначеним
набором значень
Правила полів
Використовуйте зрозумілі імена,
а не те як вони реалізовані
Правила полів
Робіть поля NonNull,
якщо дані повертаються завжди
Правила полів
Досягайте максимального опису
обов’язкових полів
Правила полів
VS
Правила аргументів
Групуйте зв’язані
аргументи в input-типи
Правила аргументів
Використовуйте скалярні типи
для аргументів
Правила аргументів
Позначайте обов’язкові
аргументи
Правила списків
Для фільтрації використовуйте
input-тип (filter)
Правила списків
Для сортування використовуйте
Enum input-тип (sort)
Правила списків
Пагінація
Правила списків
Правила списків
Використовуйте
Relay Cursor Connections
Specification
для безкінечних списків
Правила мутацій
Використовуйте Namespace-
типи
для групування мутацій в рамках
одного ресурса
Створюйте невеликі мутації для
різних логічних операцій
Правила мутацій
Розглядайте можливість
виконання мутацій відразу над
декількома елементами
Правила мутацій
Використовуйте чіткі аргументи
для мутацій
Правила мутацій
Вкладайте всі змінні для
мутації в один input аргумент
Правила мутацій
Мутація повинна повертати
свій унікальний Payload-тип
Правила мутацій
Правила зв’язків
GraphQL-схема
повинна бути “волосатою”
Правила зв’язків
Інші правила
Для документації використовуйте
markdown
Підтримка складної схеми
● використовуйте code-first підхід
● при потребі потрібно використати
apollo-federation
Корисні посилання
• GraphQL - schema-first vs code-first
• Schema Design by Pavel Chertorogov
• Shopify: Designing a GraphQL API
• Designing GraphQL Mutations by Caleb Meredith
• GraphQL best practices for GraphQL schema
design by David Mráz
• GraphQL Best Practices Resources and Design
Patterns
• GraphQL Summit 2019
35
site : https://boryamogila.github.io/
facebook: Boris Mohyla
twitter: Borya Mogila
email: bora.mog@gmail.com
Контактні дані
THANK YOU!
36

More Related Content

More from OdessaJS Conf (20)

PDF
'How i came up with my talk' by Yurii Artiukh. OdessaJS'2021
OdessaJS Conf
 
PDF
"Is there life in react without redux" by Babich Sergiy. OdessaJS'2021
OdessaJS Conf
 
PPTX
Олексій Павленко. CONTRACT PROTECTION ON THE FRONTEND SIDE: HOW TO ORGANIZE R...
OdessaJS Conf
 
PPTX
Андрій Троян. Розробка мікросервісів з NestJS. OdessaJS'2021
OdessaJS Conf
 
PPTX
Олексій Гончар "Використання Electron в розробці корпоративної відео-мессeндж...
OdessaJS Conf
 
PDF
Максим Климишин "Що такого особливого у пропозиції вартості шаблону Micro Fro...
OdessaJS Conf
 
PDF
Павло Галушко. GOOD CODE MYTHS. OdessaJS'2021
OdessaJS Conf
 
PPTX
"NODEJS & GRAPHQL COOKBOOK. LET’S TALK ABOUT MICRO-SERVICES" by Антон Чередні...
OdessaJS Conf
 
PPTX
'BUILDING ANGULAR APPS WITH NX' by Anastasia Necheporenko
OdessaJS Conf
 
PPTX
'IS THERE JAVASCRIPT ON SWAGGER PLUGINS?' by Dmytro Gusev
OdessaJS Conf
 
PPTX
'ETHEREUM SMART CONTRACTS ON JS' by Yaroslav Dvorovenko
OdessaJS Conf
 
PPTX
'GOLANG USAGE IN DEVELOPMENT OF NODE.JS APPLICATIONS (NODE.JS: IN GO WE TRUST...
OdessaJS Conf
 
PPTX
'MICROFRONTENDS WITH REACT' by Liliia Karpenko
OdessaJS Conf
 
PDF
'Web performance metrics' BY ROMAN SAVITSKYI at OdessaJS'2020
OdessaJS Conf
 
PDF
'STORY OF ANOTHER ANIMATION' by YURII ARTYUKH at OdessaJS'2020
OdessaJS Conf
 
PDF
'JavaScript was invented in Odessa' by DMITRIY GUSEV at OdessaJS'2020
OdessaJS Conf
 
PDF
'Why svelte' by BORYS MOHYLA at OdessaJS'2020
OdessaJS Conf
 
PDF
'Effective node.js development' by Viktor Turskyi at OdessaJS'2020
OdessaJS Conf
 
PDF
'Tensorflow.js in real life' by Pavlo Galushko at OdessaJS'2020
OdessaJS Conf
 
PDF
'React+d3=LOVE' by Illia Olenchenko at OdessaJS'2020
OdessaJS Conf
 
'How i came up with my talk' by Yurii Artiukh. OdessaJS'2021
OdessaJS Conf
 
"Is there life in react without redux" by Babich Sergiy. OdessaJS'2021
OdessaJS Conf
 
Олексій Павленко. CONTRACT PROTECTION ON THE FRONTEND SIDE: HOW TO ORGANIZE R...
OdessaJS Conf
 
Андрій Троян. Розробка мікросервісів з NestJS. OdessaJS'2021
OdessaJS Conf
 
Олексій Гончар "Використання Electron в розробці корпоративної відео-мессeндж...
OdessaJS Conf
 
Максим Климишин "Що такого особливого у пропозиції вартості шаблону Micro Fro...
OdessaJS Conf
 
Павло Галушко. GOOD CODE MYTHS. OdessaJS'2021
OdessaJS Conf
 
"NODEJS & GRAPHQL COOKBOOK. LET’S TALK ABOUT MICRO-SERVICES" by Антон Чередні...
OdessaJS Conf
 
'BUILDING ANGULAR APPS WITH NX' by Anastasia Necheporenko
OdessaJS Conf
 
'IS THERE JAVASCRIPT ON SWAGGER PLUGINS?' by Dmytro Gusev
OdessaJS Conf
 
'ETHEREUM SMART CONTRACTS ON JS' by Yaroslav Dvorovenko
OdessaJS Conf
 
'GOLANG USAGE IN DEVELOPMENT OF NODE.JS APPLICATIONS (NODE.JS: IN GO WE TRUST...
OdessaJS Conf
 
'MICROFRONTENDS WITH REACT' by Liliia Karpenko
OdessaJS Conf
 
'Web performance metrics' BY ROMAN SAVITSKYI at OdessaJS'2020
OdessaJS Conf
 
'STORY OF ANOTHER ANIMATION' by YURII ARTYUKH at OdessaJS'2020
OdessaJS Conf
 
'JavaScript was invented in Odessa' by DMITRIY GUSEV at OdessaJS'2020
OdessaJS Conf
 
'Why svelte' by BORYS MOHYLA at OdessaJS'2020
OdessaJS Conf
 
'Effective node.js development' by Viktor Turskyi at OdessaJS'2020
OdessaJS Conf
 
'Tensorflow.js in real life' by Pavlo Galushko at OdessaJS'2020
OdessaJS Conf
 
'React+d3=LOVE' by Illia Olenchenko at OdessaJS'2020
OdessaJS Conf
 

'GraphQL Schema Design' by Borys Mohyla. OdessaJS'2021