Skip to content

Sample starter project for building REST API Web service in Rust using axum, JSON Web Tokens (JWT), SQLx, PostgreSQL, and Redis.

License

Notifications You must be signed in to change notification settings

sheroz/axum-rest-api-sample

Repository files navigation

Getting started with REST API Web Services in Rust using Axum, JWT, SQLx, PostgreSQL, and Redis

build & test MIT

A sample starter project for building REST API Web service in Rust using axum, JSON Web Tokens (JWT), SQLx, PostgreSQL, and Redis

Covers:

  • REST API based on axum
    • Routing
    • API versioning
    • Error handling
    • CORS settings
    • Graceful shutdown
  • Authentication & authorization using JSON Web Tokens (JWT)
    • Login, logout, refresh, and revoking operations
    • Role based authorization
    • Generating and validating access and refresh tokens
    • Setting tokens expiry time (based on configuration)
    • Using refresh tokens rotation technique
    • Revoking issued tokens by using Redis (based on configuration)
      • Revoke all tokens issued until the current time
      • Revoke tokens belonging to the user issued until the current time
      • Cleanup of revoked tokens
  • Using PostgreSQLdatabase with SQLx
    • Database migrations
    • Async connection pooling
    • Async CRUD operations and transactions
  • Using Redis in-memory storage
    • Async Redis operations
  • Configuration settings
    • Loading and parsing .env file
    • Using environment variables
  • Logs
    • tracing based logs
  • Tests
    • End-to-end API tests
  • Using Docker
    • Running PostgreSQL and Redis services
    • Building the application using the official Rust image
    • Running the full stack: API + PostgreSQL + Redis
  • GitHub CI configuration
    • Running cargo deny to check for security vulnerabilities and licenses
    • Running cargo fmt to check for the Rust code format according to style guidelines
    • Running cargo clippy to catch common mistakes and improving the Rust code
    • Running tests
    • Building the application

Run

Running the REST API service (debug release):

docker-compose up -d
cargo run

Running the Docker based full stack build: docker-compose.full.yml

docker-compose -f docker-compose.full.yml up -d

REST API endpoints

Please check for the list of available REST API endpoints: tests/endpoints.http

REST API endpoints can be easily tested using following tools:

  • REST Client for Visual Studio Code.

  • curl samples:

    Heartbeat

    curl -i http://127.0.0.1:8080/v1/heartbeat/1

    Login

    curl -i http://127.0.0.1:8080/v1/auth/login \
    -H "Content-Type: application/json" \
    -d '{"username":"admin","password_hash":"7c44575b741f02d49c3e988ba7aa95a8fb6d90c0ef63a97236fa54bfcfbd9d51"}'

    List of users

    curl -i http://127.0.0.1:8080/v1/users \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJkNTFlNjE4Ny1jYmFjLTQ0ZmEtOWE5NS04ZjFkZWJkYmFlZWEiLCJqdGkiOiIwN2Y3OWE0OC1kMWFhLTQ1ZjItOWE5NS05Y2M5MGZiY2UyYTciLCJpYXQiOjE3MzYwMTA3MjIsImV4cCI6MTczNjAxNDMyMiwidHlwIjowLCJyb2xlcyI6ImFkbWluIn0.3f2c_5PyPXMhgu0FIX4--SGjnSDW1GLxL0ba6gSImfM"

Tests

REST API tests: /tests

Running tests:

docker-compose up -d
cargo test

Running the service in test configuration:

ENV_TEST=1 cargo run

Logging

Setting the RUST_LOG - logging level on the launch:

RUST_LOG=info,hyper=debug,axum_web=trace cargo run

Project Stage

Development: this project is under development.

About

Sample starter project for building REST API Web service in Rust using axum, JSON Web Tokens (JWT), SQLx, PostgreSQL, and Redis.

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published