Вызовите конечные точки API и создайте собственные значки для отображения статистики просмотров.

В этом посте мы узнаем, как создать простой API для подсчета просмотров профиля на GitHub с использованием Rust, Actix и MongoDB. Вы можете считать его учебным пособием по запуску типичного проекта HTTP API с нуля.

Идея сбора количества просмотров проста. Нам нужно встроить отслеживающее изображение на страницу github, чтобы пользователи могли просматривать и отображать собранную статистику. Для отображения собранной статистики мы будем использовать проект щиты, который позволяет создавать значки с пользовательскими поставщиками данных.

Предпосылки

Прежде всего, вам нужно настроить правильные инструменты, чтобы начать разработку. Вот минимальный список:

  • Rust Language — Rust SDK для сборки и запуска приложений
  • VSCode — редактор для модификации исходного кода вашего приложения
  • Rust Analyzer — расширение VSCode, которое упрощает разработку на Rust.
  • Docker Desktop — для создания или использования образов Docker.

Docker также полезен для локальной разработки ваших приложений, если вам нужен экземпляр базы данных, не устанавливая его в вашей операционной системе.

Проект установки

Давайте создадим проект Rust с помощью этой команды cargo:

cargo new counter

Теперь вы можете открыть папку проекта в VSCode и добавить зависимости, необходимые для разработки HTTP API. В этом проекте зависимости будут:

  • Actix — популярный веб-фреймворк на Rust
  • MongoDB — драйвер Rust для MongoDB
  • Serde — библиотека Rust для сериализации/десериализации JSON.

Вы можете сделать это либо отредактировав файл Cargo.toml, либо с помощью этой команды в каталоге проекта:

cargo add actix-web mongodb serde

Вам также необходимо изменить флаги функций serde, чтобы разрешить использование макроса derive для более декларативной сериализации.

Таким образом, раздел зависимостей будет выглядеть так:

[dependencies]
actix-web = "4.1.0"
mongodb = "2.3.0"
serde = { version = "1.0.140", features = ["derive"] }

База данных

Прежде чем мы начнем кодировать, нам нужен экземпляр MongoDB для хранения данных приложения. Мы сделаем это, используя официальный образ Docker из реестра DockerHub.

Создадим контейнер Docker для локальной разработки:

docker run -d --name local-mongo \
    -p 27017:27017 \
    -e MONGO_INITDB_ROOT_USERNAME=admin \
    -e MONGO_INITDB_ROOT_PASSWORD=pass \
    mongo:latest

Как только это будет сделано, вы можете подключиться к своей локальной базе данных MongoDB с помощью этой строки подключения mongodb://admin:pass@localhost:27017.

Чтобы разрешить приложению доступ к базе данных, вы должны добавить строку подключения в файл config.toml в каталоге .cargo проекта:

[env]
DATABASE_URL = "mongodb://admin:pass@localhost:27017"

Вам также может понадобиться эта команда для (пере)запуска контейнера MongoDB:

docker restart local-mongo

Структура проекта

В этом проекте у нас будет два слоя для организации кода. Первый уровень будет представлять службу данных, которую мы будем использовать для работы с коллекцией MongoDB для добавления и подсчета просмотров профиля GitHub. Второй уровень будет предоставлять конечные точки API для отслеживания просмотров и получения собранной статистики.

Давайте создадим сервис данных с этими двумя функциями, описанными выше:

И уровень конечной точки для нашего API:

Давайте завершим это вместе:

Чтобы запустить веб-сервер, просто создайте и запустите приложение:

cargo run

Заключение

Итак, теперь вы можете вызывать конечные точки API и создавать свои собственные значки для отображения статистики просмотров.

Материалы:

  • Пример сбора и отображения просмотров профиля GitHub.
  • Полный исходный код можно найти здесь.

Надеюсь, вы найдете этот урок полезным.