Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

JS Fest 2018. Владимир Заец. GraphQL - удобное API или хайп?

151 views

Published on

- Сравнение GraphQL API с REST API, действительно ли GraphQL "убийца" REST?
- Возможные проблемы, сложности и решения при имплементации GraphQL API
- Плюсы и минусы использования GraphQL API
- А вам действительно нужен GraphQL API, стоят ли затраты полученного результата?

Published in: Education
  • Be the first to comment

  • Be the first to like this

JS Fest 2018. Владимир Заец. GraphQL - удобное API или хайп?

  1. 1. From Back-end to Front-end Kiev 2018 GraphQL - удобное API или хайп? Vladimir Zaets
  2. 2. Kiev 2018GraphQL– удобное API или хайп? VS
  3. 3. Kiev 2018GraphQL– удобное API или хайп? Возможность возвращать разные форматы данных Только JSON Разные форматы данных. XML, JSON
  4. 4. Kiev 2018GraphQL– удобное API или хайп? YES NO Объем и структура данных жестко определенна на сервере Возможность формировать структуру и объем данных на клиенте
  5. 5. Kiev 2018GraphQL– удобное API или хайп? C R U DR QUERY MUTATION Для операции «Читать» Для операций «Создать», «Обновить», «Удалить» GET POST PUT DELETE
  6. 6. Kiev 2018GraphQL– удобное API или хайп? Конструкции и возможности языка
  7. 7. Kiev 2018GraphQL– удобное API или хайп? Variables and Parameters Декларация переменной. Задается в JSON формате. Передаем переменную “key” в качестве аргумента указывая тип данной переменной, в данном случаи “String ”.
  8. 8. Kiev 2018GraphQL– удобное API или хайп? Variables and Parameters Значение по умолчанию
  9. 9. Kiev 2018GraphQL– удобное API или хайп? Aliases and Fragments
  10. 10. Kiev 2018GraphQL– удобное API или хайп? Aliases and Fragments Aliases
  11. 11. Kiev 2018GraphQL– удобное API или хайп? Aliases and Fragments Aliases
  12. 12. Kiev 2018GraphQL– удобное API или хайп? Aliases and Fragments Фрагменты представляют собой набор полей которые которые можно переиспользовать
  13. 13. Kiev 2018GraphQL– удобное API или хайп? Directives
  14. 14. Kiev 2018GraphQL– удобное API или хайп? Date in database: 1522269610866 (timestamp) @dateFormat(format: “DD-MM-YYYY”) Query result 28.03.2018 @upperCase @hasScope(scope: [“read:rating”]) @isAuthenticated @hasRole(role:[“admin:”]) @log @price(locale:”en_US”)
  15. 15. Kiev 2018GraphQL– удобное API или хайп? Directives Directives
  16. 16. Kiev 2018GraphQL– удобное API или хайп? DirectiveLocation. QUERY DirectiveLocation.INLINE_FRAGMENT DirectiveLocation.FRAGMENT_SPREAD
  17. 17. Kiev 2018GraphQL– удобное API или хайп? https://github.com/lirown/graphql-custom-directive
  18. 18. Kiev 2018GraphQL– удобное API или хайп? GraphQL Interfaces Interface declaration Interface implementation
  19. 19. Kiev 2018GraphQL– удобное API или хайп? GraphQL Interfaces Request Response
  20. 20. Kiev 2018GraphQL– удобное API или хайп? GraphQL Interfaces Request Response
  21. 21. Kiev 2018GraphQL– удобное API или хайп? Union types Request Response
  22. 22. Kiev 2018GraphQL– удобное API или хайп? Проблемы GraphQL
  23. 23. Kiev 2018GraphQL– удобное API или хайп? • Дублирование схемы • Несоответствие данных • N+1 • Кэшированием • Загрузка файлов • Версионирование
  24. 24. Kiev 2018GraphQL– удобное API или хайп? Дублирование схемы SCHEMA VS SCHEMA SCHEMA SCHEMA Etc.
  25. 25. Kiev 2018GraphQL– удобное API или хайп?
  26. 26. Kiev 2018GraphQL– удобное API или хайп? • Конвертирует Postgres схему в GraphQL • Имеет watch режим, позволяет следить за изменением в Postgres схеме • Позволяет считывать комментарии к таблицам postgres и преобразовывать в поле description в GraphqQL
  27. 27. Kiev 2018GraphQL– удобное API или хайп? Генерирует CRUD для вашего типа. Использует NDF формат для импорта и экспорта в БД
  28. 28. Kiev 2018GraphQL– удобное API или хайп? Несоответствие данных на клиенте и сервере
  29. 29. Kiev 2018GraphQL– удобное API или хайп? На клиенте На сервере
  30. 30. Kiev 2018GraphQL– удобное API или хайп? Запрос посредством функции GraphQL
  31. 31. Kiev 2018GraphQL– удобное API или хайп? Используя функцию runQuery и queryOne фреймворка VulcanJS
  32. 32. Kiev 2018GraphQL– удобное API или хайп? Проблема N+1 / Избыточные обращения к базе данных
  33. 33. Kiev 2018GraphQL– удобное API или хайп? N+1
  34. 34. Kiev 2018GraphQL– удобное API или хайп? Query Query Query DB
  35. 35. Kiev 2018GraphQL– удобное API или хайп? DB Queue Query item Query item Query item Query item Batching Single query Batching использует временные интервалы. Batching работает на основе «тиков» - проверяя очередь на наличие ожидающих запросов каждые N миллисекунд. Если в очереди есть несколько запросов, они объединяются в один.
  36. 36. Kiev 2018GraphQL– удобное API или хайп? DataLoader https://github.com/facebook/dataloader
  37. 37. Kiev 2018GraphQL– удобное API или хайп? Низкая производительность / кэширование
  38. 38. Network Caching Kiev 2018GraphQL– удобное API или хайп?
  39. 39. Kiev 2018GraphQL– удобное API или хайп? Server Caching: Кэшируем результаты запросов в БД
  40. 40. Kiev 2018GraphQL– удобное API или хайп? Client Caching: Кэшируем граф как список Запись ответа в кэш Запрос Ответ
  41. 41. Kiev 2018GraphQL– удобное API или хайп? Загрузка файлов
  42. 42. Kiev 2018GraphQL– удобное API или хайп? • Загружать с помощью других API и передавать ссылку на загруженный файл в мутацию GraphQL. • Использовать multipart/form-data. Передавая данные в контексте резолвера.
  43. 43. Kiev 2018GraphQL– удобное API или хайп? Библиотеки для загрузки файлов • NPM graphql-server-express-upload • Apollo apollo-upload-client
  44. 44. Kiev 2018GraphQL– удобное API или хайп? Версионирование GraphQL API
  45. 45. Kiev 2018GraphQL– удобное API или хайп? http://domain/api/v2.2/
  46. 46. Kiev 2018GraphQL– удобное API или хайп? GraphQL Security
  47. 47. Kiev 2018GraphQL– удобное API или хайп? • Неограниченный уровень вложенности • Запросы высокой сложности • Слишком большое количество запросов
  48. 48. Kiev 2018GraphQL– удобное API или хайп? Максимальная глубина запроса
  49. 49. Kiev 2018GraphQL– удобное API или хайп? Максимальная глубина запроса
  50. 50. Kiev 2018GraphQL– удобное API или хайп? Максимальная глубина запроса Maximum Query Depth = 3 Depth: 0 Depth: 1 Depth: 2 Depth: 3
  51. 51. Kiev 2018GraphQL– удобное API или хайп?
  52. 52. Kiev 2018GraphQL– удобное API или хайп? Сложность запросов
  53. 53. Kiev 2018GraphQL– удобное API или хайп? Complexity: 1 Complexity: 5 Complexity: 1 Query Complexity = 7 Max Query Complexity = 100
  54. 54. Kiev 2018GraphQL– удобное API или хайп?
  55. 55. Kiev 2018GraphQL– удобное API или хайп? Throttling
  56. 56. Kiev 2018GraphQL– удобное API или хайп? Throttling на основе: Времени выполнения Сложности запросов
  57. 57. Throttling на основе времени выполнения Kiev 2018GraphQL– удобное API или хайп? Время выполнения: 100 Ms Максимальное время выполнения сервером (Bucket size) = 1000ms
  58. 58. Kiev 2018GraphQL– удобное API или хайп? Throttling на основе сложности запроса. Complexity: 1 Complexity: 1 Complexity: 1 Query Complexity = 3 Максимальная сложность: 15
  59. 59. Kiev 2018GraphQL– удобное API или хайп? Таймаут
  60. 60. Kiev 2018GraphQL– удобное API или хайп? GitHub API example
  61. 61. Kiev 2018GraphQL– удобное API или хайп? Ограничение в получении данных с коллекции
  62. 62. Kiev 2018GraphQL– удобное API или хайп? • Limit – максимальное количество баллов в час • Cost – количество баллов текущего запроса • Remaining – остаточное количество баллов • ResetAt – время до сброса состояния
  63. 63. Kiev 2018GraphQL– удобное API или хайп? Цена запроса: 6
  64. 64. Kiev 2018GraphQL– удобное API или хайп? 1 30 600 631 / 100 = 6,…..
  65. 65. Kiev 2018GraphQL– удобное API или хайп?
  66. 66. Kiev 2018GraphQL– удобное API или хайп? Pagination
  67. 67. Kiev 2018GraphQL– удобное API или хайп? Сursor based pagination PRODUCT 1 PRODUCT 2 PRODUCT 3 PRODUCT 4 PRODUCT 5 PRODUCT 6 PRODUCT 7 У PRODUCT2 cursor: W29iamV=
  68. 68. Kiev 2018GraphQL– удобное API или хайп? Sorting and filtering
  69. 69. Kiev 2018GraphQL– удобное API или хайп? Дополнительный параметр sort у которого поля: ”field” – поле по которому будет выполнятся сортировка. ”order”- порядок сортировки. Фильтрация выполняется по sku продукта.
  70. 70. Kiev 2018GraphQL– удобное API или хайп? Гибкая фильтрация с применением OR и AND
  71. 71. Kiev 2018GraphQL– удобное API или хайп? В каких случаях стоит использовать GraphQL? • При использовании микросервисной архитектуры. • При разработке простого API. • При разработке платформы/сервиса которая рассчитан на интеграцию с другими системами/приложениями. • Если команды размещены в разных локалях. (сложность коммуникации) • При использовании только одного ресурса предоставления данных. • При условии что вы разрабатываете финальный продукт не рассчитанный на дальнейшее развитие в ближайшем времени. (Интернет-магазины, промо сайты, т.д)
  72. 72. Kiev 2018GraphQL– удобное 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/
  73. 73. Kiev 2018GraphQL– удобное API или хайп? 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

×