mirror of https://github.com/01-edu/public.git
nprimo
11 months ago
committed by
MSilva95
5 changed files with 347 additions and 310 deletions
@ -1,87 +1,124 @@ |
|||||||
## play-with-containers |
## play-with-containers |
||||||
|
|
||||||
![Microservices](pictures/Microservices.png) |
![Microservices](./resources/Microservices.png) |
||||||
|
|
||||||
### Objectives |
### Objectives |
||||||
|
|
||||||
This project aims to discover the container concepts and tools, and practice these tools by creating a microservices architecture with docker and docker-compose. Additionally, as a cloud and DevOps student, you will gain insight into key containers and docker concepts as follows: |
This project aims to discover the container concepts and tools, and practice |
||||||
|
these tools by creating a microservices' architecture with docker and |
||||||
- `Containers`, is a unit of software that packages code and its dependencies so the application runs quickly and reliably across computing environments. |
docker-compose. Additionally, as a cloud and DevOps student, you will gain |
||||||
- `Docker`, is a set of "platform as a service" products that use OS-level virtualization to deliver software in packages called containers. |
insight into key containers and docker concepts as follows: |
||||||
- `Dockerfile`, is a text document that contains all the commands a user could call on the command line to assemble an image. |
|
||||||
- `Docker Images`, is a read-only template that contains a set of instructions for creating a container that can run on the Docker platform. |
- `Containers`, is a unit of software that packages code and its dependencies, |
||||||
- `Docker Networks`, it enables a user to link a Docker container to as many networks as he/she requires. |
so the application runs quickly and reliably across computing environments. |
||||||
- `Docker Volumes`, Volumes are the preferred mechanism for persisting data generated and used by Docker containers. |
- `Docker`, is a set of "platform as a service" products that use OS-level |
||||||
- `Docker Compose`, Compose is a tool for defining and running multi-container Docker applications. With Compose, you use a YAML file to configure your application's services. |
virtualization to deliver software in packages called containers. |
||||||
|
- `Dockerfile`, is a text document that contains all the commands a user could |
||||||
### Tips |
call on the command line to assemble an image. |
||||||
|
- `Docker Images`, is a read-only template that contains a set of instructions |
||||||
- Spend time on the theory before rushing into the practice. |
for creating a container that can run on the Docker platform. |
||||||
- Read the official documentation of Docker. |
- `Docker Networks`, it enables a user to link a Docker container to as many |
||||||
|
networks as he/she requires. |
||||||
> Any lack of understanding of the concepts of this project may affect the difficulty of future projects, take your time to understand all concepts. |
- `Docker Volumes`, Volumes are the preferred mechanism for persisting data |
||||||
|
generated and used by Docker containers. |
||||||
> Be curious and never stop searching! |
- `Docker Compose`, Compose is a tool for defining and running multi-container |
||||||
|
Docker applications. With Compose, you use a YAML file to configure your |
||||||
> Each operation in Dockerfile is a layer in the image, You must design it appropriately to avoid duplicate or useless layers in the image. |
application's services. |
||||||
|
|
||||||
> It is not recommended to use 'latest' in your Dockerfile, instead of that you can specify the version in the tag. |
### Tips |
||||||
|
|
||||||
### Instructions |
- Spend time on the theory before rushing into the practice. |
||||||
|
- Read the official documentation of Docker. |
||||||
You have to install Docker in your Linux virtual machine, you will also need it in the audit. |
|
||||||
|
> Any lack of understanding of the concepts of this project may affect the |
||||||
You have to implement this architecture: |
> difficulty of future projects, take your time to understand all concepts. |
||||||
![architecture](pictures/architecture.png) |
|
||||||
|
> Be curious and never stop searching! |
||||||
You will use the services you developed in the `crud-master` project. |
|
||||||
|
> Each operation in Dockerfile is a layer in the image, You must design it |
||||||
You are required to create `Dockerfile`s for each service and call them in your `docker-compose.yml` (Each service should have its container for optimal performance.). |
> appropriately to avoid duplicate or useless layers in the image. |
||||||
To ensure performance, the containers should be created from the penultimate stable version of either `Alpine` or `Debian`, depending on your preference. |
|
||||||
The corresponding service and Docker image must share the same name. |
> It is not recommended to use 'latest' in your Dockerfile, instead of that |
||||||
This implies that you must build your project's Docker images and you are not allowed to use pre-built Docker images or services like DockerHub, except for `Alpine` and `Debian`. |
> you can specify the version in the tag. |
||||||
|
|
||||||
#### Docker Containers: |
### Instructions |
||||||
|
|
||||||
- `inventory-database container` is a SQL database server that contains your inventory database, it must be accessible via port `5432`. |
You have to install Docker in your Linux virtual machine, you will also need it |
||||||
- `billing-database container` is a SQL database server that contains your billing database, it must be accessible via port `5432`. |
in the audit. |
||||||
- `inventory-app container` is a Node.js server that contains your inventory-app. It will be connected to the inventory database and accessible via port `8080`. |
|
||||||
- `billing-app container` is a Node.js server that contains your billing-app. It will be connected to the billing database and consuming the messages from the RabbitMQ queue. It will be accessible via port `8080`. |
You have to implement this architecture: |
||||||
- `RabbitMQ container` is a RabbitMQ server that contains the queue. |
![architecture](./resources/play-with-containers-py.png) |
||||||
- `api-gateway-app container` is a Node.js server that contains your api-gateway-app. It will forward the requests to the other services and it's accessible via port `3000`. |
|
||||||
|
You will use the services you developed in the `crud-master-py` project. |
||||||
> Containers must be restarted in case of failure! |
|
||||||
|
You are required to create a `Dockerfile` for each service and call them in |
||||||
#### Docker Volumes: |
your `docker-compose.yml` (each service should have its container for optimal |
||||||
|
performance.). To ensure performance, the containers should be created from the |
||||||
- `inventory-database volume` contains your inventory database. |
penultimate stable version of either `Alpine` or `Debian`, depending on your |
||||||
- `billing-database volume` contains your billing database. |
preference. The corresponding service and Docker image must share the same |
||||||
- `api-gateway-app volume` contains your Api gateway logs. |
name. This implies that you must build your project's Docker images, and you are |
||||||
|
not allowed to use pre-built Docker images or services like Docker Hub, except |
||||||
#### Docker Network: |
for `Alpine` and `Debian`. |
||||||
|
|
||||||
- You must have a docker network that establishes the connection between all services inside your docker host. |
#### Docker Containers: |
||||||
- Any outside request must be able to access only the `api-gateway-app` via port `3000`. |
|
||||||
|
- `inventory-db container` is a SQL database server that contains your |
||||||
> All resources in your infrastructure must be targeted and managed by docker-compose. |
inventory database, it must be accessible via port `5432`. |
||||||
|
- `billing-db container` is a SQL database server that contains your |
||||||
> You don't have to push your credentials and passwords to your repo, the credentials and passwords must be in the `.env` file, and this file must be ignored in the `.gitignore` file. |
billing database, it must be accessible via port `5432`. |
||||||
|
- `inventory-app container` is a server that contains your |
||||||
> Don't push your passwords to Git, unless you want to throw a thief's party with free drinks and no bouncers on duty! |
inventory-app. It will be connected to the inventory database and accessible |
||||||
|
via port `8080`. |
||||||
### Documentation |
- `billing-app container` is a server that contains your billing-app. |
||||||
|
It will be connected to the billing database and consuming the messages from |
||||||
You must push a `README.md` file containing full documentation of your solution (prerequisites, configuration, setup, usage, etc). |
the RabbitMQ queue. It will be accessible via port `8080`. |
||||||
|
- `rabbit-queue` is a RabbitMQ server that contains the queue. |
||||||
### Bonus |
- `api-gateway-app container` is a server that contains your |
||||||
|
API gateway. It will forward the requests to the other services, and it's |
||||||
If you complete the mandatory part successfully and you still have free time, you can implement anything that you feel deserves to be a bonus. |
accessible via port `3000`. |
||||||
|
|
||||||
Challenge yourself! |
> Containers must be restarted in case of failure! |
||||||
|
|
||||||
### Submission and audit |
#### Docker Volumes: |
||||||
|
|
||||||
You must submit the `README.md` file and all files used to create, delete and manage your infrastructure: docker-compose, Dockerfiles, scripts and so on. |
- `inventory-db volume` contains your inventory database. |
||||||
|
- `billing-db volume` contains your billing database. |
||||||
> The infrastructure must be able to be created, deleted, and managed only by docker-compose. |
- `api-gateway-app volume` contains your API gateway logs. |
||||||
> In the audit you will be asked different questions about the concepts and the practices of this project, prepare yourself! |
|
||||||
|
#### Docker Network: |
||||||
|
|
||||||
|
- You must have a docker network that establishes the connection between all |
||||||
|
services inside your docker host. |
||||||
|
- Any outside request must be able to access only the `api-gateway-app` via |
||||||
|
port `3000`. |
||||||
|
|
||||||
|
> All resources in your infrastructure must be targeted and managed by |
||||||
|
> docker-compose. |
||||||
|
|
||||||
|
> You don't have to push your credentials and passwords to your repo, the |
||||||
|
> credentials and passwords must be in the `.env` file, and this file must be |
||||||
|
> ignored in the `.gitignore` file. |
||||||
|
|
||||||
|
> Don't push your passwords to Git, unless you want to throw a thief's party |
||||||
|
> with free drinks and no bouncers on duty! |
||||||
|
|
||||||
|
### Documentation |
||||||
|
|
||||||
|
You must push a `README.md` file containing full documentation of your solution |
||||||
|
(prerequisites, configuration, setup, usage, etc.). |
||||||
|
|
||||||
|
### Bonus |
||||||
|
|
||||||
|
If you complete the mandatory part successfully, and you still have free time, |
||||||
|
you can implement anything that you feel deserves to be a bonus. |
||||||
|
|
||||||
|
Challenge yourself! |
||||||
|
|
||||||
|
### Submission and audit |
||||||
|
|
||||||
|
You must submit the `README.md` file and all files used to create, delete and |
||||||
|
manage your infrastructure: docker-compose, Dockerfiles, scripts and so on. |
||||||
|
|
||||||
|
> The infrastructure must be able to be created, deleted, and managed only by |
||||||
|
> `docker-compose`. In the audit you will be asked different questions about |
||||||
|
> the concepts and the practices of this project, prepare yourself! |
||||||
|
@ -1,223 +1,223 @@ |
|||||||
#### General |
#### General |
||||||
|
|
||||||
##### Check the Repo content |
##### Check the Repo content |
||||||
|
|
||||||
A `README.md` file and all files used to create, delete and manage the student infrastructure must be submitted in the repo. |
A `README.md` file and all files used to create, delete and manage the student infrastructure must be submitted in the repo. |
||||||
|
|
||||||
###### Are all the required files present? |
###### Are all the required files present? |
||||||
|
|
||||||
###### Does the `.env` file not exist in the repo? |
###### Was the `.env` file excluded from the git files? |
||||||
|
|
||||||
###### Are all pushed files in the repo clean of any credentials or passwords? |
###### Are all pushed files in the repo clean of any credentials or passwords? |
||||||
|
|
||||||
##### Ask the following questions to the group or student: |
##### Ask the following questions to the group or student: |
||||||
|
|
||||||
##### What are containers and what are their advantages? |
##### What are containers and what are their advantages? |
||||||
|
|
||||||
##### What is the difference between containers and virtual machines? |
##### What is the difference between containers and virtual machines? |
||||||
|
|
||||||
##### What is Docker and what is it used for? |
##### What is Docker and what is it used for? |
||||||
|
|
||||||
###### Did the student reply correctly to the questions? |
###### Did the student reply correctly to the questions? |
||||||
|
|
||||||
##### Open and read the `README.md` file provided by the student. |
##### Open and read the `README.md` file provided by the student. |
||||||
|
|
||||||
###### Does the `README.md` file contain all the required information to run and manage the solution (prerequisites, configuration, setup, usage, etc)? |
###### Does the `README.md` file contain all the required information to run and manage the solution (prerequisites, configuration, setup, usage, etc)? |
||||||
|
|
||||||
#### Check the student infrastructure: |
#### Check the student infrastructure: |
||||||
|
|
||||||
The student must implement this architecture: |
The student must implement this architecture: |
||||||
![architecture](../pictures/architecture.png) |
![architecture](../pictures/architecture.png) |
||||||
|
|
||||||
##### Run the student infrastructure: |
##### Run the student infrastructure: |
||||||
|
|
||||||
```console |
```console |
||||||
user:~$ docker-compose up |
user:~$ docker-compose up |
||||||
<...> |
<...> |
||||||
inventory-database ... done |
inventory-database ... done |
||||||
billing-database ... done |
billing-database ... done |
||||||
inventory-app ... done |
inventory-app ... done |
||||||
billing-app ... done |
billing-app ... done |
||||||
RabbitMQ ... done |
RabbitMQ ... done |
||||||
api-gateway-app ... done |
api-gateway-app ... done |
||||||
<...> |
<...> |
||||||
user:~$ |
user:~$ |
||||||
``` |
``` |
||||||
|
|
||||||
###### Does the student architecture reflect the infrastructure enforced by the subject? |
###### Does the student architecture reflect the infrastructure enforced by the subject? |
||||||
|
|
||||||
###### Does the infrastructure start correctly? |
###### Does the infrastructure start correctly? |
||||||
|
|
||||||
##### Ask the following questions to the group or student |
##### Ask the following questions to the group or student |
||||||
|
|
||||||
##### What is a microservices architecture? |
##### What is a microservices' architecture? |
||||||
|
|
||||||
##### Why do we use microservices architecture? |
##### Why do we use microservices architecture? |
||||||
|
|
||||||
##### What is a queue and what is it used for? |
##### What is a queue and what is it used for? |
||||||
|
|
||||||
##### What is RabbitMQ? |
##### What is RabbitMQ? |
||||||
|
|
||||||
###### Did the student reply correctly to the questions? |
###### Did the student reply correctly to the questions? |
||||||
|
|
||||||
#### Verify the Dockerfiles: |
#### Verify the Dockerfiles: |
||||||
|
|
||||||
###### Is there a Dockerfile for each service? |
###### Is there a Dockerfile for each service? |
||||||
|
|
||||||
###### Are all Dockerfiles based on `Debian` or `Alpine`? |
###### Are all Dockerfiles based on `Debian` or `Alpine`? |
||||||
|
|
||||||
###### There is no sensitive data in Dockerfiles or other solution files (sensitive data should only exist in `.env` file)? |
###### Are Dockerfiles or any other solution files free from sensitive data (sensitive data should only exist in `.env` file)? |
||||||
|
|
||||||
##### Ask the following questions to the group or student |
##### Ask the following questions to the group or student |
||||||
|
|
||||||
##### What is a Dockerfile? |
##### What is a Dockerfile? |
||||||
|
|
||||||
##### Explain the instructions used on the Dockerfile. |
##### Explain the instructions used on the Dockerfile. |
||||||
|
|
||||||
###### Did the student reply correctly to the questions? |
###### Did the student reply correctly to the questions? |
||||||
|
|
||||||
#### Check the Containers: |
#### Check the Containers: |
||||||
|
|
||||||
```console |
```console |
||||||
user:~$ docker ps |
user:~$ docker ps |
||||||
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES |
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES |
||||||
<...> inventory-database <...> <...> <...> 5432/tcp inventory-database |
<...> inventory-database <...> <...> <...> 5432/tcp inventory-database |
||||||
<...> billing-database <...> <...> <...> 5432/tcp billing-database |
<...> billing-database <...> <...> <...> 5432/tcp billing-database |
||||||
<...> inventory-app <...> <...> <...> 8080/tcp inventory-app |
<...> inventory-app <...> <...> <...> 8080/tcp inventory-app |
||||||
<...> billing-app <...> <...> <...> 8080/tcp billing-app |
<...> billing-app <...> <...> <...> 8080/tcp billing-app |
||||||
<...> RabbitMQ <...> <...> <...> 5672/tcp RabbitMQ |
<...> RabbitMQ <...> <...> <...> 5672/tcp RabbitMQ |
||||||
<...> api-gateway-app <...> <...> <...> 0.0.0.0:3000->3000/tcp, :::3000->3000/tcp api-gateway-app |
<...> api-gateway-app <...> <...> <...> 0.0.0.0:3000->3000/tcp, :::3000->3000/tcp api-gateway-app |
||||||
user:~$ |
user:~$ |
||||||
``` |
``` |
||||||
|
|
||||||
- `inventory-database container` is a SQL database server that contains your inventory database, it must be accessible via port `5432`. |
- `inventory-db container` is a SQL database server that contains your inventory database, it must be accessible via port `5432`. |
||||||
- `billing-database container` is a SQL database server that contains your billing database, it must be accessible via port `5432`. |
- `billing-db container` is a SQL database server that contains your billing database, it must be accessible via port `5432`. |
||||||
- `inventory-app container` is a Node.js server that contains your inventory-app. It will be connected to the inventory database and accessible via port `8080`. |
- `inventory-app container` is a Node.js server that contains your inventory-app. It will be connected to the inventory database and accessible via port `8080`. |
||||||
- `billing-app container` is a Node.js server that contains your billing-app. It will be connected to the billing database and consuming the messages from the RabbitMQ queue. It will be accessible via port `8080`. |
- `billing-app container` is a Node.js server that contains your billing-app. It will be connected to the billing database and consuming the messages from the RabbitMQ queue. It will be accessible via port `8080`. |
||||||
- `RabbitMQ container` is a RabbitMQ server that contains the queue. |
- `rabbit-queue` is a RabbitMQ server that contains the queue. |
||||||
- `api-gateway-app container` is a Node.js server that contains your api-gateway-app. It will forward the requests to the other services and it's accessible via port `3000`. |
- `api-gateway-app container` is a Node.js server that contains your api-gateway-app. It will forward the requests to the other services and it's accessible via port `3000`. |
||||||
|
|
||||||
##### Check the Container restart policy: |
##### Check the Container restart policy: |
||||||
|
|
||||||
```console |
```console |
||||||
user:~$ docker inspect -f "{{ .HostConfig.RestartPolicy }}" <container-name> |
user:~$ docker inspect -f "{{ .HostConfig.RestartPolicy }}" <container-name> |
||||||
{on-failure 0} |
{on-failure 0} |
||||||
user:~$ |
user:~$ |
||||||
``` |
``` |
||||||
|
|
||||||
###### Do all containers have the correct configuration? |
###### Do all containers have the correct configuration? |
||||||
|
|
||||||
###### Are the containers configured to restart in case of failure? |
###### Are the containers configured to restart in case of failure? |
||||||
|
|
||||||
#### Check the Docker volumes: |
#### Check the Docker volumes: |
||||||
|
|
||||||
```console |
```console |
||||||
user:~$ docker volume ls |
user:~$ docker volume ls |
||||||
DRIVER VOLUME NAME |
DRIVER VOLUME NAME |
||||||
<...> inventory-database |
<...> inventory-database |
||||||
<...> billing-database |
<...> billing-database |
||||||
<...> api-gateway-app |
<...> api-gateway-app |
||||||
user:~$ |
user:~$ |
||||||
``` |
``` |
||||||
|
|
||||||
- `inventory-database volume` contains the inventory database. |
- `inventory-database volume` contains the inventory database. |
||||||
- `billing-database volume` contains the billing database. |
- `billing-database volume` contains the billing database. |
||||||
- `api-gateway-app volume` contains the Api gateway logs. |
- `api-gateway-app volume` contains the API gateway logs. |
||||||
|
|
||||||
###### Do all volumes have the correct configuration? |
###### Do all volumes have the correct configuration? |
||||||
|
|
||||||
##### Ask the following questions to the group or student |
##### Ask the following questions to the group or student |
||||||
|
|
||||||
##### What is a Docker volume? |
##### What is a Docker volume? |
||||||
|
|
||||||
##### Why do we use Docker volumes? |
##### Why do we use Docker volumes? |
||||||
|
|
||||||
###### Did the student reply correctly to the questions? |
###### Did the student reply correctly to the questions? |
||||||
|
|
||||||
#### Check the solution network: |
#### Check the solution network: |
||||||
|
|
||||||
###### Is the connection to the api-gateway-app the only one exposed from outside of the Docker host? |
###### Is the connection to the api-gateway-app the only one exposed from outside of the Docker host? |
||||||
|
|
||||||
##### Ask the following questions to the group or student |
##### Ask the following questions to the group or student |
||||||
|
|
||||||
##### What is the Docker network? |
##### What is the Docker network? |
||||||
|
|
||||||
##### Why do we use the Docker network? |
##### Why do we use the Docker network? |
||||||
|
|
||||||
###### Did the student reply correctly to the questions? |
###### Did the student reply correctly to the questions? |
||||||
|
|
||||||
#### Check the Docker images: |
#### Check the Docker images: |
||||||
|
|
||||||
```console |
```console |
||||||
user:~$ docker images |
user:~$ docker images |
||||||
REPOSITORY TAG IMAGE ID CREATED SIZE |
REPOSITORY TAG IMAGE ID CREATED SIZE |
||||||
inventory-database <...> <...> <...> <...> |
inventory-database <...> <...> <...> <...> |
||||||
billing-database <...> <...> <...> <...> |
billing-database <...> <...> <...> <...> |
||||||
inventory-app <...> <...> <...> <...> |
inventory-app <...> <...> <...> <...> |
||||||
billing-app <...> <...> <...> <...> |
billing-app <...> <...> <...> <...> |
||||||
RabbitMQ <...> <...> <...> <...> |
RabbitMQ <...> <...> <...> <...> |
||||||
api-gateway-app <...> <...> <...> <...> |
api-gateway-app <...> <...> <...> <...> |
||||||
user:~$ |
user:~$ |
||||||
``` |
``` |
||||||
|
|
||||||
###### Is there a Docker image for each service with the same service name? |
###### Is there a Docker image for each service with the same service name? |
||||||
|
|
||||||
##### Ask the following questions to the group or student |
##### Ask the following questions to the group or student |
||||||
|
|
||||||
##### What is a Docker image? |
##### What is a Docker image? |
||||||
|
|
||||||
##### Why do we use Docker images? |
##### Why do we use Docker images? |
||||||
|
|
||||||
##### Where can we find some public Docker images? |
###### Did the student reply correctly to the questions? |
||||||
|
|
||||||
###### Did the student reply correctly to the questions? |
#### Inventory API Endpoints |
||||||
|
|
||||||
#### Inventory API Endpoints |
##### Open Postman and make a `POST` request to `http://[GATEWAY_IP]:[GATEWAY_PORT]/api/movies/` address with the following body as `Content-Type: application/json`: |
||||||
|
```json |
||||||
##### Open Postman and make a `POST` request to `http://[GATEWAY_IP]:[GATEWAY_PORT]/api/movies/` address with the following body as `Content-Type: application/json`: |
{ |
||||||
```json |
"title": "A new movie", |
||||||
{ |
"description": "Very short description" |
||||||
"title": "A new movie", |
} |
||||||
"description": "Very short description" |
``` |
||||||
} |
|
||||||
``` |
###### Can you confirm the response was the success code `200`? |
||||||
|
|
||||||
###### Can you confirm the response was the success code `200`? |
##### In Postman make a `GET` request to `http://[GATEWAY_IP]:[GATEWAY_PORT]/api/movies/` address. |
||||||
|
|
||||||
##### In Postman make a `GET` request to `http://[GATEWAY_IP]:[GATEWAY_PORT]/api/movies/` address. |
###### Can you confirm the response was success code `200` and the body of the response is in `json` with the information of the last added movie? |
||||||
|
|
||||||
###### Can you confirm the response was success code `200` and the body of the response is in `json` with the information of the last added movie? |
#### Billing API Endpoints |
||||||
|
|
||||||
#### Billing API Endpoints |
##### Open Postman and make a `POST` request to `http://[GATEWAY_IP]:[GATEWAY_PORT]/api/billing/` address with the following body as `Content-Type: application/json`: |
||||||
|
```json |
||||||
##### Open Postman and make a `POST` request to `http://[GATEWAY_IP]:[GATEWAY_PORT]/api/billing/` address with the following body as `Content-Type: application/json`: |
{ |
||||||
```json |
"user_id": "20", |
||||||
{ |
"number_of_items": "99", |
||||||
"user_id": "20", |
"total_amount": "250" |
||||||
"number_of_items": "99", |
} |
||||||
"total_amount": "250" |
``` |
||||||
} |
|
||||||
``` |
###### Can you confirm the response was success code `200`? |
||||||
|
|
||||||
###### Can you confirm the response was success code `200`? |
##### Stop the billing-app container |
||||||
|
|
||||||
##### Stop the billing-app container |
###### Can you confirm the `billing-app` container was correctly stopped? |
||||||
|
|
||||||
###### Can you confirm the `billing-app` container was correctly stopped? |
##### Open Postman and make a `POST` request to `http://[GATEWAY_IP]:[GATEWAY_PORT]/api/billing/` address with the following body as `Content-Type: application/json`: |
||||||
|
```json |
||||||
##### Open Postman and make a `POST` request to `http://[GATEWAY_IP]:[GATEWAY_PORT]/api/billing/` address with the following body as `Content-Type: application/json`: |
{ |
||||||
```json |
"user_id": "22", |
||||||
{ |
"number_of_items": "10", |
||||||
"user_id": "22", |
"total_amount": "50" |
||||||
"number_of_items": "10", |
} |
||||||
"total_amount": "50" |
``` |
||||||
} |
|
||||||
``` |
###### Can you confirm the response was success code `200` even if the `billing_app` is not working? |
||||||
|
|
||||||
###### Can you confirm the response was success code `200` even if the `billing_app` is not working? |
#### Bonus |
||||||
|
|
||||||
#### Bonus |
###### +Did the student use his/her own `crud-master-py` solution? |
||||||
|
|
||||||
###### +Did the student add any optional bonus? |
###### +Did the student add any optional bonus? |
||||||
|
|
||||||
###### +Is this project an outstanding project? |
###### +Is this project an outstanding project? |
||||||
|
Before Width: | Height: | Size: 525 KiB |
Before Width: | Height: | Size: 396 KiB After Width: | Height: | Size: 396 KiB |
After Width: | Height: | Size: 560 KiB |
Loading…
Reference in new issue