robatipoor / rustfulapi

πŸš€ Reusable template for building REST Web Services in Rust. Uses Axum HTTP web framework and SeaORM

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

πŸ¦€ RUSTfulapi

Reusable template for building REST Web Services in Rust. Uses Axum HTTP web framework and SeaORM ORM and PostgreSQL.

License

Lines Of Code Format check Build Check Test Clippy Check Docker Image Test Coverage Codecov Dependency status RUSTfulapi-logo

Requirements

How to use this template

To use this template as your project starting point, click "Use this template" at the top of this page, or click here.

Feature highlights

  • Authentication. Based on jsonwebtoken
  • Layered configuration. Based on config-rs
  • Logs. Based on tracing
  • OpenAPI documentation utoipa
  • Error handling
  • Pagination
  • Profile base
  • E2E Tests
  • Postgres admin pgAdmin
  • CI based on Github actions
  • Sentry error tracking
  • Nginx as reverse proxy and secure connections with SSL certificates Nginx
  • Dependabot configuration

Running locally

./run
# open swagger panel
xdg-open http://127.0.0.1:8080/swagger-ui/
# manually testing your API routes with curl commands
curl -X GET http://127.0.0.1:8080/api/v1/server/health_check

Running via docker

cd ./docker/dev/ && ./up.sh

Running tests

Some of the integration tests use Docker to spin up dependencies on demand (e.g., a postgres db),so please ensure Docker is installed before running the tests.

./test.sh

RUSTfulapi grid

Configuration

This project uses config-rs to manage configuration.

Configure with toml files

settings
β”œβ”€β”€ base.toml # default config file 
β”œβ”€β”€ dev.toml # development config file 
β”œβ”€β”€ prod.toml # production config file
└── test.toml # test config file

Configure with environment variables

export APP_SERVER__PORT=8080
export APP_SERVER__ADDR=127.0.0.1

Switching profiles

Before running the application, export this variable:

export APP_PROFILE=prod # Switch to production profile

Check code formatting and typo at commit time

cp ./scripts/git-hooks/* ./.git/hooks/

Migrate database

cargo run --bin migration -- up -u $DATABASE_URL

Update ERD (Entity-Relationship Diagram) use planter

planter postgres://username:password@localhost:5432/database_name\?sslmode=disable -o docs/schema.puml

Run tests

# Execute all test projects.
./test

License

Licensed under either of

Contributing

Contributors are welcome! please fork and send pull requests, If you find a bug or have any ideas on how to improve this project please submit an issue.

See CONTRIBUTING.md.

About

πŸš€ Reusable template for building REST Web Services in Rust. Uses Axum HTTP web framework and SeaORM

License:MIT License


Languages

Language:Rust 94.2%Language:Shell 4.5%Language:HTML 0.7%Language:Dockerfile 0.3%Language:PLpgSQL 0.2%