Серверная библиотека GraphQL для Rust
GraphQL — это язык запроса данных, разработанный Facebook и предназначенный для обслуживания интерфейсов мобильных и веб-приложений.
Juniper позволяет писать серверы GraphQL на Rust, которые являются типобезопасными и невероятно быстрыми. Мы также стараемся сделать объявление и разрешение схем GraphQL максимально удобными, насколько это позволяет Rust.
Juniper не включает в себя веб-сервер — вместо этого он предоставляет стандартные блоки, упрощающие интеграцию с существующими серверами. Опционально он предоставляет встроенную интеграцию с платформами Actix, Hyper, Rocket и Warp, включая встроенные Graphiql и GraphQL Playground для упрощения отладки.
Книга также доступна для основной ветки и более старых версий, опубликованных после 0.11.1. Смотрите указатель книги.
Лучшее место для начала — книга Juniper Book, содержащая руководства с множеством примеров, охватывающих все возможности Juniper. (очень много незавершенного производства)
Чтобы быстро начать работу и познакомиться с Juniper, посетите раздел «Краткий старт».
Конкретную информацию о макросах, типах и API Juniper лучше всего искать в Справочнике по API.
Вы также можете просмотреть схему «Звездных войн», чтобы увидеть сложный пример, включающий полиморфизм с признаками и интерфейсами. Пример интеграции веб-платформы см. в папках с примерами actix, axum, Hyper, Rocket и Warp.
Juniper поддерживает полный язык запросов GraphQL в соответствии со спецификацией (октябрь 2021 г.), включая интерфейсы, объединения, самоанализ схемы и проверки. Он также может выводить схему на языке схем GraphQL.
В качестве исключения из других библиотек GraphQL для других языков Juniper по умолчанию создает ненулевые типы. Поле типа Vec<Episode>
будет преобразовано в [Episode!]!
. Соответствующим типом Rust, например, для [Episode]
будет Option<Vec<Option<Episode>>>
.
Juniper не зависит от формата сериализации и сетевого транспорта.
Juniper поддерживает как асинхронное, так и синхронное выполнение с использованием execute()
и execute_sync()
соответственно. Асинхронное выполнение не зависит от времени выполнения.
Juniper придерживается подхода «сначала код» при определении схем GraphQL. Если вместо этого вы хотите использовать подход «сначала схема», рассмотрите вариант Juniper from Schema для генерации кода из файла схемы.
Juniper имеет автоматическую интеграцию с некоторыми очень распространенными ящиками Rust, что упрощает создание схем. Типы из этих ящиков будут автоматически использоваться в ваших схемах.
Juniper еще не достиг версии 1.0, поэтому следует ожидать некоторой нестабильности API.