A Skeleton API Rest server using Rocket with the backend database as MongoDB.
- 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 validateAPI Keys
Restrict
a client connecting IP Addresses to the endpoints usingAllow ACL
Restrict
endpoints using theDeny ACL
Rate limiter
to throttle incoming requests to endpoints- Extend this rocketapi server's boiler plate; with your endpoints
- Rust 1.56+ (2021 edition)
cargo build --release
- Sample config file is available at
config.sample.yml
./target/release/rocketapi -f config.sample.yml
- 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/<Email> |
DELETE |
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", "<IP_ADDRESS>"] // 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
}
}
- Example with rate-limit (throttle)
{
"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
{
"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": "*"}
]
}
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
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.
Feel free to make pull requests and make this better and/or contribute to its features.
Licensed under the Apache License, Version 2.0