Тема |
Описание |
Доп. |
||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
HTTP servers and clients Обучающие материалы
Низкоуровневые библиотеки Серверные фреймворки |
Низкий уровень В экосистеме Rust существует несколько основных крейтов, обеспечивающих реализацию HTTP общего назначения и обеспечивающих работу всего разнообразия веб-фреймворков и HTTP- клиентов. Самым выдающимся и зрелым из них, конечно же, является crate hyper (построенный с использованием tokio). Почти все веб-фреймворки экосистемы Rust построены на его основе. Основными альтернативами являются:
Сервер Несмотря на то, что hyper он предоставляет собственную реализацию сервера, его непосредственное использование может показаться довольно низкоуровневым и неэргономичным из-за его природы. Естественно, на базе существует множество веб-фреймворков hyper, которые обеспечивают эргономичный и удобный интерфейс высокого уровня. Наиболее примечательными являются: axum - среда веб-приложений , ориентированная на эргономику и модульность, обеспечивающая маршрутизацию запросов без макросов (но эргономичная и декларативная), простую и прогнозируемую обработку ошибок, а также использующая все преимущества экосистемы tower промежуточного tower-http программного обеспечения , сервисов и утилит. warp - сверхпростая, компонуемая структура веб-сервера для варп-скоростей, построенная на основе концепции «все есть идея Filter». rocket - веб-фреймворк стремится быть быстрым, простым и гибким, обеспечивая при этом гарантированную безопасность и защищенность там, где это возможно, и, что немаловажно, стремясь приносить удовольствие (достигая этого, гарантируя, что вы пишете как можно меньше кода, необходимого для выполнения вашей задачи). poem — полнофункциональный и простой в использовании веб-фреймворк , ориентированный на предоставление всех возможностей (например, i18n ) «из коробки». salvo — мощная и простая платформа веб-сервера , использующая реализацию HTTP/3 tide - Для тех, кто предпочитает async-std экосистему, окончательный выбор (и единственный на данный момент) |
|||||||||||||||||||
Почему actix-web |
Все веб-фреймворки, описанные выше (hyper, tide), наследуют кражу работы из асинхронной среды выполнения, в которой они выполняются, и поэтому требуют правильной синхронизации (быть Send) от пользовательских обработчиков HTTP- запросов, что может привести к ненужным или нежелательным накладным расходам. Вот почему actix-webcrate был спроектирован и реализован специально с учетом этого соображения (во избежание кражи работы), он построен поверх crate actix-rt (используя модель потока на ядро) и, таким образом, не требует какой-либо синхронизации в своих обработчиках запросов (что позволяет !Send Future). Кроме того, actix-web на тот момент это был первый зрелый и готовый к использованию веб-фреймворк в экосистеме Rust |
|||||||||||||||||||
reqwest - это крейт, построенный на основе hyper isahc - в качестве альтернативы, представляет собой независимую от времени выполнения оболочку (с упором на практичность и эргономику) вокруг знаменитой библиотеки cURL surf - является основным крейтом для экосистемы async-std, который, однако, не ограничивается async-std только этим и может использовать альтернативные бэкэнды: cURL (через isahc) hyper, WASM (через API браузера window.fetch) awc - Для actix-web экосистемы значимым вариантом был бы awc, который поддерживает соединения WebSocket «из коробки» (в то время как у большинства других HTTP- клиентов этого нет) ureq - Для простых и тривиальных сценариев, где асинхронная среда выполнения избыточна и/или предпочтительна низкая накладная стоимость, жизнеспособной альтернативой является крейт ureq |
||||||||||||||||||||
Поскольку REST — это скорее архитектурное соглашение/стиль, чем строгая спецификация для RPC, а REST-интерфейсы API обычно в общих чертах основаны непосредственно на HTTP- методах , обычно нет необходимости в специальных фреймворках в Rust для реализации REST- функционального API- сервера или запроса тот самый. Подойдет любой HTTP-сервер или HTTP-клиент. Однако этот подход страдает отсутствием схемы API и поэтому затрудняет создание богатой экосистемы с готовыми к использованию инструментами (или подключение к существующим). К счастью, эту проблему легко решить, используя конкретную спецификацию RPC поверх соглашений REST и строго следуя ей. REST — соединение между клиентом и сервером без сохранения состояния.
1. REST vs RESTful REST — это философия, RESTful — её практическая реализация. REST расшифровывается как REpresentational State Transfer и представляет собой архитектурный стиль для сетевой связи между приложениями, в котором для взаимодействия используется протокол без сохранения состояния (обычно HTTP)
2. Примеры RESTful API
«Не RESTful» API
Разница между RPC (Remote Procedure Call) и REST (Representational State Transfer) лежит в подходе к организации взаимодействия клиента и сервера. Давай разберём пошагово и с примерами. Концептуальный подход RPC:
REST:
2. Протокол и транспорт RPC:
REST:
3. Стиль URL и вызова RPC пример:
REST пример:
4. Преимущества и недостатки
Итого:
|
||||||||||||||||||||
Что такое GraphQL GraphQL — это язык запросов для API и среда выполнения для их обработки. Он был разработан Facebook в 2012 году и открыт как проект с открытым исходным кодом в 2015 году. Основная идея GraphQL — позволить клиентам запрашивать только те данные, которые им действительно нужны, избегая избыточной передачи данных. Он также позволяет выполнять вложенные и сложные запросы, объединяя получение связанных данных в одном вызове. Преимущества GraphQL 1. Гибкость запросов
2. Единый эндпоинт
3. Сильная типизация
4. Автодокументация и инструменты
5. Эффективное получение данных
6. Экосистема
Вызовы и ограничения GraphQL 1. Сложность кеширования
2. Производительность
3. Безопасность
4. Изменения в архитектуре
GraphQL в Rust Сервер
Клиент
|
||||||||||||||||||||
Frontend leptos реактивные пользовательские интерфейсы (UI) для веб-приложений (вместо React) |
Leptos — это фреймворк на языке программирования Rust, который предназначен для создания реактивных пользовательских интерфейсов (UI) для веб-приложений. Вот несколько причин, почему Leptos может быть хорошим выбором для разработки веб-приложений:
|
|||||||||||||||||||