Rust用のGraphQLサーバーライブラリ
GraphQL は、モバイルおよび Web アプリケーションのフロントエンドにサービスを提供することを目的として Facebook によって開発されたデータ クエリ言語です。
Juniper により、タイプセーフで非常に高速な GraphQL サーバーを Rust で作成できるようになります。また、Rust で可能な限り便利に GraphQL スキーマの宣言と解決を行えるように努めています。
Juniper には Web サーバーが含まれていません。代わりに、既存のサーバーとの統合を簡単にするためのビルディング ブロックが提供されています。オプションで、デバッグを容易にする組み込みの Graphiql および GraphQL Playground を含む、Actix、Hyper、Rocket、および Warp フレームワークの事前構築済み統合を提供します。
この本は、master ブランチおよび 0.11.1 以降に公開された古いバージョンでも利用できます。書籍索引を参照してください。
始めるのに最適な場所は、Juniper Book です。このブックには、Juniper のすべての機能を網羅した、豊富な例を含むガイドが含まれています。 (非常に未完成)
すぐに始めて Juniper の感触をつかむには、「クイックスタート」セクションを確認してください。
マクロ、タイプ、および Juniper API に関する具体的な情報については、API リファレンスを参照するのが最適です。
また、Star Wars スキーマをチェックして、特性とインターフェイスによるポリモーフィズムを含む複雑な例を確認することもできます。 Web フレームワーク統合の例については、actix、axum、hyper、rocket、および warp のサンプル フォルダーを参照してください。
ジュニパーは、仕様 (2021 年 10 月) に従って、インターフェイス、ユニオン、スキーマ イントロスペクション、検証を含む完全な GraphQL クエリ言語をサポートしています。 GraphQL スキーマ言語でスキーマを出力することもできます。
他の言語の他の GraphQL ライブラリの例外として、Juniper はデフォルトで非 null 型を構築します。 Vec<Episode>
型のフィールドは[Episode!]!
。たとえば[Episode]
に対応する Rust タイプはOption<Vec<Option<Episode>>>
になります。
Juniper はシリアル化形式とネットワーク トランスポートに依存しません。
Juniper は、 execute()
とexecute_sync()
それぞれ使用した非同期実行と同期実行の両方をサポートします。非同期実行はランタイムに依存しません。
Juniper は、コードファーストのアプローチに従って GraphQL スキーマを定義します。代わりにスキーマ優先のアプローチを使用したい場合は、スキーマ ファイルからコードを生成するための juniper-from-schema を検討してください。
Juniper は、スキーマの構築を簡単にするために、いくつかの非常に一般的な Rust クレートとの自動統合を備えています。これらのクレートのタイプは、スキーマで自動的に使用できるようになります。
Juniper はまだ 1.0 に達していないため、API が多少不安定になることが予想されます。