几乎所有的应用程序都涉及用户--或与之连接的其他应用程序--与存储在数据库中的数据进行交互。这些互动可以归纳为四种操作:创建、读取(或查看)、更新和删除。这些就是CRUD操作。
CRUD操作解释
更具体地说,什么是CRUD操作?让我们用我们的社区论坛作为一个例子。
CRUD操作的描述和例子
CREATE - 作为一个论坛,它需要让我们的用户创建新的主题。当用户打开主题创建表单,填写并点击 "创建主题 "按钮时,将触发论坛的CREATE函数,该函数将在论坛的数据库中创建一个新的 "主题 "记录,其中包含 "标题"、"内容"、"标签 "等值。
阅读 - 一旦帖子被创建,任何人都可以在论坛上浏览并点击它,或直接访问它的URL来阅读它。这样做将调用论坛的READ函数,该函数将从数据库中检索该主题,包括其属性(标题、内容、标签等)。READ函数并不修改该主题的任何信息。
UPDATE- 在用户创建了一个主题后,我们的论坛允许他们编辑它。如果他们犯了一个错误或忘记了什么,这很有用。要做到这一点,用户可以简单地点击编辑按钮并修改不同属性的值。在他们点击 "保存编辑 "后,论坛的UPDATE功能将被调用,并在数据库中相应地改变这些值。
DELETE - 如果出于任何原因,用户想删除他们的主题,他们可以点击 "删除主题 "按钮,。论坛的DELETE函数将被调用,并将从数据库中删除该主题记录及其属性。
这是对单一类型记录的CRUD操作的一个简单解释。即使是基本的应用程序也会涉及到对各种类型记录的CRUD操作,不同的用户被授权对不同类型的记录执行不同的操作。在我们的论坛例子中,用户可以创建一个主题,更新他们的账户,阅读主题中的评论,以及删除一个书签,而管理员可以更新用户的权限或创建新的论坛版块。
CRUD操作,REST和SQL
现在我们知道什么是高层的CRUD操作了。我们看到,从本质上讲,CRUD操作是由用户(或自动)的行为触发的,并改变或读取数据库。通常,在Web应用程序中,这些CRUD操作将由用户的操作触发,产生对REST API的调用,并通过SQL查询改变或读取数据库。
下表描述了CRUD操作如何映射到REST API的HTTP方法,以触发操作,并映射到改变或读取数据库的SQL查询。
HTTP方法 | CRUD操作 | SQL查询 |
发布 | 创建 | 创建 |
获取 | 阅读 | 选取 |
投入 | 更新 | UPDATE |
DELETE | DELETE | DELETE |
什么是CRUD应用?
你可能已经注意到,即使是最基本的用例,这些CRUD操作本身也不足以实现任何有意义的结果,它们与其他元素相互作用。这些元素共同组成了一个CRUD应用程序。
前端
前端,即用户界面,是使用户能够与应用程序互动,调用REST API来触发CRUD操作,并最终与数据库互动。
后端
后端是将REST API调用转化为SQL查询,在数据库上执行CRUD操作。
数据库
数据库是你的数据所在,也是最终通过SQL查询执行CRUD操作的地方。
基于角色的访问控制 活动日志,...
除了上面列出的CRUD应用程序的基本组件外,还需要额外的能力来建立一个强大的应用程序。事实上,你可能想限制哪些用户可以执行哪些操作(例如,删除整个数据库),并记录每一个执行的操作,用于调试或合规。
托管
上述所有的组件都必须被托管在某个地方,以便你和你的用户能够随时访问。
现在,让我们看看建立CRUD应用程序的不同选择。
从头开始建立一个CRUD应用程序
构建CRUD应用程序的一个明显的选择是从头开始构建它。最有可能的是,如果你正在考虑建立这样一个应用程序,那是因为你已经有了一个存储数据的数据库,你想让你的用户轻松地进行可视化或操作。因此,我们将假设你已经有一个正在运行的数据库。
虽然CRUD应用程序看起来相当基本,但开发一个应用程序需要坚实的前端、后端和数据库知识。在这篇博客中,我们不会详细介绍所有的内容,但会列出在数据库基础上建立CRUD应用程序的主要步骤,从头开始,并链接到有用的资源。
为了便于练习,我们假设你正在使用以下流行的技术。前端为React,后端为Node.js,数据库为PostreSQL。
建立你的CRUD应用前端
我们使用这个伟大的教程"如何使用React、React Hooks和Axios执行CRUD操作"作为参考。
-
架构与设计
我们开始吧。由于我们是从一个现有的数据库开始的,你已经知道这个数据库中存储了什么数据,以及它是如何结构的。因此,你可能首先要做的是思考你希望你的用户如何与这些数据互动,你想如何表现它,以及体验会是什么样子。 -
创建您的React应用程序
-
安装Semantic UI Package for React这个
包是一个UI库,提供预建的组件,例如按钮、表格等等。 -
创建您的应用程序的第一个屏幕
-
为您的CREATE、READ和UPDATE组件创建CREATE、READ和UPDATE文件,无需为DELETE创建新的组件
-
建立CREATE、READ、UPDATE和DELETE元素、按钮和逻辑
-
建立对API的CRUD请求(一旦你建立了API)。
-
实现表单验证
构建你的CRUD应用后端
一旦你完成了前端的工作,就该建立前端和数据库之间的联系了。我们使用这个"用PostgreSQL开发一个CRUD Node.js应用程序"的指南作为参考。
- 在Node.js中创建你的应用架构
- 配置你的应用程序和它与PostgreSQL数据库的连接
- 为你的CRUD操作创建路由,包括为它们各自的方法编写API端点,以及它们各自的逻辑来查询数据库
部署你的CRUD应用程序
正如我们之前提到的,如果你希望你和你的用户能够随时随地访问你的数据库、后端和前端,你需要在线托管你的数据库。
奖励分:添加基于角色的访问控制
从安装必要的软件包到设置用户认证(包括注册和登录)及其前端表现形式到配置路由上的权限,在你的CRUD应用上实施RBAC会增加大量的开发时间。
减少CRUD应用开发时间的有用工具
正如我们所看到的,从头开始开发一个基本的CRUD应用可能需要大量的时间。幸运的是,有一些工具可以加速这个过程,特别是在后端部分。像Hasura或PostgreSQL这样的工具,根据你的堆栈,将自动根据你的数据库创建API。
用CRUD应用程序生成器构建CRUD应用程序
即使有Hasura或PostgreSQL这样的工具,构建一个CRUD仍然需要时间。如果你在CRUD操作之外还需要特定的功能,那就更需要了。为了防止你在每次需要让你的用户操作和可视化存储在数据库中的数据时重新发明轮子,有一些工具可以在一分钟内构建CRUD应用程序,让你专注于为你的应用程序添加高级逻辑和功能。例子包括Django Admin或Laravel Nova,这取决于你的堆栈。
在这篇博客中,我们将看到如何用Forest Admin构建一个CRUD应用程序。我们假设你正在为一个PostgreSQL数据库建立一个CRUD应用。
安装你的CRUD应用程序构建器
第一步是安装将帮助你生成CRUD应用程序的工具。使用我们的例子Forest Admin与PostgreSQL数据库,这只需要几个步骤。
安装Forest Admin CLI
$ npm install -g lumber-cli@latest -s
登录到Forest CLI
$ forest login
生成后端应用程序
$ forest projects:create "CRUDapp" --databaseConnectionURL "postgres://root:password@localhost:5432/myDatabase" --databaseSchema "public" --applicationHost "localhost" --applicationPort "3310"
$ cd "CRUDapp"
$ npm install -s
运行你的后端应用程序
$ npm start
建立你的CRUD应用程序
问题是,有了Forest Admin,你在数据库上安装后就能得到一个运行中的CRUD应用程序。它自动生成你的表、CRUD操作等的可视化,以及相关的前端。
你还受益于内置的基于角色的访问控制、活动日志等,所以你可以专注于编码你自己的业务逻辑,为你的新应用程序添加自定义动作,并对其进行定制。