Memperkenalkan Tartiflette: Implementasi Open Source GraphQL untuk Python 3.6+

Teman-teman, menjelang liburan Mei, kami memutuskan untuk tidak membanjiri Anda dengan artikel teknis yang rumit, jadi kami menemukan materi yang cukup menarik, dan yang paling penting, mudah dibaca, terjemahan yang dengan senang hati kami bagikan kepada Anda. Materi ini kami ingin bertepatan dengan peluncuran kursus "Web-developer in Python . "

Yang asli dapat ditemukan di sini .



Akuisisi Vivendi dailymotion tiga tahun lalu adalah titik balik bagi organisasi kami. Ini memungkinkan kami untuk memikirkan kembali vektor pekerjaan kami, untuk memikirkan kembali pekerjaan kami sendiri dari awal hingga akhir. Kami menggunakan kesempatan untuk mengevaluasi dailymotion secara umum, untuk memikirkan kembali infrastruktur kami dan, yang lebih penting, arsitektur produk kami.

Pada akhirnya, analisis diri mengkonfirmasi apa yang sudah kami ketahui: kami ingin mendistribusikan platform kami secara geografis dan mengembangkan API , aplikasi seluler dan TV. Ini menandai ditinggalkannya struktur monolitik saat ini dan adopsi pendekatan berorientasi API. Artikel ini menjelaskan jalur yang kami ikuti.

Kriteria dan konsep validasi

Kami memulai proyek dengan mendefinisikan kriteria API, yang akhirnya menyempit menjadi empat poin:

  • Memberikan DX (pengalaman pengembang) yang baik, mudah digunakan dan implementasi;
  • Penumbuhan komunitas yang solid dan berkembang , yang memungkinkan agregasi dan penggunaan teknologi luas;
  • Perilaku yang mirip dengan gateway dalam hal arsitektur perangkat lunak , yang ditujukan untuk menyederhanakan transformasi integrasi sistem kami dari monolit ke SOA (arsitektur berorientasi layanan);
  • Kemampuan untuk mengimplementasikan alat manajemen API, yaitu manajemen API, dokumentasi dan akses data.

Selanjutnya, kami memilih beberapa model API dan menguji beberapa konsep untuk memahami kesesuaiannya:

  • Rest API dengan Swagger
  • GraphQL API dengan Graphene
  • API dengan Falcor



Setelah pengujian yang ketat, kami menemukan bahwa GraphQL dan implementasi Graphene-nya memenuhi kriteria terbaik kami jika dibandingkan dengan model lain. Ini memungkinkan pengembang front-end kami untuk lebih mudah menggunakan API kami, dan pada saat yang sama menyederhanakan penggunaannya dalam aplikasi klien (misalnya, Bereaksi JS dan Apollo Client). Dalam arsitektur kami, GraphQL juga lebih sederhana dan lebih efisien sebagai gateway pola. Pada akhirnya, kami akhirnya memutuskan untuk melanjutkan dengan GraphQL dan Graphene.

Cara Menuju Produksi

Pada bulan April 2017, setelah pengembangan intensif selama enam bulan, kami mulai berproduksi dengan API kami. Pada musim panas, kami mengalihkan semua produk dailymotion (web, seluler, dan TV) ke GraphQL API kami.



Ketika kami memilih GraphQL tiga tahun lalu, itu masih dalam versi beta dan tidak mencapai popularitas yang dimilikinya saat ini. Kami adalah pemain utama pertama di arena ini dan ini membuat rekonstruksi internal kami semakin menyenangkan.

Kelahiran Tartiflette

Pada bulan-bulan pertama tahun 2018, setelah lebih dari enam bulan menggunakan Graphene, kami memutuskan untuk mengambil langkah lebih jauh dan menulis mesin GraphQL kami sendiri. Ini memungkinkan kami untuk menerapkan beberapa persyaratan yang tidak dipenuhi oleh Graphene. Kami telah mengembangkan kriteria untuk mesin kami sendiri. Dia harus:

  • Memberikan DX pemikiran terbaik untuk pengembang Python;
  • Gunakan SDL (Bahasa Definisi Skema);
  • Gunakan asyncio sebagai mesin pengeksekusi mandiri;

Setelah hampir satu tahun pengembangan dan beberapa minggu menguji infrastruktur kami (rata-rata lebih dari 100 juta panggilan diproses per hari), kami bangga menawarkan komunitas GraphQL mesin open-source Tartiflette milik kami sendiri.

DNA Tartiflette

Tartiflette adalah implementasi GraphQL Server yang dibangun di atas Python 3.6+
Skema GraphQL dijelaskan menggunakan Bahasa Definisi Skema (SDL) baru ;
Kinerja adalah elemen kunci dari pekerjaan kami dan ini tercermin dalam Tartiflette ;
Dibangun dengan Zen Python dalam pikiran. Tidak terlalu rumit.

Halo dunia di tartiflette



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()) 

Anda dapat mencari tahu tentang fungsionalitas baru dalam manual di tartiflette.io .

Apa yang akan terjadi selanjutnya dengan Tartiflette?

Tartiflette open source hanyalah langkah pertama. Berikut adalah beberapa ide dan rencana untuk masa depan untuk pengembangan Tartiflette:

  • Dokumentasi "pemolesan" untuk pengguna dan komunitas;
  • Memberikan lebih banyak contoh dan memperluas use case untuk menginspirasi Anda untuk bereksperimen dengan kemampuan Tartiflette ;
  • Peningkatan produktivitas , terutama di tingkat mesin eksekusi.

Dan kami juga membutuhkan Anda!



Anda dapat menggunakan proyek kami untuk hampir semua tujuan dan membantu kami dalam pengembangan Tartiflette! Silakan periksa daya tahannya, jangan ragu untuk mencari kesalahan atau ketidakkonsistenan dalam kode dan menjaga umpan balik untuk meningkatkan produk. Kami benar-benar percaya bahwa Tartiflette akan menjadi lebih baik dengan kolaborasi erat dengan komunitas.

Bagaimana cara berkontribusi pada proyek?

Tartiflette di Github ;
Baca dokumentasi di tartiflette.io ;
Kirim umpan balik dan saran ke Slack ;
Bergabunglah dengan komunitas di Twitter .

Source: https://habr.com/ru/post/id449526/


All Articles