- PVSM.RU - https://www.pvsm.ru -

Представляем Tartiflette: реализацию GraphQL с открытым исходным кодом для Python 3.6+

Друзья, в преддверии майских праздников мы решили не заваливать вас сложными техническими статьями, поэтому нашли довольно интересный, а главное, легкий в прочтении материал, переводом которого с радостью делимся с вами. Данный материал мы хотим приурочить к запуску курса «Web-разработчик на Python» [1].

С оригиналом можно ознакомиться тут [2].

Представляем Tartiflette: реализацию GraphQL с открытым исходным кодом для Python 3.6+ - 1

Приобретение Vivendi dailymotion [3] три года назад оказалось поворотным моментов для нашей организации. Это позволило переосмыслить вектор нашей работы, переосмыслить саму нашу работу от начала до конца. Мы использовали представившуюся возможность для оценки dailymotion в целом, переосмысления нашей инфраструктуры и, что более важно, архитектуры наших продуктов.

В конце концов, проведенный самоанализ подтвердил то, что мы уже знали: мы хотели территориально распространять нашу платформу и разрабатывать API-интерфейсы, мобильные и ТВ-приложения. Это ознаменовало отказ от нынешней монолитной структуры и принятие API-ориентированного подхода. В этой статье описан путь, по которому мы шли.

Критерии и проверки концепции

Запуск проекта мы начали с определения критериев API, которые в итоге сузили до четырех пунктов:

  • Обеспечение хорошего DX (developer experience), простого использования и реализации;
  • Культивация основательного и растущего комьюнити, такого, которое позволило бы агрегировать и использовать широко распространенные технологии;
  • Поведения сходное со шлюзом с точки зрения архитектуры программного обеспечения, направленное на упрощение преобразования нашей системной интеграции из монолита в SOA (сервис-ориентированную архитектуру);
  • Возможность реализовывать инструменты управления API, а именно управление интерфейсом API, документацию и доступ к данным.

Дальше мы выбрали несколько моделей API и проверили несколько концепций, чтобы понять их целесообразность:

  • Rest API с Swagger
  • GraphQL API с Graphene
  • API с Falcor

Представляем Tartiflette: реализацию GraphQL с открытым исходным кодом для Python 3.6+ - 2

После тщательного тестирования мы выяснили, что GraphQL [4] и его реализации Graphene наилучшим образом соответствовали нашим критериями в сравнении с другими моделями. Это позволило нашим front-end разработчикам легче использовать наш API, а заодно и упростить его использование в клиентских приложениях (например, React JS и Apollo Client). В нашей архитектуре GraphQL также оказался проще и эффективнее в качестве шлюза паттернов. В итоге мы окончательно решили двигаться дальше с GraphQL и Graphene.

Путь в продакшн

В апреле 2017 года, после интенсивной полугодовой разработки, мы вышли в продакшн с нашим API. К лету мы пересадили все продукты dailymotion (веб, мобильные и ТВ) на наш API GraphQL.

Представляем Tartiflette: реализацию GraphQL с открытым исходным кодом для Python 3.6+ - 3

Когда мы выбрали GraphQL три года назад, он еще находился в бета-версии и не достиг той популярности, которую имеет на сегодняшний день. Мы были первыми крупными игроками на этой арене и это сделало нашу внутреннюю реконструкцию еще приятнее.

Рождение Tartiflette

В первые месяцы 2018 года, после более чем полугода использования Graphene, мы решили шагнуть дальше и написать свой собственный движок GraphQL. Это позволило нам реализовать некоторые требования, которые не выполнялись Graphene. Мы разработали критерии для нашего собственного движка. Он должен:

  • Обеспечивать лучший DX, ориентированный на мышление [5] Python разработчиков;
  • Использовать SDL (Schema Definition Language);
  • Использовать asyncio [6] в качестве самостоятельного исполняющего движка;

