rocket-rest-api-with-jwt
rocket-rest-api-with-jwt copied to clipboard
A Rusty Rocket fuelled with Diesel and secured by JWT
Rocket REST API with JWT
A Rusty Rocket 🚀 fuelled with Diesel 🛢 and secured by JWT 🔐
Require
You can build and run app from source:
Or using Docker
How to run
Manual
- Install Rust nightly (Thanks for Rustup 1.20!):
rustup install nightly - Set Rust Nightly to project: Go to the root of the project, open cmd/terminal and run
rustup override set nightly - Rename
secret.key.sampletosecret.keyor create your own key by runninghead -c16 /dev/urandom > secret.keyin command line (Linux/UNIX only) and copy to/srcfolder - Create a database in postgres cli or pgAdmin tool
- Rename
Rocket.toml.sampletoRocket.tomland update the database connection string inurlkey. - Build with release profile:
cargo build --release - Run release binary in command line/terminal. On Windows:
target/release/address_book_rest_api.exe, on *UNIX:target/release/address_book_rest_api - Enjoy! 😄
Docker
- Enter into project directory and run
docker-compose up - Enjoy! 😄
APIs
Address: localhost:8000
POST /api/auth/signup: Signup
- Request body:
{
"username": string,
"email": string,
"password": string // a raw password
}
- Response
- 200 OK
{ "message": "signup successfully", "data": "" }- 400 Bad Request
{ "message": "error when signing up, please try again", "data": "" }
POST /api/auth/login: Login
- Request body:
{
"username_or_email": string,
"password": string // a raw password
}
- Response
- 200 OK
{ "message": "login successfully", "data": { "token": string // bearer token } }- 400 Bad Request
{ "message": "wrong username or password, please try again", "data": "" }
GET /api/address-book: Get all people information
- Header:
- Authorization: bearer <token>
- Response
- 200 OK
{ "message": "ok", "data": [ { "id": int32, "name": string, "gender": boolean, // true for male, false for female "age": int32, "address": string, "phone": string, "email": string } ] }
GET /api/address-book/{id}: Get person information by id
- Param path:
- id: int32
- Header:
- Authorization: bearer <token>
- Response
- 200 OK
{ "message": "ok", "data": { "id": int32, "name": string, "gender": boolean, // true for male, false for female "age": int32, "address": string, "phone": string, "email": string } }- 404 Not Found
{ "message": "person with id {id} not found", "data": "" }
GET /api/address-book/{query}: Search for person information by keyword
- Param path:
- query: string
- Header:
- Authorization: bearer <token>
- Response
- 200 OK
{ "message": "ok", "data": [ { "id": int32, "name": string, "gender": boolean, // true for male, false for female "age": int32, "address": string, "phone": string, "email": string } ] }
POST /api/address-book: Add person information
- Header:
- Authorization: bearer <token>
- Request body:
{ "name": string, "gender": boolean, // true for male, false for female "age": int32, "address": string, "phone": string, "email": string } - Response
- 201 Created
{ "message": "ok", "data": "" }- 500 Internal Server Error
{ "message": "can not insert data", "data": "" }
PUT /api/address-book/{id}: Update person information by id
- Param path:
- id: int32
- Header:
- Authorization: bearer <token>
- Request body:
{
"name": string,
"gender": boolean, // true for male, false for female
"age": int32,
"address": string,
"phone": string,
"email": string
}
- Response
- 200 OK
{ "message": "ok", "data": "" }- 500 Internal Server Error
{ "message": "can not update data", "data": "" }
DELETE /api/address-book/{id}: Delete person information by id
- Param path:
- id: int32
- Header:
- Authorization: bearer <token>
- Response
- 200 OK
{ "message": "ok", "data": "" }- 500 Internal Server Error
{ "message": "can not delete data", "data": "" }
Errors:
- Invalid or missing token
- Status code: 401 Unauthorized
- Response:
{ "message": "invalid token, please login again", "data": "" }