Rest API with authentication which allows user to manage books with their authors. There are endpoints for create, update, delete, list authors and books. Pagination is implemented. There is a user authentication with a possibility to reset password. App can handle basic database operations using CLI commands.
App was deployed and maintained on AWS cloud EC2 and Elastic Beanstalk and database in RDS.
- Environment
- Technologies
- Documentation: Book Library Api
- π Collection: Authors
- π Collection: Books
- π Collection: Authentication
Create .env file with:
| Variable | Description | Value |
|---|---|---|
| SECRET_KEY | Flask secret key | |
| SQLALCHEMY_DATABASE_URI | Database host uri |
- python
- flask
- jwt
- werkzeug
- marshmallow
- sqlalchemy
- re
- pytest
- AWS EC2
- AWS RDS
- AWS Elastic Beanstalk
Backend API for managing authors, books, users etc.
Get all authors from the database.
{{URL}}/api/v1/authors
| Param | value |
|---|---|
| fields | id,first_name |
| sort | birth_date |
| first_name | Andrzej |
| birth_date[gte] | 21-06-1960 |
| id[lt] | 5 |
| page | 3 |
| limit | 3 |
β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β
Add new author to the database.
{{URL}}/api/v1/authors
β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β
Get single author form the database
{{URL}}/api/v1/authors/10
β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β
Update author in database.
{{URL}}/api/v1/authors/11
| Content-Type | Value |
|---|---|
| Content-Type | application/json |
{
"first_name": "Henryk",
"last_name": "Sienkiewicz",
"birth_date": "05-05-1846"
}| Param | value | Type |
|---|---|---|
| token | {{TOKEN}} | string |
β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β
Delete author in database.
{{URL}}/api/v1/authors/11
| Content-Type | Value |
|---|---|
| Authorization | Bearer ey... |
| Param | value |
|---|---|
| Param | value | Type |
|---|---|---|
| token | {{TOKEN}} | string |
β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β
{{URL}}/api/v1/authors
| Content-Type | Value |
|---|---|
| Content-Type | application/json |
{
"first_name": "Andrzej",
"last_name": "Mickiewicz",
"birth_date": "24-12-2000"
}| Param | value |
|---|---|
| null |
| Param | value | Type |
|---|---|---|
| token | {{TOKEN}} | string |
β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β
{{URL}}/api/v1/books?fields=id,title,number_of_pages&sort=number_of_pages&number_of_pages[gte]=400
| Param | value |
|---|---|
| fields | id,title,number_of_pages |
| sort | number_of_pages |
| number_of_pages[gte] | 400 |
| id[lt] | 5 |
| page | 3 |
| limit | 3 |
β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β
Get Single Book
{{URL}}/api/v1/books/5
β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β
Update Book in database
{{URL}}/api/v1/books/5
| Content-Type | Value |
|---|---|
| Content-Type | application/json |
{
"title": "Some book",
"isbn": 123124,
"number_of_pages": 723,
"description": "some description",
"author_id":10
}| Param | value | Type |
|---|---|---|
| token | {{TOKEN}} | string |
β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β
Delete Book from database
{{URL}}/api/v1/books/1
| Param | value | Type |
|---|---|---|
| token | {{TOKEN}} | string |
β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β
Get all author books from database.
{{URL}}/api/v1/authors/6/books
β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β
Add a book to the database.
{{URL}}/api/v1/authors/1/books
| Content-Type | Value |
|---|---|
| Content-Type | application/json |
{
"title": "New Book",
"number_of_pages": "478",
"isbn": 4444444444444,
"description": "Some description"
}| Param | value | Type |
|---|---|---|
| token | {{TOKEN}} | string |
β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β
Info about current user
{{URL}}/api/v1/auth/me
| Content-Type | Value |
|---|---|
| Content-Type | application/json |
{
"username": "t",
"password": "123456"
}| Param | value | Type |
|---|---|---|
| token | {{TOKEN}} | string |
β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β
Update user password in database
{{URL}}/api/v1/auth/update/password
| Content-Type | Value |
|---|---|
| Content-Type | application/json |
{
"current_password": "123456",
"new_password": "qwerty"
}| Param | value | Type |
|---|---|---|
| token | {{TOKEN}} | string |
β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β
Add user to database
{{URL}}/api/v1/auth/register
| Content-Type | Value |
|---|---|
| Content-Type | application/json |
{
"username": "next",
"password": "123456",
"email": "next@gmail.com"
}β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β
Logging to database.
{{URL}}/api/v1/auth/login
| Content-Type | Value |
|---|---|
| Content-Type | application/json |
{
"username": "next123",
"password": "qwerty"
}β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β
Updating user name and email
{{URL}}/api/v1/auth/update/data
| Content-Type | Value |
|---|---|
| Content-Type | application/json |
{
"email": "next123@gmail.com",
"username": "next123"
}| Param | value | Type |
|---|---|---|
| token | {{TOKEN}} | string |
β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β