GraphQL-Serverbibliothek für Rust
GraphQL ist eine von Facebook entwickelte Datenabfragesprache, die Frontends für Mobil- und Webanwendungen bedienen soll.
Juniper ermöglicht es, typsichere und unglaublich schnelle GraphQL-Server in Rust zu schreiben. Wir versuchen auch, die Deklaration und Auflösung von GraphQL-Schemas so bequem zu gestalten, wie Rust es zulässt.
Juniper enthält keinen Webserver, sondern stellt Bausteine bereit, um die Integration mit vorhandenen Servern unkompliziert zu gestalten. Es bietet optional eine vorgefertigte Integration für die Actix-, Hyper-, Rocket- und Warp-Frameworks, einschließlich eingebettetem Graphiql und GraphQL Playground für einfaches Debuggen.
Das Buch ist auch für den Master-Zweig und ältere Versionen verfügbar, die nach 0.11.1 veröffentlicht wurden. Siehe Buchindex.
Der beste Ausgangspunkt ist das Juniper-Buch, das Leitfäden mit zahlreichen Beispielen enthält, die alle Funktionen von Juniper abdecken. (sehr viel WIP)
Um schnell loszulegen und ein Gefühl für Juniper zu bekommen, schauen Sie sich den Abschnitt „Schnellstart“ an.
Spezifische Informationen zu Makros, Typen und der Juniper-API finden Sie am besten in der API-Referenz.
Sie können sich auch das Star Wars-Schema ansehen, um ein komplexes Beispiel einschließlich Polymorphismus mit Merkmalen und Schnittstellen zu sehen. Ein Beispiel für die Web-Framework-Integration finden Sie in den Beispielordnern „Actix“, „Axum“, „Hyper“, „Rocket“ und „Warp“.
Juniper unterstützt die vollständige GraphQL-Abfragesprache gemäß der Spezifikation (Oktober 2021), einschließlich Schnittstellen, Unions, Schema-Introspektion und Validierungen. Es kann das Schema auch in der GraphQL-Schemasprache ausgeben.
Als Ausnahme zu anderen GraphQL-Bibliotheken für andere Sprachen erstellt Juniper standardmäßig Nicht-Null-Typen. Ein Feld vom Typ Vec<Episode>
wird in [Episode!]!
. Der entsprechende Rust-Typ für z. B. [Episode]
wäre Option<Vec<Option<Episode>>>
.
Juniper ist unabhängig vom Serialisierungsformat und dem Netzwerktransport.
Juniper unterstützt sowohl die asynchrone als auch die synchrone Ausführung mit execute()
bzw. execute_sync()
. Die asynchrone Ausführung ist laufzeitunabhängig.
Juniper verfolgt einen Code-First-Ansatz zur Definition von GraphQL-Schemas. Wenn Sie stattdessen einen Schema-First-Ansatz verwenden möchten, sollten Sie juniper-from-schema zum Generieren von Code aus einer Schemadatei in Betracht ziehen.
Juniper verfügt über eine automatische Integration mit einigen sehr verbreiteten Rust-Crates, um das Erstellen von Schemata zum Kinderspiel zu machen. Die Typen aus diesen Kisten können automatisch in Ihren Schemas verwendet werden.
Juniper hat 1.0 noch nicht erreicht, daher ist mit einer gewissen API-Instabilität zu rechnen.