Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/marirs/rocketapi
API Rest Server using Rocket.rs
https://github.com/marirs/rocketapi
api api-rest boilerplate boilerplate-application mongodb rocket rust rust-lang
Last synced: 2 months ago
JSON representation
API Rest Server using Rocket.rs
- Host: GitHub
- URL: https://github.com/marirs/rocketapi
- Owner: marirs
- Created: 2021-01-05T03:32:01.000Z (about 4 years ago)
- Default Branch: main
- Last Pushed: 2022-05-24T04:54:10.000Z (over 2 years ago)
- Last Synced: 2024-04-01T13:32:10.621Z (9 months ago)
- Topics: api, api-rest, boilerplate, boilerplate-application, mongodb, rocket, rust, rust-lang
- Language: Rust
- Homepage:
- Size: 104 KB
- Stars: 5
- Watchers: 3
- Forks: 2
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
API REST Server using Rocket.rs
--------------------------------
[![Linux Arm7](https://github.com/marirs/rocketapi/actions/workflows/linux_arm.yml/badge.svg)](https://github.com/marirs/rocketapi/actions/workflows/linux_arm.yml)
[![Linux x86_64](https://github.com/marirs/rocketapi/actions/workflows/linux_x86_64.yml/badge.svg)](https://github.com/marirs/rocketapi/actions/workflows/linux_x86_64.yml)
[![macOS intel](https://github.com/marirs/rocketapi/actions/workflows/macos_x86_64.yml/badge.svg)](https://github.com/marirs/rocketapi/actions/workflows/macos_x86_64.yml)A Skeleton API Rest server using [Rocket](https://rocket.rs/) with the backend database as [MongoDB](https://www.mongodb.com/).
### Features
- Custom config file defining:
- server host ip and port to listen
- enable/disable ssl with ssl cert auto generation
- mongodb configurations
- Use the `x-api-key` header to validate `API Keys`
- `Restrict` a client connecting IP Addresses to the endpoints using `Allow ACL`
- `Restrict` endpoints using the `Deny ACL`
- `Rate limiter` to throttle incoming requests to endpoints
- Extend this rocketapi server's boiler plate; with your endpoints![architecture](docs/rocketapi.png "Architecture")
### Requirements
- Rust 1.56+ (2021 edition)
---
### Compile```bash
cargo build --release
```- Sample config file is available at `config.sample.yml`
### Starting the server
```bash
./target/release/rocketapi -f config.sample.yml
```### Available endpoints
- Index/User management endpoint
| Description | Endpoint | Method |
| --- | --- | --- |
| Api index | `/` | GET |
| List all Users | `/users` | GET |
| Create user | `/users` | POST |
| Update user | `/users` | PUT |
| Delete user | `/users/` | DELETE |### POST Request for `new user creation` / `user update`
The below example goes into json body of POST/PUT request while creating a new user
```
{
"email": "email",
"description": "...",
"is_admin": false,
"acl_allow_ips": ["127.0.0.1", ""] // use ["*"] if you want to allow from any IP
"acl_allow_endpoints": {
"name": "/endpoint_name",
"method": "GET", // use "*" if you want any methods to be allowed for this endpoint
"throttle": "4/min" // can use sec|min|hour|day
}
}
```### Seed data & Configuration
- Example with rate-limit (throttle)
```json
{
"created_ip" : "127.0.0.1",
"created_by" : "email",
"created_at" : "2021-08-02T00:00:00Z",
"email" : "email",
"description": "...",
"api_key" : "apikey123",
"is_admin" : true,
"acl_allow_ips" : [
"*"
],
"acl_allow_endpoints": [
{"name": "/fair", "method": "*", "throttle": "4/min"}
]
}
```
- Example without rate-limit
```json
{
"created_ip" : "127.0.0.1",
"created_by" : "email",
"created_at" : "2021-08-02T00:00:00Z",
"email" : "email",
"description": "...",
"api_key" : "apikey123",
"is_admin" : true,
"acl_allow_ips" : [
"*"
],
"acl_allow_endpoints": [
{"name": "*", "method": "*"}
]
}
````### Configs
The `configs` folder has configurations to start the server as a service and nginx config to server this rocketapi server in reverse proxy mode.
- Start the rocketapi server as a service
```text
1) copy the configs/rocketapi.service to /etc/systemd/system folder
2) systemctl enable rocketapi
3) systemctl start rocketapi
```- Then you can copy the `configs/nginx.vhost` to `/etc/nginx/sites-enabled` to access the rocketapi server via nginx.
---
If you need a python version, a python fastapi version can be found [here](https://github.com/marirs/fastapi-boilerplate).
---
### ContributionFeel free to make pull requests and make this better and/or contribute to its features.
---
Licensed under the Apache License, Version 2.0