Biblioteca de servidor GraphQL para Rust
GraphQL é uma linguagem de consulta de dados desenvolvida pelo Facebook destinada a atender front-ends de aplicativos móveis e web.
Juniper torna possível escrever servidores GraphQL em Rust que sejam de tipo seguro e extremamente rápidos. Também tentamos tornar a declaração e a resolução de esquemas GraphQL tão convenientes quanto o Rust permitir.
O Juniper não inclui um servidor web - em vez disso, fornece blocos de construção para simplificar a integração com servidores existentes. Opcionalmente, ele fornece uma integração pré-construída para as estruturas Actix, Hyper, Rocket e Warp, incluindo Graphiql e GraphQL Playground integrados para fácil depuração.
O livro também está disponível para o branch master e versões anteriores publicadas após 0.11.1. Veja o índice do livro.
O melhor lugar para começar é o Juniper Book, que contém guias com muitos exemplos, cobrindo todos os recursos do Juniper. (muito WIP)
Para começar rapidamente e conhecer o Juniper, confira a seção Início rápido.
Para obter informações específicas sobre macros, tipos e a API Juniper, a Referência da API é o melhor lugar para procurar.
Você também pode verificar o esquema Star Wars para ver um exemplo complexo incluindo polimorfismo com características e interfaces. Para obter um exemplo de integração de estrutura da web, consulte as pastas de exemplos actix, axum, hyper, rocket e warp.
Juniper oferece suporte à linguagem de consulta GraphQL completa de acordo com a especificação (outubro de 2021), incluindo interfaces, uniões, introspecção de esquema e validações. Ele também pode gerar o esquema na linguagem de esquema GraphQL.
Como exceção a outras bibliotecas GraphQL para outras linguagens, o Juniper cria tipos não nulos por padrão. Um campo do tipo Vec<Episode>
será convertido em [Episode!]!
. O tipo de Rust correspondente para, por exemplo, [Episode]
seria Option<Vec<Option<Episode>>>
.
Juniper é independente de formato de serialização e transporte de rede.
Juniper suporta execução assíncrona e síncrona usando execute()
e execute_sync()
respectivamente. A execução assíncrona é independente do tempo de execução.
Juniper segue uma abordagem de código inicial para definir esquemas GraphQL. Se você quiser usar uma abordagem que prioriza o esquema, considere o juniper-from-schema para gerar código a partir de um arquivo de esquema.
Juniper tem integração automática com algumas caixas Rust muito comuns para facilitar a construção de esquemas. Os tipos dessas caixas poderão ser utilizados em seus esquemas automaticamente.
O Juniper ainda não atingiu a versão 1.0, portanto, alguma instabilidade da API é esperada.