Apollo Router Core adalah router grafik berkinerja tinggi yang dapat dikonfigurasi dan ditulis dalam Rust untuk menjalankan supergraf gabungan yang menggunakan Apollo Federation 2.
Apollo Router Core telah teruji dengan baik, melakukan benchmark secara berkala, mencakup sebagian besar fitur utama Apollo Gateway dan mampu melayani beban kerja skala produksi.
Rilis baru dan catatan rilisnya (bersama dengan catatan tentang perubahan apa pun yang dapat menyebabkan gangguan) dapat ditemukan di halaman Rilis, dan rilis terbaru selalu dapat ditemukan di halaman terbaru. CHANGELOG.md
di akar repositori ini juga berisi perubahan yang belum dirilis selain riwayat lengkap perubahan.
Saat ini, kami menerbitkan rilis baru setiap 1-2 minggu.
Ikuti tutorial mulai cepat untuk mengaktifkan dan menjalankan router.
Lihat dokumentasi untuk lebih jelasnya.
Apollo Router Core memerlukan file supergraph untuk diteruskan sebagai argumen --supergraph
dan file konfigurasi opsional. untuk dipasok. Ini terletak di direktori saat ini atau secara eksplisit ditentukan melalui flag, baik dengan jalur absolut, atau jalur relatif terhadap direktori saat ini.
Usage:
Commands:
config Configuration subcommands
help Print this message or the help of the given subcommand(s)
Options:
--log
Log level (off|error|warn|info|debug|trace) [env: APOLLO_ROUTER_LOG=] [default: info]
--hot-reload
Reload locally provided configuration and supergraph files automatically. This only affects watching of local files and does not affect supergraphs and configuration provided by GraphOS through Uplink, which is always reloaded immediately [env: APOLLO_ROUTER_HOT_RELOAD=]
-c, --config
Configuration location relative to the project directory [env: APOLLO_ROUTER_CONFIG_PATH=]
--dev
Enable development mode [env: APOLLO_ROUTER_DEV=]
-s, --supergraph
Schema location relative to the project directory [env: APOLLO_ROUTER_SUPERGRAPH_PATH=]
--apollo-uplink-endpoints
The endpoints (comma separated) polled to fetch the latest supergraph schema [env: APOLLO_UPLINK_ENDPOINTS=]
--apollo-uplink-poll-interval
The time between polls to Apollo uplink. Minimum 10s [env: APOLLO_UPLINK_POLL_INTERVAL=] [default: 10s]
--anonymous-telemetry-disabled
Disable sending anonymous usage information to Apollo [env: APOLLO_TELEMETRY_DISABLED=]
--apollo-uplink-timeout
The timeout for an http call to Apollo uplink. Defaults to 30s [env: APOLLO_UPLINK_TIMEOUT=] [default: 30s]
--listen
The listen address for the router. Overrides `supergraph.listen` in router.yaml [env: APOLLO_ROUTER_LISTEN_ADDRESS=]
-V, --version
Display version and exit
-h, --help
Print help
Apollo membuat alat sumber terbuka dan layanan komersial untuk membuat pengembangan aplikasi lebih mudah, lebih baik, dan dapat diakses oleh lebih banyak orang. Kami membantu Anda mengirim lebih cepat dengan:
Kunjungi platform pembelajaran Odyssey, tempat sempurna untuk memulai perjalanan GraphQL Anda dengan video dan tantangan kode interaktif. Bergabunglah dengan Komunitas Apollo untuk berinteraksi dan mendapatkan bantuan teknis dari komunitas GraphQL.
Pengembangan Apollo Router Core didorong oleh prinsip desain berikut yang menginformasikan keputusan dan implementasi arsitektur.
Kebenaran: router berusaha untuk menjadi implementasi GraphQL dan Federasi yang paling benar, kami peduli dalam menguji dan mendokumentasikan segala sesuatu yang tersirat dalam spesifikasi, hingga kasus kegagalan. Perilaku router harus mengikuti prinsip yang paling tidak mengejutkan bagi pengembang.
Keandalan: router adalah bagian penting dari API GraphQL, sehingga harus menjadi salah satu bagian infrastruktur terkuat. Hal ini menyiratkan stabilitas dalam perilakunya (tidak ada crash, loop tak terbatas, kebocoran, dll), ketersediaan (latensi yang dapat diprediksi, penggunaan RAM dan CPU, skalabilitas) dan observabilitas (metrik, peringatan). Hal ini harus memberikan keyakinan yang kuat kepada masyarakat infrastruktur bahwa mereka dapat mengetahui batasannya dan mengoperasikannya dengan aman.
Eksperimen yang aman: router akan mendukung semua pekerjaan di masa depan seputar Federasi, sehingga harus memungkinkan ide dan eksplorasi baru tanpa mengganggu fitur yang sudah ada. Proyek ini masih berjalan, kita tidak bisa membiarkannya terkristalisasi terlalu dini, dengan tetap mengikuti prinsip kebenaran dan keandalan.
Kegunaan: router harus mudah dioperasikan. Lebih memilih ekstensibilitas daripada opsi konfigurasi, dan memastikan bahwa pengguna memiliki informasi yang cukup untuk membantu diri mereka sendiri ketika terjadi kesalahan. Misalnya:
Panduan prinsip berikut:
Testabilitas unit: semua kode baru harus dapat diuji unit, atau mempunyai alasan bagus mengapa tidak dapat diuji. Ini mungkin berarti menghabiskan sedikit waktu ekstra untuk memastikan kode dapat diuji secara terpisah. Jangan hanya mengandalkan pengujian integrasi.
Rangkaian pengujian integrasi: kami akan berintegrasi dengan rangkaian pengujian gateway dan membantu meningkatkannya untuk menguji semua aspek spesifikasi. Secara khusus, rangkaian pengujian ini akan memverifikasi kasus kegagalan seperti kueri yang tidak valid atau masalah jaringan. Tes integrasi harus tahan banting, dan tidak boleh gagal jika pelaksanaan tes lambat atau kondisi balapan.
Pengukuran dan pembelajaran: keandalan harus diuji dan diukur, melalui benchmark, pembuatan profil, dan melalui eksplorasi batas-batas router. Kami ingin mempelajari cara mengoperasikan router dan berapa titik nominalnya. Untuk itu, router harus diinstrumentasikan secara detail, memungkinkan kita mengukur pengaruh perubahan kode terhadapnya. Kami secara khusus berhati-hati dalam mengukur overhead fitur-fitur baru, untuk meminimalkan latensi dan penggunaan sumber daya.
Ekstensibilitas: dengan mengizinkan ekstensi dan arahan untuk mengubah perilaku router, kita dapat menjalankan eksperimen dan menguji fitur baru tanpa memengaruhi kueri atau titik akhir tertentu. Selain itu, eksperimen ini mudah untuk dinonaktifkan saat runtime (fitur flag, canary, dll).
Apollo Grafik, Inc.
Kode sumber dalam repositori ini dilindungi oleh Elastic License 2.0. Default di seluruh repositori adalah lisensi di bawah Elastic License 2.0, kecuali header file atau file lisensi di subdirektori menentukan lisensi lain. Lihat LISENSI untuk teks lisensi lengkap.