使用开源技术通过一个命令立即创建可执行应用程序,在浏览器中使用 VSCode 进行自定义,并将其容器化以进行部署。
创建单个端点 API 或“Hello, World!”并不难。页。但是如何创建一个完整的微服务:具有CRUD 服务的多个端点、业务逻辑执行和一个多页面应用程序?嗯,那是一匹完全不同的马。
在本文中,我们将展示如何使用开源技术:
- 使用一个命令立即创建可执行应用程序
- 在浏览器中使用 VSCode 对其进行自定义:消除安装/设置摩擦
- 将其容器化以进行部署
使用一个命令创建项目
API Logic Server 是一个开源Python项目,由以下部分组成,如官方文档中所述:
- 一组用于项目执行的运行时(API、Web 服务器、ORM、规则引擎)
- 用于创建可执行项目的 CLI(命令语言界面),可以在 IDE 中自定义,例如 VSCode 或 PyCharm
它作为标准 Python 运行(pip)安装,或在Docker下。在这里,我们使用 Docker 下的 CLI 创建我们的项目,使用以下ApiLogicServer create命令:
val@Vals-MBP-16 dockers % docker run -it --name api_logic_server --rm --net dev-network -p 5656:5656 -p 5002:5002 -v ${PWD}:/localhost apilogicserver/api_logic_server
Welcome to API Logic Server, 5.03.27
api_logic_server@bc1bc88dc6ce:~$ ApiLogicServer create \
--db_url= \
--project_name=/localhost/ApiLogicProject
刚刚发生了很多事情:可执行的 API 和应用程序
刚刚发生的很多事情极大地加速了您的项目。
该ApiLogicServer create命令
自省您的数据库以
创建可执行的 API 和应用程序。
此处使用了默认数据库:预先提供的 Northwind 版本(客户、订单等)。该项目已准备好运行。像这样启动服务器:
api_logic_server@bc1bc88dc6ce:~$ python ApiLogicProject/api_logic_server_run.py
然后,使用您的浏览器运行应用程序和 API。您可以在PythonAnywhere上探索它。
该过程如下图所示,将您的操作(A、B、C、D:您刚刚执行了步骤 B)映射到现代 n 层软件架构:
图 1:API 逻辑服务器创建过程
让我们仔细看看创建自动化。
运行应用程序:过滤、排序、多页、多表、自动连接
创建过程会构建一个 react-admin 应用程序,如下所示。数据库关系用于构建具有自动连接的主/详细页面(为每个客户下订单)。
下面的屏幕截图说明了自动连接。每个订单都有一个销售代表的 EmployeeID,但业务用户无法理解 ID(谁是 Employee 22?)。因此,系统会自动加入员工姓名。这只是一个默认值。指定您自己的连接很简单。
图 2:创建的管理应用程序
使用 Swagger 运行 API:自定义 UI、自动共享逻辑
“创建”过程还构建了底层 API:每个表的端点,支持GET、POST、PATCH和DELETE. GET操作支持过滤、排序、分页和相关数据访问。更新操作以强制执行下述业务逻辑。
上面的 Admin App 对于连接业务用户和后台数据维护很有用,但大多数项目也需要自定义 UI。这个即时 API 有两个重要的含义:
- 自定义 UI 开发畅通无阻:无需等待 API 团队。
- UI 和业务逻辑开发是解耦的:业务逻辑(下面讨论)被封装到 API 中。这极大地减少了 UI 开发工作,确保在应用程序以及其他事务源(如消息)之间共享逻辑。相比之下,UI 控制器中的业务逻辑不会在多个应用程序上重用。
图 3:使用 Swagger 的自动 API
将 API 逻辑项目保存到 GitHub
像往常一样将项目保存到 GitHub 帐户,如下所示:
- 在 GitHub 上创建您的项目(此处称为ApiLogicProject;不要添加文件以避免合并)。
- 为 Git 初始化项目并以通常的方式推送它:
api_logic_server@bc1bc88dc6ce:~$ exit # exit docker, return to local machine
cd ApiLogicProject # created API Logic Project
git init
# git branch -m main # sometimes the branch is master.. make it main
git add --all
git commit -m 'First commit'
git remote add origin https://github.com/valhuber/ApiLogicProject.git
git remote -v
git push origin main
使用 VSCode 自定义它
ApiLogicServer create提供了令人印象深刻的自动化,但让我们面对现实吧:它只有在您可以自定义时才有用(例如,添加新端点、添加业务逻辑、与外部系统集成等)。
低代码 专有IDE 会导致功能减少。API Logic Server 采用不同的方法:
该ApiLogicServer create命令创建一个
标准的可定制项目,一个
可以在当前 IDE 中打开的目录,例如 PyCharm 或 VSCode。
这是我们的项目,在 VSCode 中打开:
图 4:API Logic Project,在 VSCode 中打开
让我们来看看一些关键点。
模型,而不是代码:更容易理解和定制
创建的项目很小,因为创建过程构建模型,而不是大量难以理解或定制的代码。例如,如上图所示:
- API ( expose_api_models.py) 仅列出要公开的表,依赖于 SAFRS JSON:API 运行时中的自省。
- 应用程序 ( admin.yaml) 不是一堆复杂的JavaScript和HTML,而是一个简单的 YAML 文本文件,您可以更改它来控制标题、显示顺序等。
屏幕截图还说明了一些关键的自定义,如下所述。
Flask自定义端点的标准
您可以扩展自动创建的端点,如 中所示customize_api.py。您可以使用:
- 标准flask:经典的“你好,世界!” 包括在内(上图中未显示)。
- SAFRS 服务在 swagger 上发布 API,如add_order代码所示。请注意,由于业务逻辑已被分解,因此代码很短。
独特的低代码后端:规则(简洁 40 倍),可使用 Python 扩展
API 和 UI 自动化是对熟悉挑战的令人印象深刻的答案。逻辑自动化是对一个重要且未解决的问题的独特解决方案:
对于事务系统,后端多表约束和派生逻辑往往占系统的近一半。“您的代码在此处”的传统方法无法解决此问题。
API 逻辑服务器的逻辑部分是一种声明性方法:您为多表约束和派生声明类似电子表格的规则。下面显示的 5 条规则(图 5)代表了与 200 行 Python 相同的逻辑:惊人的40 倍。
由于它们自动执行所有重用和依赖管理,
因此规则比代码 简洁 40 倍。
就像电子表格一样,规则通过自动执行相关规则来监视变化并做出反应,这些规则可以链接以激活其他规则(您可以在此处可视化该过程)。API Logic Server 中的规则引擎通过侦听 ORM 事件来运行。 这意味着您的逻辑在 API 和自定义代码(例如,新端点、消息处理程序等)上自动重用。
逻辑由规则和传统的 Python 代码组成。参考下declare_logic.py图5:
- 请注意,这 5 条规则(第 68-83 行)实际上是一个可执行规范(第 60-65 行)。使用代码完成在 VSCode 中创建它们。
- 逻辑由规则和代码组成(第 88 行以上),因此您可以处理不被规则自动化的元素(例如,发送邮件、消息等)。这是一个熟悉的事件模型。注册事件:Rule.commit_row_event(on_class=models.Order, calling=congratulate_sales_rep)
- 逻辑是可调试的。我们使用 Swagger 添加了一个 Order(我们定制的 API),它在第 92 行遇到了断点。提供了典型的调试服务:检查变量、单步执行/进入等。
- 请注意,逻辑日志(调试控制台)列出了每个触发的规则,缩进反映了多表链接,描述了行的旧/当前值。
图 5:使用 VSCode 声明、扩展和调试逻辑
代码空间:浏览器中的 VSCode,带有 Cloud Dev Env
仔细看看上面的 VSCode 屏幕截图。它们看起来就像在您的桌面上运行的 VSCode(这也很简单),但实际上它们是在浏览器中运行的。
但是,它们与什么有关?浏览器未与您的桌面交互。事实上,您的桌面甚至可能没有安装 Python 或 ApiLogicServer。
相反,它正在访问为您的 GitHub 项目动态创建的云中的机器。它是一个与 GitHub(repo、secrets 等)集成的完全容器化的开发环境 (IDE、终端、依赖项、生命周期操作)。
所有这些魔法都归功于 GitHub 的新产品 Codespaces。基本前提:
- 您的项目存在于 GitHub 上。
- 您的项目可以在容器中运行。
我们在上面看到了 GitHub 部分。现在让我们看看 API Logic Server 对在容器中开发的支持,然后我们如何使用 Codespaces 来管理它。
API 逻辑项目:自动化容器配置
容器配置是完全自动化的。该ApiLogicServer create命令创建为容器预先配置的项目。项目包括创建 2 个文件(详情如下):
- .devcontainer/devcontainer.json
- For_VSCode.dockerfile
您可以在上面的图 4 - API Logic Project.devcontainer中看到左上角的目录。 看起来像这样:.devcontainer/devcontainer.json
// For format details, see https://aka.ms/devcontainer.json. For config options, see the README at:
// https://github.com/microsoft/vscode-dev-containers/tree/v0.194.0/containers/docker-existing-dockerfile
{
"name": "Existing Dockerfile",
// Sets the run context to one level up instead of the .devcontainer folder.
"context": "..",
// Update the 'dockerFile' property if you aren't using the standard 'Dockerfile' filename.
"dockerFile": "../For_VSCode.dockerfile",
// Set *default* container specific settings.json values on container create.
"settings": {},
// add network -- enable this as required, e.g., https://valhuber.github.io/ApiLogicServer/Database-Connectivity/
// "runArgs": ["--network=dev-network"],
鉴于For_VSCode.dockerfile识别所需的 Docker 映像:
# VSCode uses this file to create a development container, for you to customize and test API Logic Projects.## Per .devcontainer/devcontainer.json, VSCode will offer to open your API Logic Server Project in this docker container# Same as: View > Command > Remote-Containers: Open Folder in Container.## https://valhuber.github.io/ApiLogicServer/Working-With-Docker/#FROM apilogicserver/api_logic_serverUSER api_logic_serverCMD ["bash"]
DockerHub 上的apilogicserver/api_logic_server映像定义包含 Python、API Logic Server 等 - 您项目的所有库。
这种自动化的容器配置使 API Logic Server 项目能够在 VSCode 下以 2 种不同的方式进行自定义、运行和调试:
- 如果在本地运行,它会指示您本地安装的 VSCode 在容器中打开此项目。
- 如果在 Codespaces 上运行(更多内容见下文),它会指示 Codespaces 在云中申请开发机器,并创建具有所需依赖项和配置的容器。
让我们看看在 Codespaces 下运行。
使用 Codespaces 管理 API 逻辑项目
自动化的容器配置使使用 Codespaces 变得非常简单。这解锁了一些非常有趣的场景。例如,也许一位同事希望您检查他们的项目;但它是 Python - 并不总是一个简单的安装。但是,使用 Codespaces很简单。
有 GitHub 帐户吗?
执行以下步骤,
大约需要 2 分钟。
使用您的 GitHub 帐户,您从 GitHub 项目启动 Codespaces(您可以使用此项目来探索 Codespaces):
图 6:启动代码空间
Codespaces 使用上述自动化配置来申请云上的计算机,在容器中启动您的项目,并通过在浏览器中运行的 VSCode 提供访问权限。启动速度非常快(大约 10 秒)。
使用 Codespaces,无需将您的桌面配置
为开发机器(安装 Python、配置数据库等)。
消除了这种摩擦。
如下图,你现在需要做的就是:
- 创建端口 5656(将其公开)。
- 使用预先创建的启动配置启动服务器。
- 在 Admin App 上启动浏览器。
图 7:代码空间 - 配置和运行
有了它:您的项目,在浏览器中,在云端运行。只是不要往下看。
当然,“快速浏览”只是一种情况。如果您的团队在每个开发人员安装和配置他们的开发环境时都浪费时间,Codespaces 可以消除这种摩擦。DevOps...为开发人员服务。
将其容器化
这种潜在的魔力大部分都基于容器化软件。为什么不将创建的项目容器化,使其易于部署和构建动态扩展站点(例如,Kubernetes)?
因此,ApiLogicServer create还构建ApiLogicProject.dockerfile:
Dockerfile
FROM apilogicserver/api_logic_server
USER root
WORKDIR /home/api_logic_project # user api_logic_server comes from apilogicserver/api_logic_server
USER api_logic_server
COPY . .
CMD [ "python", "./api_logic_server_run.py" ]
您可以像这样调用它来将项目的映像发布到 DockerHub:
docker build -f ApiLogicProject.dockerfile -t your_repo/your_project --rm .
docker tag your_repo/your_project your_repo/your_project:1.00.00
docker login
docker push your_repo/your_project:1.00.00
概括
退后一步,我们已经看到了一些重要的技术。
自动化:瞬间运行,而不是几周或几个月
使用单个命令,我们创建了以下内容:
- 即时多页应用程序,用于吸引业务用户和后台数据维护
- 即时 API,畅通 UI 开发并分解业务逻辑以实现自动重用
- 更简单:创建过程产生模型,而不是难以理解和定制的代码。
可扩展,具有标准的世界级 IDE
这是一种低代码方法,可以创建标准项目,您可以使用您已经熟悉的 IDE 和工具(例如 VSCode)进行自定义。
通过类似电子表格的规则实现独特的低代码后端逻辑
规则看起来像正式的设计规范,比代码简洁 40 倍,并且可以使用 Python 进行扩展。
减少摩擦
Codespaces 消除了设置开发机器的麻烦,使您能够专注于创造价值。
这都是开源的,在API Logic Server。
https://valhuber.github.io/ApiLogicServer/