|
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- ---
- id: c4
- title: C4
- ---
-
- ## C4 Diagrams
-
- [C4](https://c4model.com/) is a standardized model to visualize software architecture.
- You can generate C4 diagrams by using the node and edge classes from the `diagrams.c4` package:
-
- ```python
- from diagrams import Diagram
- from diagrams.c4 import Person, Container, Database, System, SystemBoundary, Relationship
-
- graph_attr = {
- "splines": "spline",
- }
-
- with Diagram("Container diagram for Internet Banking System", direction="TB", graph_attr=graph_attr):
- customer = Person(
- name="Personal Banking Customer", description="A customer of the bank, with personal bank accounts."
- )
-
- with SystemBoundary("Internet Banking System"):
- webapp = Container(
- name="Web Application",
- technology="Java and Spring MVC",
- description="Delivers the static content and the Internet banking single page application.",
- )
-
- spa = Container(
- name="Single-Page Application",
- technology="Javascript and Angular",
- description="Provides all of the Internet banking functionality to customers via their web browser.",
- )
-
- mobileapp = Container(
- name="Mobile App",
- technology="Xamarin",
- description="Provides a limited subset of the Internet banking functionality to customers via their mobile device.",
- )
-
- api = Container(
- name="API Application",
- technology="Java and Spring MVC",
- description="Provides Internet banking functionality via a JSON/HTTPS API.",
- )
-
- database = Database(
- name="Database",
- technology="Oracle Database Schema",
- description="Stores user registration information, hashed authentication credentials, access logs, etc.",
- )
-
- email = System(name="E-mail System", description="The internal Microsoft Exchange e-mail system.", external=True)
-
- mainframe = System(
- name="Mainframe Banking System",
- description="Stores all of the core banking information about customers, accounts, transactions, etc.",
- external=True,
- )
-
- customer >> Relationship("Visits bigbank.com/ib using [HTTPS]") >> webapp
- customer >> Relationship("Views account balances, and makes payments using") >> [spa, mobileapp]
- webapp >> Relationship("Delivers to the customer's web browser") >> spa
- spa >> Relationship("Make API calls to [JSON/HTTPS]") >> api
- mobileapp >> Relationship("Make API calls to [JSON/HTTPS]") >> api
-
- api >> Relationship("reads from and writes to") >> database
- api >> Relationship("Sends email using [SMTP]") >> email
- api >> Relationship("Makes API calls to [XML/HTTPS]") >> mainframe
- customer << Relationship("Sends e-mails to") << email
- ```
-
- It will produce the following diagram:
-
- ![c4](/img/c4.png)
|