Actix-web REST API with JWT
A simple CRUD backend app using Actix-web, Diesel and JWT
Require
How to run
- Rename
secret.key.sample
tosecret.key
or create your own key by runninghead -c16 /dev/urandom > secret.key
in command line (Linux/UNIX only) and copy to/src
folder - Create a database in postgres cli or pgAdmin tool
- Rename
.env.sample
to.env
and update the database connection string inDATABASE_URL
key. - Build with release profile:
cargo build --release
- Run release binary in command line/terminal.
- Windows:
target/release/address_book_rest_api.exe
- Linux/UNIX:
target/release/address_book_rest_api
- Windows:
- Enjoy! 😄
APIs
localhost:8080
Address: GET /api/ping
: Ping
- Response:
- 200 OK
pong!
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": "User '{username}' is already registered", "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": "" }