/rest-auth-example

Primary LanguageGoMIT LicenseMIT

rest-auth-example

An example of REST API with authentication (via JWT). The server provides API for registration and some other CRUDs.

API

This section describes how to use the API. Also, there is a postman collection.

Registration

Register a new user.

POST /api/auth/register
-> {
    "username": "random_user",
    "email": "wowowow.gmail@gmail.com", 
    "avatar": "https://images.google.com/"
    "sex": "male"
}


<- {
    "result": {
        "refresh_token": "eyJhbG...refresh"
    }
}

Issue an access-token

Provide Authorization: Bearer <refresh token> header to issue a new access-token:

POST /api/auth/issue-access-token
Authorization: Bearer eyJhbG...refresh

<- {
    "result": {
        "access_token": "eyJhbG...access"
    }
}

All the following requests should be sent with an issued access-token.

Get your profile

GET /api/users/myself
Authorization: Bearer eyJhbG...access

<- {
    "result": {
        "id": "4cb81bf5-4520-4861-85d2-ec7ceb744115",
        "username": "xXx__WINNER__xXx",
        "sex": "male",
        "email": "wowowow.gmail@gmail.com"
    }
}

Update your profile

PUT /api/users/myself
Authorization: Bearer eyJhbG...access
-> {
    "username": "xXx_MAFIOZI_xXx",
    "email": "soa.enjoyer@gmail.com",
    "avatar": "https://www.hollywoodreporter.com/wp-content",
    "sex": "exmale"
}

<- {
    "result": {
        "id": "4cb81bf5-4520-4861-85d2-ec7ceb744115",
        "username": "xXx_MAFIOZI_xXx",
        "avatar": "https://www.hollywoodreporter.com/wp-content",
        "sex": "exmale",
        "email": "soa.enjoyer@gmail.com"
    }
}

Get profiles by usernames

GET /api/users?usernames=random_user,xXx__WINNER__xXx
Authorization: Bearer eyJhbG...access

<- {
    "result": {
        "users": [
            {
                "id": "4cb81bf5-4520-4861-85d2-ec7ceb744115",
                "username": "xXx__WINNER__xXx",
                "sex": "male",
                "email": "wowowow.gmail@gmail.com"
            },
            {
                "id": "d0ed4202-ea84-4c38-b89a-35830fcaa335",
                "username": "random_user",
                "sex": "male",
                "email": "wowowow.gmail@gmail.com"
            }
        ]
    }
}

Create stats task

Create a task to get a users' statistics asynchronously.

The server will send the request to RabbitMQ. A worker consumes requests and uploads generated stats-documents to YandexCloud S3.

POST /api/stats/xXx__WINNER__xXx
Authorization: Bearer eyJhbG...access
        
<- {
    "result": {
        "id": "179c089a-827e-4436-a251-843131baa1e0"
    }
}

Check stats-task status

GET /api/stats/tasks/179c089a-827e-4436-a251-843131baa1e0
Authorization: Bearer eyJhbG...access
        
<- {
    "result": {
        "id": "179c089a-827e-4436-a251-843131baa1e0",
        "status": "DONE",
        "document_url": "https://storage.yandexcloud.net/soa-stats/stats-179c089a-827e-4436-a251-843131baa1e0.pdf"
    }
}

If the status is DONE, there is a link to the generated document is given.