基本概念
前言: DataSerivce 务求一切操作简单化,不创造过多概念,但一些前提的概念是必须的,——请放心,哪怕你是个 CRUD Boy 都会觉得很简单:)
命名空间 Namespace
DataService 中的一个服务就是可配置的最基础单元,“命名空间 Namespace”表示其名字,也是构成 HTTP API URL 上面的一部分。不确切地说,它相对应于 SQL 中的一张表, 当然这种类比不是强耦合的,例如:
- 如果你选择的是自定义 SQL,那么这个命名空间仅仅是名字而已,跟具体哪张表没有确切联系,——因为你全写在 SQL 了,爱怎么样怎么样;
- 如果你选择默认的 CRUD 模式,那么你必须在另外一个字段 table_name 给出真实的表名,靠这个表名自动创建一系列的功能(此时 namespace 字段仍然是名字的意思, 于是很多时候 table_name 与 namespace 是一致的)。
一个服务(或者说“一个命名空间”)可以有一个或多个 SQL 操作,对应一个或多个 HTTP API 地址,比如说一个服务默认有 CRUD 四个的 SQL 操作(一般都是围绕一张表操作的),对应着四个 API 入口;但也可以只有一个(自定义的 SQL)。CRUD 不够可以扩展,一个命名空间下可允许有多个子命名空间。当前最多两级的命名空间结构。
DataService 并不会负责业务实体的建模、建表等操作,但是会从现有的数据表中获取相关的信息来进行配置。 建模的方法论与传统的关系型数据库开发模式一致,前期仍是分析、设计(ER 图/UML)、建表等的流程。
CRUD
数据实体(Entity)有四种基础的操作:增删改查 CRUD。在 DataService 中它们的关系如下表所示。
创建实体 Create | 查询实体 Read | 更新实体 Update | 删除实体 Delete | |
---|---|---|---|---|
HTTP 方法 | POST | GET | PUT | DELETE |
SQL 命令 | INSERT INTO | SELECT | UPDATE | DELTETE/UPDATE(逻辑删除) |
DataService 操作 | 根据提交的数据转化为 INSERT INTO 语句去操作 | 获取单笔详情 | 根据提交的数据转化为 UPDATE SQL 语句去操作 | 删除逻辑或物理删除 |
获取多行列表(不分页) | ||||
获取多行分页列表 | ||||
API 入参 | 标准表单或 JSON 数据 | Path 参数或 QueryString 参数 | 标准表单或 JSON 数据 | Path 参数或 QueryString 参数,只须 id 参数 |
API 出参 | 新建实体的 id | 单笔详情 {} 对象 列表 [] 数组 |
是否成功 | 是否成功 |
DataService 各项功能围绕 CRUD 展开,上述的“SQL 命令”与“DataService 操作”两部分,不仅提供默认通用的 CRUD 操作,而且如果不满足的话,还可以自定义 SQL 逻辑(下小节详述)。
不论哪种方式,均采用约定好的固定搭配请求服务,假设/common_api为数据服务的专属 API 前缀、 foo为命名空间,则有以下固定的请求操作。
- GET /common_api/foo/1234 获取单笔详情记录,其中 1234 是 Path 参数,即格式如 /common_api/{namespace}/{id}
- GET /common_api/foo/list 获取多行列表记录,最后是 /list 结尾的,即格式如 /common_api/{namespace}/list
- GET /common_api/foo/page 获取多行列表分页记录,最后是 /page 结尾的,即格式如 /common_api/{namespace}/page,并要传相关的分页参数 SQL