После почти года разработки и многих недель тестирования нашей инфраструктуры (в среднем обрабатывалось более 100 миллионов вызовов в день) мы с гордостью предлагаем сообществу GraphQL наш собственный движок с открытым исходным кодом Tartiflette.

ДНК Tartiflette

Tartiflette-это реализация GraphQL Server, построенная на Python 3.6+
Схема GraphQL описывается при помощи нового языка описания SDL (Schema Definition Language) [7];
Производительность является ключевым элементом нашей работы и это отражено в Tartiflette;
Построен с учетом Zen of Python [8]. Не усложнен чрезмерно.

Hello world на Tartiflette

Представляем Tartiflette: реализацию GraphQL с открытым исходным кодом для Python 3.6+ - 4

import asyncio

from tartiflette import Engine, Resolver

@Resolver("Query.hello")
async def resolver_hello(parent, args, ctx, info):
    return "hello " + args["name"]


async def run():
    ttftt = Engine("""
    type Query {
        hello(name: String): String
    }
    """)

    result = await ttftt.execute(
        query='query { hello(name: "Chuck") }'
    )

    print(result)
    # {'data': {'hello': 'hello Chuck'}}

if __name__ == "__main__":
    loop = asyncio.get_event_loop()
    loop.run_until_complete(run())

О новом функционале вы можете узнать в руководстве на tartiflette.io [9].

Что будет дальше с Tartiflette?

Открытый исходный код Tartiflette – это только первый шаг. Вот несколько идей и планов на будущее для развития Tartiflette:

  • «Полировка» документации для пользователей и комьюнити;
  • Предоставление большего количества примеров и расширения вариантов использования, чтобы воодушевить вас на эксперименты с возможностями Tartiflette;
  • Повышение производительности, главным образом на уровне исполняющего движка.

А еще нам нужны вы!

Представляем Tartiflette: реализацию GraphQL с открытым исходным кодом для Python 3.6+ - 5

Вы можете использовать наш проект практически для любых целей и помочь нам в развитии Tartiflette! Пожалуйста, проверяйте его на прочность, не стесняйтесь искать ошибки или противоречия в коде и поддерживайте обратную связь для улучшения продукта. Мы действительно считаем, что Tartiflette станет лучше при тесном сотрудничестве с сообществом.

Как внести свой вклад в проект?

Tartiflette на Github [10];
Читайте документацию на tartiflette.io [11];
Отправляйте отзывы и предложения в Slack [12];
Присоединяйтесь к сообществу в Twitter [13].

Автор: MaxRokatansky

Источник [14]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/python/315785

Ссылки в тексте:

[1] «Web-разработчик на Python»: https://otus.pw/rkJs/

[2] тут: https://medium.com/dailymotion/tartiflette-graphql-api-engine-python-open-source-a200c5bbc477

[3] Vivendi dailymotion: https://www.dailymotion.com/fr

[4] GraphQL: https://graphql.org/

[5] мышление: http://www.braintools.ru

[6] Использовать asyncio: https://docs.python.org/3/library/asyncio.html

[7] SDL (Schema Definition Language): https://github.com/facebook/graphql/blob/master/spec/Section%203%20--%20Type%20System.md

[8] Zen of Python: https://www.python.org/dev/peps/pep-0020/#id3

[9] tartiflette.io: https://tartiflette.io/docs/tutorial/getting-started

[10] Tartiflette на Github: https://github.com/dailymotion/tartiflette

[11] tartiflette.io: https://tartiflette.io/

[12] Slack: https://join.slack.com/t/tartiflette-io/shared_invite/enQtNTcxMjI5NjQwMzg5LWQ4NzdlYWZjMjY0MjYzY2QxYTFkZTU2YWYxYTIwMTFkZWZkMDI5Y2FiYTI4NGIxZWM5YmY1ZmI5ZDBmMTUyMzc

[13] Twitter: https://twitter.com/dailymotionEng

[14] Источник: https://habr.com/ru/post/449526/?utm_campaign=449526