十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

PostgREST 文档图表生成指南:使用 erd 与 PlantUML 重建 ERD 与架构图

PostgREST 文档图表生成指南:使用 erd 与 PlantUML 重建 ERD 与架构图 PostgREST 文档图表生成指南使用 erd 与 PlantUML 重建 ERD 与架构图【免费下载链接】postgrestREST API for any Postgres database项目地址: https://gitcode.com/GitHub_Trending/po/postgrest本文以 PostgREST 官方文档的图表生成说明docs/_diagrams/README.md为骨架完整讲解其文档体系中 ERD实体关系图与 UML架构图的生成工具链如何用 erd 将.er源文件编译为 PNG如何用 PlantUML 将.uml源文件编译为 SVG含暗色模式变体并结合仓库内全部.er/.uml源文件与docs/_static中的渲染产物帮助读者掌握可复现的文档图表重建方法以及 PostgREST 架构图与数据库关系图的真实表达内容。一、docs/_diagrams 目录概览PostgREST 文档仓库将所有图表源文件集中存放在 docs/_diagrams 目录下与渲染后的图片产物存放于 docs/_static分离。这一结构保证了文档构建的可追溯性任何图表修改都从源文件开始再重新编译生成图片。目录内部按图表类型划分为两个子目录er/存放 7 个erd工具使用的.er源文件实体关系图uml/存放 PlantUML 的.uml源文件架构图其中dark/子目录保存暗色模式变体。两类图表的源文件与产物对应关系如下类型源文件渲染产物docs/_staticERDer/film.erfilm.pngERDer/employees.eremployees.pngERDer/orders.erorders.pngERDer/users.erusers.pngERDer/boxoffice.erboxoffice.pngERDer/premieres.erpremieres.pngERDer/presidents.erpresidents.pngUMLuml/arch.umlarch.svg、arch-dark.svgUMLuml/sch-iso.umlsch-iso.svg、sch-iso-dark.svg二、ERD用 erd 工具从 .er 源文件生成实体关系图2.1 工具来源与安装原文档明确指出PostgREST 文档中的全部 ER 图均使用开源工具erd项目主页为 github.com/BurntSushi/erd由 Rust 编写创建。erd 是一个命令行工具从描述实体与关系的.er文本文件生成实体关系图。安装方式为前往 erd 的 GitHub Releases 页面下载对应平台的静态可执行文件。文档示例中使用的文件名为erd_static-x86-64即面向 x86-64 Linux 平台的静态编译版本。静态编译意味着该可执行文件不依赖系统动态库下载解压后即可直接运行# 下载并解压后赋予执行权限即可使用 ./erd_static-x86-64 -i ./er/film.er -o ../_static/film.png2.2 基本命令用法erd 的调用形式非常简洁通过-i指定输入.er文件通过-o指定输出图片路径。以仓库中的示例命令为例在docs/_diagrams目录下执行./erd_static-x86-64 -i ./er/film.er -o ../_static/film.png该命令将er/film.er源文件编译为../_static/film.png即渲染产物被写入 docs/_static/film.png。部分.er源文件如 er/employees.er、er/orders.er、er/users.er、er/presidents.er在文件头部的注释中标注了构建参数# Build using: -e ortho-e参数用于选择布局引擎ortho表示使用正交布局直线以直角折线连接使多实体关系图的边更加规整。因此对于这些文件重建命令应追加该参数./erd_static-x86-64 -e ortho -i ./er/employees.er -o ../_static/employees.png2.3 .er 源文件语法解读erd 的.er文件采用纯文本声明式语法PostgREST 文档的 7 个源文件覆盖了其核心语法要素。下面以最完整的 er/film.er 为例逐段解读。1字体声明与实体定义文件开头通过entity/relationship关键字设置实体与关系的字体族entity {font: FreeSans} relationship {font: FreeSerif}随后用[实体名]声明实体实体内的字段行通过前缀表达约束语义*前缀主键如*id前缀外键如director_id*组合前缀既是主键又是外键如 Roles 表中的*film_id、*actor_id无前缀普通属性如title、year、rating。以Films实体为例[Films] *id director_id title year rating language2关系声明关系声明位于实体定义之后使用基数符号*表示多1表示一?表示可选与连线符--组合Roles *--1 Actors Roles *--1 Films Nominations *--1 Competitions Nominations *--1 Films Films *--1 Directors Films 1--1 Technical_Specsfilm.er 中声明了 6 组关系语义分别为多个 Roles 对应一个 Actor多对一、多个 Roles 对应一部 Film、多个 Nominations 对应一个 Competition、多个 Nominations 对应一部 Film、多部 Films 对应一个 Director外键director_id指向 Directors、一部 Films 严格对应一条 Technical_Specs一对一外键film_id同时为主键*。3反引号转义与自引用er/boxoffice.er 与 er/premieres.er 展示了用反引号...表示省略字段的写法[Films] *id director_id title ...er/employees.er 与 er/presidents.er 展示了**自引用递归关系**的声明方式——雇员表通过supervisor_id引用自身总统表通过predecessor_id引用自身Employees 1--* Employees # 一名上级对应多名下属 Presidents 1--? Presidents # 一名总统至多有一位前任er/orders.er 则展示了同一实体被多次引用的场景Orders 通过billing_address_id与shipping_address_id两个外键分别指向 Addresses因此声明了两次Orders *--1 Addresses。这类图在文档中被用来讲解资源嵌入Resource Embedding时多路径关系的含义。2.4 字体依赖GNU FreeFont原文档特别说明这些 ER 图使用的字体属于GNU FreeFont家族可从 GNU FTP 站点下载ftp.gnu.org/gnu/freefont/。FreeFont 是一套自由授权的开源字体集合包含 FreeSans、FreeSerif、FreeMono 三种风格恰好对应entity/relationship声明中的字体配置。若本地系统未安装这些字体erd 渲染出的图片可能出现字体回退或显示异常因此在重建图表前应确保字体可用。三、UML用 PlantUML 生成架构图含暗色模式3.1 工具与基本命令PostgREST 文档中的 UML 架构图使用PlantUML创建。PlantUML 通过纯文本描述语言startuml/enduml包裹生成 UML 图并支持多种输出格式这里使用-tsvg输出 SVG 矢量图以适配文档站点的缩放展示需求。原文档给出的基本命令如下在docs/_diagrams目录下执行plantuml -tsvg uml/arch.uml -o ../../_static-tsvg指定输出格式为 SVG-o ../../_static指定输出目录相对当前工作目录最终产物即 docs/_static/arch.svg。同理schema 隔离图由 uml/sch-iso.uml 生成 docs/_static/sch-iso.svg。3.2 暗色模式同一图源双份产物PlantUML 每次只从一个源文件生成一张图无法在单次输出中同时满足明暗两套文档主题。PostgREST 的解决方案是为每个 UML 源文件维护一个暗色模式变体存放在uml/dark/子目录下。以 uml/arch.uml 为例其暗色版本 uml/dark/arch-dark.uml 的内容极为精简——仅通过 PlantUML 的!include指令引用原文件startuml !include ../arch.uml enduml即暗色变体本身不重复描述图形内容而是复用浅色源文件再通过编译参数-darkmode切换配色。重建命令为plantuml -tsvg -darkmode uml/dark/arch-dark.uml -o ../../../_static该命令生成 docs/_static/arch-dark.svg。uml/dark/sch-iso-dark.uml 同样采用!include ../sch-iso.uml的方式复用浅色源文件生成 docs/_static/sch-iso-dark.svg。注意原文档中的输出路径按其在docs/_diagrams下的相对层次书写dark/子目录使路径多一级../实际执行时请根据你的工作目录相应调整。3.3 架构图源文件内容解读arch.umluml/arch.uml 是 PostgREST 整体架构图docs/_static/arch.svg的源文件其内容是对整个项目组件关系的高度凝练可以从源码结构得到印证PostgREST 进程内部组件流对应 src/library/PostgREST 目录下的模块HTTPAPI - [Auth] - [ApiRequest] - [Plan] - [Query] - Connection Pool [Plan] -u- [Schema Cache] : uses [Schema Cache] - () Listener : reloads [Config] -r~ Listener [Admin] -r- () HTTPADMINAuth负责 JWT 校验对应 src/library/PostgREST/Auth 模块ApiRequest负责解析 URL 语法对应 src/library/PostgREST/ApiRequest.hsPlan生成内部 AST对应 src/library/PostgREST/PlanQuery生成 SQL对应 src/library/PostgREST/QuerySchema Cache缓存数据库 schema 元信息由Listener通过 PostgreSQL 的LISTEN会话在 schema 变更时触发重载对应 src/library/PostgREST/SchemaCache.hs 与 src/library/PostgREST/AppState/Reload.hsConfig解析命令行与配置文件对应 src/library/PostgREST/Config.hsCLI对应 src/library/PostgREST/CLI.hsAdmin对应 src/library/PostgREST/Admin.hs。图中还以note为每个关键组件标注了职责说明如Auth底部注记 Validates the JWT、ApiRequest注记 Parses the URL syntax、Query注记 Generates the SQL这些注记直接概括了各模块的核心功能。PostgreSQL 侧结构图的下半部分用database容器描述数据库内部组织——Authorization节点Roles、GRANT、RLS 授权体系、API schema节点Functions、Views 组成的暴露层、以及Tables, extensions实体区域体现 PostgREST 的 schema 隔离思想详见 docs/explanations/schema_isolation.rst。外部参与方user通过Proxy如 nginx 反向代理携带 JWT 访问HTTPAPI或经ExternalAuth外部认证服务登录换取 JWToperator则通过管理端口HTTPADMIN与CLI运维 PostgREST。此外arch.uml 为每个组件都关联了url跳转目标指向 docs/explanations 与 docs/references 中的对应章节使得该架构图在文档站点中具备可点击导航能力。3.4 Schema 隔离图源文件sch-iso.umluml/sch-iso.uml 用于生成 docs/_static/sch-iso.svg直观展示 PostgREST 推荐的 schema 隔离部署模型database PostgreSQL { node public { rectangle tables_public as tables } node extensions as **extensions** {} node API as size:20api { rectangle vf_api as views functions } tables_public -- vf_api extensions -- vf_api } vf_api -[thickness3]- () PostgREST该图表达的核心模式是PostgREST 只直接连接名为api的 schema该 schema 通过视图与函数vf_api间接暴露底层publicschema 的表tables_public与扩展extensions从而在 API 与物理表之间建立隔离层避免客户端直连基表。该模式在 docs/explanations/schema_isolation.rst 中有完整论述。文件头部还使用了skinparam linetype ortho与节点透明化等 PlantUML 皮肤参数以控制连线走向与视觉风格。四、图表产物与文档的集成方式渲染产物通过文档源文件reStructuredText被引入文档站点docs/explanations/architecture.rst 以object data../_static/arch.svg方式嵌入架构图使用 SVG 的object标签以便随明暗主题加载不同版本docs/explanations/schema_isolation.rst 同时引用sch-iso.svg与sch-iso-dark.svg两套图docs/references/api/resource_embedding.rst 以.. image:: ../../_static/film.png引入 ERD 示例图用于讲解多对一、多对多等嵌入关系。也就是说重建任何一张图后只需按上述约定把产物覆盖到 docs/_static 下对应文件文档构建即可自动采用新图无需改动文档正文。五、一键重建全部图表的命令清单综合原文档与各源文件的注释可在docs/_diagrams目录下执行以下命令完整重建全部文档图表# ---- ERD用 erd 工具---- ./erd_static-x86-64 -i ./er/film.er -o ../_static/film.png ./erd_static-x86-64 -e ortho -i ./er/employees.er -o ../_static/employees.png ./erd_static-x86-64 -e ortho -i ./er/orders.er -o ../_static/orders.png ./erd_static-x86-64 -e ortho -i ./er/users.er -o ../_static/users.png ./erd_static-x86-64 -i ./er/boxoffice.er -o ../_static/boxoffice.png ./erd_static-x86-64 -i ./er/premieres.er -o ../_static/premieres.png ./erd_static-x86-64 -e ortho -i ./er/presidents.er -o ../_static/presidents.png # ---- UML用 PlantUML输出 SVG---- plantuml -tsvg uml/arch.uml -o ../../_static plantuml -tsvg -darkmode uml/dark/arch-dark.uml -o ../../../_static plantuml -tsvg uml/sch-iso.uml -o ../../_static plantuml -tsvg -darkmode uml/dark/sch-iso-dark.uml -o ../../../_static执行前需确认两项前置条件erd 可执行文件已下载就绪系统已安装 GNU FreeFont 字体族FreeSans / FreeSerif / FreeMono。命令中的相对路径均以docs/_diagrams为基准若在其它目录执行请相应调整。六、小结PostgREST 文档的图表体系遵循源文件 编译工具 静态产物的工程化流程ERD 由 erd 工具消费.er文本源文件支持主外键标注、基数关系、自引用、正交布局等特性UML 由 PlantUML 消费.uml源文件并通过!include复用源文件配合-darkmode参数产出明暗双版本 SVG。理解这一套流程不仅能在修改文档图表时保证可复现也能从 uml/arch.uml 与 uml/sch-iso.uml 两个源文件中快速把握 PostgREST 的整体架构与 schema 隔离设计。【免费下载链接】postgrestREST API for any Postgres database项目地址: https://gitcode.com/GitHub_Trending/po/postgrest创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表