GET: /api/v1/subEntities/{id}
curl -X GET localhost:80/api/v1/subEntities/110066 -v
EXAMPLE: localhost:80/api/v1/subEntities/110066
statusCode: 200; isSuccess: true;
{
"message": "Transaction is Ok",
"data": {
"id": "110066",
"name": "se5",
"description": "woo-hoo se5",
"imgUrl": "https://fakeImageUrl.com/se5",
"owner": {
"id": 1,
"name": "HeadObject 1",
"hasSubEntities": 1
}
}
}
EXAMPLE: localhost:80/api/v1/subEntities/110067
curl -X GET localhost:80/api/v1/subEntities/110067 -v
statusCode: 404; isSuccess: false;
{
"message": "Not find subEntity with ID: 110067",
"data": null
}
GET /api/v1/subEntities
curl -X GET localhost:80/api/v1/subEntities -v
EXAMPLE: localhost:80/api/v1/subEntities
statusCode: 200; isSuccess: true;
{
"message": "Transaction is Ok",
"data": [
{
"id": "110022",
"name": "se1",
"description": "woo-hoo se1",
"imgUrl": "https://fakeImageUrl.com/se1",
"owner": {
"id": 1,
"name": "HeadObject 1",
"hasSubEntities": 1
}
},
{
"id": "110033",
"name": "se2",
"description": "woo-hoo se2",
"imgUrl": "https://fakeImageUrl.com/se2",
"owner": {
"id": 1,
"name": "HeadObject 1",
"hasSubEntities": 1
}
},
{
"id": "110066",
"name": "se5",
"description": "woo-hoo se5",
"imgUrl": "https://fakeImageUrl.com/se5",
"owner": {
"id": 1,
"name": "HeadObject 1",
"hasSubEntities": 1
}
}
]
}
POST /api/v1/subEntities
curl -X POST localhost:80/api/v1/subEntities/110067 -v
EXAMPLE: localhost:80/api/v1/subEntities
REQUEST BODY:
{
"name": "se10",
"description": "woo-hoo se10",
"imgUrl": "https://fakeImageUrl.com/se10"
}
statusCode: 200; isSuccess: true;
{
"message": "Transaction is Ok",
"body": {
"id": "5873cf16-cef6-49f0-83d6-fc31a53d90c7",
"name": "se10",
"description": "woo-hoo se10",
"imgUrl": "https://fakeImageUrl.com/se10",
"owner": null
}
}
statusCode: 400; isSuccess: false;
{
"message": "Data is wrong",
"body": {
"name": "is required",
"description": "is required",
"imgUrl": "is required"
}
}
PUT /api/v1/subEntities/{id}
EXAMPLE: localhost:80/api/v1/subEntities/110066
REQUEST BODY:
{
"name": "se10",
"description": "woo-hoo se10",
"imgUrl": "https://fakeImageUrl.com/se10"
}
statusCode: 200; isSuccess: true;
{
"message": "Transaction is Ok",
"data": {
"id": "110066",
"name": "se10",
"description": "woo-hoo se10",
"imgUrl": "https://fakeImageUrl.com/se10",
"owner": null
}
}
statusCode: 404; isSuccess: false;
{
"message": "Not find subEntity with ID: 110069",
"data": null
}
DELETE /api/v1/subEntities/{id}
EXAMPLE: localhost:80/api/v1/subEntities/110055
statusCode: 200; isSuccess: true;
{
"message": "Transaction is Ok",
"data": null
}
404: NOT FOUND EL WITH ID
{
"message": "Not find subEntity with ID: 110055",
"data": null
}
GET /api/v1/headObjects
EXAMPLE: localhost:80/api/v1/headObjects
statusCode: 200; isSuccess: true;
{
"message": "Transaction is Ok",
"data": [
{
"id": 1,
"name": "HeadObject 1",
"hasSubEntities": 1
},
{
"id": 2,
"name": "HeadObject 2",
"hasSubEntities": 2
},
{
"id": 3,
"name": "HeadObject 3",
"hasSubEntities": 1
}
]
}
GET /api/v1/headObjects/{1}
EXAMPLE: localhost:80/api/v1/headObjects/1
statusCode: 200; isSuccess: true;
{
"message": "Transaction is Ok",
"data": {
"id": 1,
"name": "HeadObject 1",
"hasSubEntities": 1
}
}
EXAMPLE: localhost:80/api/v1/headObjects/4
statusCode: 404; isSuccess: false;
{
"message": "Not find Head Object with ID: 4",
"data": null
}
POST /api/v1/headObjects
EXAMPLE: localhost:80/api/v1/headObjects
REQUEST BODY:
{
"name": "New Head Object"
}
statusCode: 200; isSuccess: true;
{
"message": "Transaction is Ok",
"data": {
"id": 4,
"name": "New Head Object",
"hasSubEntities": 0
}
}
statusCode: 400; isSuccess: false;
{
"message": "Provided arguments are invalid, see data for details.",
"data": {
"name": "name is required."
}
}
PUT /api/v1/headObjects/{hid}/subEntities/{sid}
EXAMPLE: localhost:80/api/v1/headObjects/12/subEntities/1
statusCode: 200; isSuccess: true;
{
"message": "Assignment is Ok",
"data": null
}
statusCode: 404; isSuccess: false;
{
"message": "Not find {subEntity | Head Object | [BOTH]} with ID: 1",
"data": null
}
PUT /api/v1/headObjects/{id}
EXAMPLE: localhost:80/api/v1/headObjects/12
REQUEST BODY:
{
"name": "Head Object #12"
}
statusCode: 200; isSuccess: true;
{
"message": "Transaction is Ok",
"data": {
"id": 12,
"name": "Head Object #12",
"hasSubEntities": 0
}
}
statusCode: 400; isSuccess: false;
{
"message": "Provided arguments are invalid, see data for details.",
"data": {
"name": "name is required."
}
}
"/api/v1/headObjects/12"
statusCode: 404; isSuccess: false;
{
"message": "Not find Head Object with ID: 12",
"data": null
}
DELETE /api/v1/headObjects/{id}
EXAMPLE: localhost:80/api/v1/headObjects/1
statusCode: 200; isSuccess: true;
{
"message": "Transaction is Ok",
"data": null
}
statusCode: 404; isSuccess: false;
{
"message": "Not find Head Object with ID: 1",
"data": null
}
GET /api/v1/users
если нет токена, регистрируемся:
curl -X POST http://localhost:80/api/v1/users/login -u Alexander:Alexander -v
...then send Bearer Token and get All Users:
curl http://localhost:80/api/v1/users -H "Authorization: Bearer eyJhbGciOiJSUzI1NiJ9.eyJpc3MiOiJzZWxmIiwic3ViIjoiQWxleGFuZGVyIiwiZXhwIjoxNzMwNDQ0MzA3LCJpYXQiOjE3MzA0MzcxMDcsImF1dGhvcml0aWVzIjoiUk9MRV9BRE1JTiJ9.CM0uDzj5jwCifVM1p0VVTfjvBVKZN9N4gBuqTcwGm8aDUuACBbQhhtDo87BfA536grdyT1NLV18HFQW4dXEW87q6EUC-w3icPgRcaFHVyDj_fgc10HenUPhjnqkYpM61jqSX0CRj2JkeLA2HN_YYDlo7tdlVLtsCrbdqF_QiTgGy8QzIK6So2gbFyKwLRd9lLeHJOtcidihn29fXBt2MgEd7xGj-yod3vR0VfCODdmRfmi4_agTbyiGMDiHsdUJt6KUcUgzdz2hT474yg6b-kht6eG6YZapckRRrqEJkflTT3b8pjaTu2vYkdIdVIgiQwvWOtplbo9q17hYVBDZsyg" -v
EXAMPLE: localhost:80/api/v1/users
statusCode: 200; isSuccess: true;
{
"message": "Transaction is Ok",
"data": [
{
"id": 1,
"name": "Alexander",
"roles": "ADMIN",
"enabled": true
},
{
"id": 2,
"name": "Sergey",
"roles": "USER",
"enabled": true
},
{
"id": 3,
"name": "Everybody",
"roles": "USER",
"enabled": false
}
]
}
GET /api/v1/users/{1}
если нет токена, регистрируемся:
curl -X POST http://localhost:80/api/v1/users/login -u Alexander:Alexander -v
...then send Bearer Token and get User By ID:
curl http://localhost:80/api/v1/users/1 -H "Authorization: Bearer eyJhbGciOiJSUzI1NiJ9.eyJpc3MiOiJzZWxmIiwic3ViIjoiQWxleGFuZGVyIiwiZXhwIjoxNzMwNDQ0MzA3LCJpYXQiOjE3MzA0MzcxMDcsImF1dGhvcml0aWVzIjoiUk9MRV9BRE1JTiJ9.CM0uDzj5jwCifVM1p0VVTfjvBVKZN9N4gBuqTcwGm8aDUuACBbQhhtDo87BfA536grdyT1NLV18HFQW4dXEW87q6EUC-w3icPgRcaFHVyDj_fgc10HenUPhjnqkYpM61jqSX0CRj2JkeLA2HN_YYDlo7tdlVLtsCrbdqF_QiTgGy8QzIK6So2gbFyKwLRd9lLeHJOtcidihn29fXBt2MgEd7xGj-yod3vR0VfCODdmRfmi4_agTbyiGMDiHsdUJt6KUcUgzdz2hT474yg6b-kht6eG6YZapckRRrqEJkflTT3b8pjaTu2vYkdIdVIgiQwvWOtplbo9q17hYVBDZsyg" -v
EXAMPLE: localhost:80/api/v1/users/1
statusCode: 200; isSuccess: true;
{
"message": "Transaction is Ok",
"data": {
"id": 1,
"name": "Alexander",
"roles": "ADMIN",
"enabled": true
}
}
EXAMPLE: localhost:80/api/v1/users/5
если нет токена, регистрируемся:
curl -X POST http://localhost:80/api/v1/users/login -u Alexander:Alexander -v
...then send a required data
curl http://localhost:80/api/v1/users/5 -H "Authorization: Bearer eyJhbGciOiJSUzI1NiJ9.eyJpc3MiOiJzZWxmIiwic3ViIjoiQWxleGFuZGVyIiwiZXhwIjoxNzMwNDQ0MzA3LCJpYXQiOjE3MzA0MzcxMDcsImF1dGhvcml0aWVzIjoiUk9MRV9BRE1JTiJ9.CM0uDzj5jwCifVM1p0VVTfjvBVKZN9N4gBuqTcwGm8aDUuACBbQhhtDo87BfA536grdyT1NLV18HFQW4dXEW87q6EUC-w3icPgRcaFHVyDj_fgc10HenUPhjnqkYpM61jqSX0CRj2JkeLA2HN_YYDlo7tdlVLtsCrbdqF_QiTgGy8QzIK6So2gbFyKwLRd9lLeHJOtcidihn29fXBt2MgEd7xGj-yod3vR0VfCODdmRfmi4_agTbyiGMDiHsdUJt6KUcUgzdz2hT474yg6b-kht6eG6YZapckRRrqEJkflTT3b8pjaTu2vYkdIdVIgiQwvWOtplbo9q17hYVBDZsyg" -v
statusCode: 400; isSuccess: false;
{
"message": "Not find User with ID: 5",
"data": null
}
POST /api/v1/users
если нет токена, регистрируемся:
curl -X POST http://localhost:80/api/v1/users/login -u Alexander:Alexander -v
...then send a required data
curl -X POST http://localhost:80/api/v1/users -d '{"name": "newman", "password": "new-pass", "roles": "USER", "enabled": true}' -H "Content-Type: application/json" -H "Accept: application/json" -H "Authorization: Bearer eyJhbGciOiJSUzI1NiJ9.eyJpc3MiOiJzZWxmIiwic3ViIjoiQWxleGFuZGVyIiwiZXhwIjoxNzMwNDQ0MzA3LCJpYXQiOjE3MzA0MzcxMDcsImF1dGhvcml0aWVzIjoiUk9MRV9BRE1JTiJ9.CM0uDzj5jwCifVM1p0VVTfjvBVKZN9N4gBuqTcwGm8aDUuACBbQhhtDo87BfA536grdyT1NLV18HFQW4dXEW87q6EUC-w3icPgRcaFHVyDj_fgc10HenUPhjnqkYpM61jqSX0CRj2JkeLA2HN_YYDlo7tdlVLtsCrbdqF_QiTgGy8QzIK6So2gbFyKwLRd9lLeHJOtcidihn29fXBt2MgEd7xGj-yod3vR0VfCODdmRfmi4_agTbyiGMDiHsdUJt6KUcUgzdz2hT474yg6b-kht6eG6YZapckRRrqEJkflTT3b8pjaTu2vYkdIdVIgiQwvWOtplbo9q17hYVBDZsyg" -v
EXAMPLE: localhost:80/api/v1/users
REQUEST BODY:
{
"name": "newman",
"password": "new-pass",
"roles": "USER",
"enabled": true
}
statusCode: 200; isSuccess: true;
{
"message": "Transaction is Ok",
"data": {
"id": 4,
"name": "newman",
"roles": "USER",
"enabled": true
}
}
statusCode: 400; isSuccess: false;
{
"message": "see what wrong in data",
"data": {
"name": "name is required",
"password": "password is required",
"roles": "space separated roles are required"
}
}
PUT /api/v1/users/{id}
если нет токена, регистрируемся:
curl -X POST http://localhost:80/api/v1/users/login -u Alexander:Alexander -v
...then send a required data
curl -X PUT http://localhost:80/api/v1/users/3 -d '{"name": "updated-name", "roles": "USER"}' -H "Content-Type: application/json" -H "Accept: application/json" -H "Authorization: Bearer eyJhbGciOiJSUzI1NiJ9.eyJpc3MiOiJzZWxmIiwic3ViIjoiQWxleGFuZGVyIiwiZXhwIjoxNzMwNDQ0MzA3LCJpYXQiOjE3MzA0MzcxMDcsImF1dGhvcml0aWVzIjoiUk9MRV9BRE1JTiJ9.CM0uDzj5jwCifVM1p0VVTfjvBVKZN9N4gBuqTcwGm8aDUuACBbQhhtDo87BfA536grdyT1NLV18HFQW4dXEW87q6EUC-w3icPgRcaFHVyDj_fgc10HenUPhjnqkYpM61jqSX0CRj2JkeLA2HN_YYDlo7tdlVLtsCrbdqF_QiTgGy8QzIK6So2gbFyKwLRd9lLeHJOtcidihn29fXBt2MgEd7xGj-yod3vR0VfCODdmRfmi4_agTbyiGMDiHsdUJt6KUcUgzdz2hT474yg6b-kht6eG6YZapckRRrqEJkflTT3b8pjaTu2vYkdIdVIgiQwvWOtplbo9q17hYVBDZsyg" -v
EXAMPLE: localhost:80/api/v1/users/3
REQUEST BODY:
{
"name": "updated-name",
"roles": "USER"
}
statusCode: 200; isSuccess: true;
{
"message": "Transaction is Ok",
"data": {
"id": 2,
"name": "updated-name",
"roles": "USER",
"enabled": false
}
}
statusCode: 400; isSuccess: false;
{
"message": "see what wrong in data",
"data": {
"name": "name is required",
"roles": "space separated roles are required"
}
}
statusCode: 404; isSuccess: false;
{
"message": "Not find User with ID: 5",
"data": null
}
DELETE /api/v1/users/{id}
Try:
Login:
curl -X POST http://localhost:80/api/v1/users/login -u Alexander:Alexander -v
...then send a required data
curl -X DELETE http://localhost:80/api/v1/users/3 -H "Content-Type: application/json" -H "Accept: application/json" -H "Authorization: Bearer eyJhbGciOiJSUzI1NiJ9.eyJpc3MiOiJzZWxmIiwic3ViIjoiQWxleGFuZGVyIiwiZXhwIjoxNzMwNDQ0MzA3LCJpYXQiOjE3MzA0MzcxMDcsImF1dGhvcml0aWVzIjoiUk9MRV9BRE1JTiJ9.CM0uDzj5jwCifVM1p0VVTfjvBVKZN9N4gBuqTcwGm8aDUuACBbQhhtDo87BfA536grdyT1NLV18HFQW4dXEW87q6EUC-w3icPgRcaFHVyDj_fgc10HenUPhjnqkYpM61jqSX0CRj2JkeLA2HN_YYDlo7tdlVLtsCrbdqF_QiTgGy8QzIK6So2gbFyKwLRd9lLeHJOtcidihn29fXBt2MgEd7xGj-yod3vR0VfCODdmRfmi4_agTbyiGMDiHsdUJt6KUcUgzdz2hT474yg6b-kht6eG6YZapckRRrqEJkflTT3b8pjaTu2vYkdIdVIgiQwvWOtplbo9q17hYVBDZsyg" -v
EXAMPLE: localhost:80/api/v1/users/3
statusCode: 200; isSuccess: true;
{
"message": "Transaction is Ok",
"data": null
}
statusCode: 404; isSuccess: false;
{
"message": "Not find User with ID: 12",
"data": null
}
POST /api/v1/users/login/
как получить токен через консоль или приложение:
curl -X POST http://localhost:80/api/v1/users/login -u Sergey:Sergey -v
как получить токен через браузер:
<script>
fetch(
'http://localhost:80/api/v1/users/login',
{
method: 'POST',
headers: {
Authorization: "Basic " + btoa('Sergey:Sergey')
}
}
)
.then((resp) => resp.json())
.then((data) => {
console.log(data);
})
.catch((error) => {
console.log(error);
});
</script>
statusCode: 200; isSuccess: true;
{
"isSuccess": true,
"statusCode": 200,
"message": "Login user info and JWT",
"data": {
"user": {
"id": 2,
"name": "Sergey",
"roles": "USER",
"enabled": true
},
"token": "eyJhbGciOiJSUzI1NiJ9.eyJpc3MiOiJzZWxmIiwic3ViIjoiU2VyZ2V5IiwiZXhwIjoxNzMwNDQ1NzY2LCJpYXQiOjE3MzA0Mzg1NjYsImF1dGhvcml0aWVzIjoiUk9MRV9VU0VSIn0.L13KPSf2I_zahJXU3hfWSLDBBKVIG7OOVZ6NPkyMpPlxSDmYdiu9qAaYGif0nU5SnlwpcUeXbpxFZo_twXHw3yxXRqSdhwUYDaKST8NaxhxujLsLM3BEaxdxX-5Rp3GEyV0uxpygQ1saNGz4mpkA0bG0DrHWkwbKe9x5La6FCl1YYto3buJjeEPpRLuN40GyJSJRoO3NHAsnIa27PS4iwlGFbFhBk5HScx7s_HwXxNPjnUnoet5n4d9pWBZ3tBvMRA7a0Jis_pqUmqVJdzLSpnlmILyGaAVKz3hu4OOelu-3ZX7Z1YBc5hAHAhwgYodJQyjzKYuBSLMpEtcvyDwc3A"
}
}
curl -X POST http://localhost:80/api/v1/users/login -u Sergey:WrongPassword -v
statusCode: 401; isSuccess: false;
{
"message":"Wrong Username or Password",
"data":"Bad credentials"
}
./mvnw package -DskipTests
java -Djarmode=layertools -jar demo-0.0.1-SNAPSHOT.jar extract
docker build -t alx/sb-lab:1.0 .
docker images
docker run -d -p 80:80 alx/sb-lab:1.0
docker ps -a
docker stop cd4fbea
docker start cd4fbea