」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 圖表即代碼:為視覺內容建立動態和互動式文檔

圖表即代碼:為視覺內容建立動態和互動式文檔

發佈於2025-01-26
瀏覽:620

在本文中,我将逐步指导您使用图表即代码工具创建动态和交互式可视化文档。我们将以编程方式生成图表,而不是静态图像,确保它们始终是最新的且易于维护。

Diagram-as-Code: Creating Dynamic and Interactive Documentation for Visual Content


?图表作为代码

图表即代码是一种允许您通过代码而不是传统图形工具创建图表的方法。您可以在文本文件中编写代码来定义图表的结构、组件和连接,而不是手动构建图表。

然后,该代码被转换为图形图像,从而更容易在软件项目中集成和记录,这对于以编程方式创建和更新架构和流程图特别有用。


什么是图表?

Diagrams 是一个 ?Python 库,它实现了“图即代码”方法,使您能够通过代码创建架构基础设施图和其他类型的图。借助图表,您只需几行代码即可轻松定义云基础设施组件(例如 AWS、Azure 和 GCP)、网络元素、软件服务等。

?图即代码的好处

  • 图表作为代码的表示:直接从代码创建和更新图表,确保敏捷项目的可维护性。
  • 自动化文档:从代码生成视觉效果,使图表与当前架构保持一致。
  • 更改控制:跟踪图表随时间的修改。
  • 增强清晰度:通过清晰、共享的视觉效果提高对复杂系统的理解。
  • ✏️ 可定制:用灵活且定制的视觉效果表示云基础设施、工作流程或数据管道。

教程

?库安装

我当前在本教程中使用版本“0.23.4”。

!pip install diagrams=='0.23.4'

?图表:节点

该库允许您以编程方式创建架构图,使用节点来表示不同的基础设施组件和服务。


节点类型

图中的节点代表来自不同云服务提供商的组件以及其他架构元素。以下是可用节点的主要类别:

  • ☁️ 云提供商:AWS (Amazon Web Services)、Azure、GCP、IBM Cloud、阿里云、Oracle Cloud、DigitalOcean 等。
  • 本地部署:代表物理上位于公司场所的基础设施。
  • Kubernetes (K8S):容器编排系统,用于自动化容器化应用程序的部署、扩展和管理(以船轮表示,象征控制和导航)。
  • ?️ OpenStack:用于创建和管理公共云和私有云的开源软件平台。
  • 通用:通用节点,可以代表特定于提供者的节点未专门涵盖的任何组件(交叉工具,代表一个类别中的不同工具)。
  • ☁️ SaaS(软件即服务):表示通过互联网作为服务交付的应用程序,例如 Snowflake、聊天服务(Slack、Teams、Telegram 等)、安全性(例如 Okta ),或社交网络(在 SaaS 概念中划掉了电话和云)。
  • 自定义:允许用户使用存储在特定文件夹中的 PNG 图标自定义图表。这对于表示默认节点(划掉的自定义工具)未涵盖的基础设施组件非常有用。

?编程语言

Diagrams库允许您使用不同的节点来表示各种编程语言。这些节点有助于在图表中指示架构的任何部分是否使用以特定编程语言开发的脚本或组件。

下面,我们将展示库中所有可用的语言。如果缺少任何语言,您可以通过将相应的徽标上传到特定文件夹来添加自定义节点。

# Create the diagram object
with diagrams.Diagram("Programming Languages", show=False, filename="languages"):
    # Get all the languages available in this library
    languages = [item for item in dir(diagrams.programming.language) if item[0] != '_']

    # Divide the representation in two lines
    mid_index = len(languages) // 2
    first_line = languages[:mid_index]
    second_line = languages[mid_index:]

    # Add nodes in the first row
    prev_node = None

    for language in first_line:
        current_node = eval(f"diagrams.programming.language.{language}(language)")
        if prev_node is not None:
            prev_node >> current_node
        prev_node = current_node

    # Add nodes in the second row
    prev_node = None

    for language in second_line:
        current_node = eval(f"diagrams.programming.language.{language}(language)")
        if prev_node is not None:
            prev_node >> current_node
        prev_node = current_node

Image("languages.png")

Diagram-as-Code: Creating Dynamic and Interactive Documentation for Visual Content


☁️ AWS(亚马逊网络服务)

我们可以使用Amazon节点,它分为几个类别,例如:

  • 分析和业务:aws.analytics、aws.business
  • 计算和存储:aws.compute、aws.storage、aws.cost
  • 数据库和开发工具:aws.database、aws.devtools
  • 集成和管理:aws.integration、aws.management
  • 机器学习和移动:aws.ml、aws.mobile
  • 网络和安全:aws.network、aws.security
  • 其他:aws.blockchain、aws.enduser、aws.engagement、aws.game、aws.general、aws.iot、aws.media、aws.migration、aws.quantum、aws.robotics、aws。卫星

