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 validasiKami 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 ProduksiPada 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 TartiflettePada 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 TartifletteTartiflette 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)
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 .