@startuml !include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Container.puml LAYOUT_WITH_LEGEND() title Containers of our Awesome Online Store Person(customer, Customer, Customer of our online store) System_Ext(customerBrowser, "Customer's Web Browser", "Either a desktop or mobile Web Browser") System_Ext(paymentBroker, "Third party Payment Broker", "Responsible for processing digital transfers in several forms like credit, debit, etc") System_Ext(shipmentCompany, "Third party Shipment Company", "Responsible for delivering goods from our store to our customers") System_Boundary(awesomeOnlineStore, "Awesome Online Store") { Container(aosWebApp, "Web App", ReactJS, "Frontend responsible for the UI of the online store") Container(aosApiGateway, "API Gateway", "?", "API Gateway responsible for exposing microservices' Rest API's for the webapp") Container(aosStockMicroservice, "Stock Microservice", "Java/Spring Boot", "Microservice responsible for handling the Store's Stock of products") Container(aosPaymentsMicroservice, "Payments Microservice", "Java/Spring Boot", "Microservice responsible for handling order payments") Container(aosOrdersMicroservice, "Orders Microservice", "Java/Spring Boot", "Microservice responsible for handling users orders") Container(aosNotificationsMicroservice, "Notifications Microservice", "Java/Spring Boot", "Microservice responsible for handling user notifications like email, sms...") Container(aosShipmentMicroservice, "Shipments Microservice", "Java/Spring Boot", "Microservice responsible for handling shipment") } Lay_D(customerBrowser, awesomeOnlineStore) Rel(customer, customerBrowser, uses) Rel(customerBrowser, aosWebApp, makes requests to, "HTTP") Rel(aosWebApp, aosApiGateway, makes requests to, "HTTP/Json") Rel(aosApiGateway, aosStockMicroservice, makes requests to, "HTTP/Json") Rel(aosApiGateway, aosPaymentsMicroservice, makes requests to, "HTTP/Json") Rel(aosApiGateway, aosOrdersMicroservice, makes requests to, "HTTP/Json") Rel(aosPaymentsMicroservice, paymentBroker, sends payments requests, "HTTP/Json") Rel(aosOrdersMicroservice, aosPaymentsMicroservice, sends async events, "HTTP/Json") Rel(aosOrdersMicroservice, aosStockMicroservice, sends async messages/events, "HTTP/Json") Rel(aosOrdersMicroservice, aosShipmentMicroservice, sends async events, "HTTP/Json") Rel(aosShipmentMicroservice, shipmentCompany, sends delivering orders requests, "HTTP/Json") Rel_U(aosOrdersMicroservice, aosNotificationsMicroservice, sends async messages, "HTTP/Json") Rel(aosNotificationsMicroservice, customer, sends emails to, "smtp/pop3") @enduml