接下来,我们将代表这些类别之一以可视化 aws.database 中的可用节点。

from diagrams import Diagram
from IPython.display import Image
import diagrams.aws.database as aws_database


database_components = []
for item in dir(aws_database):
    if item[0] != '_':
        if not any(comp.startswith(item) or item.startswith(comp) for comp in database_components):
            database_components.append(item)


with Diagram("AWS Database", show=False, filename="aws_database"):
    mid_index = len(database_components) // 2
    first_line = database_components[:mid_index]
    second_line = database_components[mid_index:]


    prev_node = None
    for item_database in first_line:
        current_node = eval(f"aws_database.{item_database}(item_database)")
        if prev_node is not None:
            prev_node >> current_node
        prev_node = current_node


    prev_node = None
    for item_database in second_line:
        current_node = eval(f"aws_database.{item_database}(item_database)")
        if prev_node is not None:
            prev_node >> current_node
        prev_node = current_node

Image("aws_database.png")

Diagram-as-Code: Creating Dynamic and Interactive Documentation for Visual Content


☁️ 使用案例

现在,让我们创建一个简单的蓝图,对应于在 AWS 上导入数据集并训练机器学习模型

from diagrams import Diagram, Cluster
from diagrams.aws.storage import S3
from diagrams.aws.analytics import Glue, Athena
import diagrams.aws.ml as ml
from diagrams.aws.integration import StepFunctions
from diagrams.aws.compute import Lambda
from diagrams.aws.network import APIGateway
from IPython.display import Image

with Diagram("AWS Data Processing Pipeline", show=False):

    lambda_raw = Lambda('Get Raw Data')
    # Buckets de S3
    with Cluster("Data Lake"):
        s3_rawData = S3("raw_data")
        s3_stage = S3("staging_data")
        s3_data_capture = S3("data_capture")


    athena = Athena("Athena")
    s3_rawData >> athena
    s3_stage >> athena
    s3_data_capture >> athena

    #  Step Functions Pipeline
    with Cluster("Data Processing Pipeline"):
        step_functions = StepFunctions("Pipeline")

        # Glue Jobs in Step Functions
        with Cluster("Glue Jobs"):
            data_quality = Glue("job_data_quality")
            transform = Glue("job_data_transform")
            dataset_preparation = Glue("job_dataset_model")

        # Define Step Functions Flows
        step_functions >> data_quality >> transform >> dataset_preparation
        s3_rawData >> data_quality

    # SageMaker for model training and deployment
    with Cluster("SageMaker Model Deployment"):
        train_model = ml.SagemakerTrainingJob("job_train_model")
        eval_model = ml.SagemakerGroundTruth("job_evaluate_model")
        endpoint = ml.SagemakerModel("model_enpoint")

    # API Gateway and Lambda for the endpoint
    api_gateway = APIGateway("API_gateway")
    lambda_fn = Lambda("invoke_endpoint")

    # Connection
    lambda_raw >> s3_rawData
    s3_stage >> train_model >> eval_model >> endpoint
    endpoint >> lambda_fn >> api_gateway
    endpoint >> s3_data_capture
    dataset_preparation >> train_model


Image("aws_data_processing_pipeline.png")

Diagram-as-Code: Creating Dynamic and Interactive Documentation for Visual Content


存储库

下面是全部代码的链接,如果觉得有用,可以给个star⭐️并关注我,接收新文章通知。这将帮助我在技术社区中成长并创造更多内容。

Diagram-as-Code: Creating Dynamic and Interactive Documentation for Visual Content 罗米门德斯 / 图表即代码

有关如何使用“文档为图表”方法创建文档项目的教程

Diagram-as-Code: Creating Dynamic and Interactive Documentation for Visual Content


?图表即代码:为视觉内容创建动态和交互式文档

图表即代码是一种允许您通过代码而不是传统图形工具创建图表的方法。您可以在文本文件中编写代码来定义图表的结构、组件和连接,而不是手动构建图表。

Diagram-as-Code: Creating Dynamic and Interactive Documentation for Visual Content

然后,该代码被转换为图形图像,从而更容易在软件项目中集成和记录,这对于以编程方式创建和更新架构和流程图特别有用。

什么是图表?

Diagrams 是一个 ?Python 库,它实现了“图即代码”方法,使您能够通过代码创建架构基础设施图和其他类型的图。借助图表,您只需几行代码即可轻松定义云基础设施组件(例如 AWS、Azure 和 GCP)、网络元素、软件服务等。

?图即代码的好处

  • ?…


在 GitHub 上查看


如果您想了解如何使用此管道实现文档站点,您可以阅读我在以下链接中发布的文章


?参考

  1. 图表: https://diagrams.mingrammer.com/
版本聲明 本文轉載於:https://dev.to/r0mymendez/diagram-as-code-creating-dynamic-and-interactive-documentation-for-visual-content-2p93?1如有侵犯,請聯繫[email protected]刪除
最新教學 更多>

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3