简介
npm 是目前世界上最大的软件包管理系统,它使得开发者可以方便地共享代码和依赖。而 epm-rest 则是一个基于 npm 的包装工具,它可以将一个 npm 包转换成 restful API,并提供了一些很棒的功能,例如:
- 自定义 API 端点 (endpoint)
- 自定义 URL 路由规则
- 支持分页和排序
- 支持异步操作
- 支持数据校验
在这篇文章中,我们将介绍如何使用 epm-rest 来创建一个 restful API,并提供一些示例代码来帮助您更好地理解 epm-rest 的使用方法。
安装
首先,您需要使用 npm 来全局安装 epm-rest:
npm install -g epm-rest
安装完成后,您可以使用以下命令来确认安装是否成功:
epm-rest --version
创建一个 restful API
接下来,让我们来创建一个简单的 restful API。在示例中,我们将创建一个电影数据库,支持对电影进行增删改查的操作。
安装必要的依赖
在创建 API 之前,我们需要先安装一些必要的依赖:
npm install body-parser express mongoose mongoose-hidden
- body-parser 用于解析 HTTP 请求的主体
- express 是 Node.js 最流行的 web 框架,能够帮助我们创建 web 应用和 API
- mongoose 是一个 MongoDB 对象模型工具,用于将 MongoDB 与 Node.js 应用程序进行连接
- mongoose-hidden 是一个 Mongoose 插件,用于隐藏模型中的指定字段
创建模型
接下来,我们需要定义 Movie 模型,用于描述一部电影的属性。打开 models/Movie.js 文件,并添加以下代码:
-- -------------------- ---- ------- ----- -------- - -------------------- ----- -------------- - ----------------------------- ----- ------ - ---------------- -- ------ ----- ------ ----- ----------- - --- -------- ------ - ----- ------- --------- ---- -- ----- ------- ------- ------- ----------- - ----- ----- -------- -------- - --- ---------------------------------- - ------- - ---- ----- - --- -- ------ ----- -------------- - ----------------------- -------------
这里,我们使用 Mongoose 来定义电影模型,每部电影都有标题、年份和评分属性。另外,我们还添加了一个“created_at”字段,用于跟踪每个文档的创建日期。
创建 API 端点
接下来,我们需要创建一个电影 API 端点。在 routes/movies.js 文件中添加以下代码:
-- -------------------- ---- ------- ----- ------- - ------------------- ----- ------ - ----------------- ----- ----- - --------------------------- -- --- --- ------ --------------- ----- ---- -- - -------------- ----- -------- -- - -- ----- - -------------------------- - ---- - ------------------ - --- --- -- --- - -------- ----- ------------------ ----- ---- -- - ----------------------------- ----- ------ -- - -- ----- - -------------------------- - ---- -- -------- - -------------------- - ---- - ---------------- - --- --- -- ------ - --- ----- ---------------- ----- ---- -- - ----- ----- - --- ---------------- ---------------- ------- -- - -- ----- - -------------------------- - ---- - ----------------------------- - --- --- -- ------ -- -------- ----- ------------------ ----- ---- -- - -------------------------------------- --------- ----- ------- -- - -- ----- - -------------------------- - ---- - ----------------- - --- --- -- ------ - ----- --------------------- ----- ---- -- - -------------------------------------- ----- ------- -- - -- ----- - -------------------------- - ---- -- --------- - -------------------- - ---- - -------------------- - --- --- -------------- - -------
在这里,我们定义了一个名为“movies”的端点,它包含以下四个方法:
- GET /movies:获取所有的电影
- GET /movies/:id:根据 ID 获取电影
- POST /movies:创建一部新电影
- PUT /movies/:id:更新一部电影
- DELETE /movies/:id:删除一部电影
配置 API 服务
接下来,我们需要在 app.js 中配置和启动 API 服务。在 app.js 中添加以下代码:
-- -------------------- ---- ------- ----- ------- - ------------------- ----- ---------- - ----------------------- ----- -------- - -------------------- ----- ------------ - --------------------------- ----- --- - ---------- -- ------- -- ------- ------------------------------------------------ - ---------------- ---- --- ------------------------------- --------------------------- -------- ---------- ---------- -- --------- ---------- --------------------------- ------------------------------- --------- ---- ---- -- --------- --- ------ ------------------ -------------- -- ----- --- ------- ----- ---- - ---------------- -- ----- ---------------- -- -- - ---------------------- -- ---- - - ------ ---
- 首先连接到 MongoDB 数据库。
- 然后使用 body-parser 中间件处理 HTTP 请求主体。
- 配置“movies”路由,将所有电影相关的请求路由到 routes/movies.js 文件中。
- 启动 API 服务,并在控制台上输出消息。
到此为止,我们已经完成了一个简单的 restful API 的创建和配置。
使用 epm-rest 将 API 导出为 restful API
现在,我们需要将整个项目导出为 restful API。在项目根目录下运行以下命令:
epm-rest export-api
这会生成一个新的文件夹“api”,其中包含了一个独立的 express 应用程序。
使用自定义端点
现在,让我们来使用 epm-rest 提供的一些灵活的功能。
通过使用 epm-rest,您可以自定义 API 端点。例如,您可以将“GET /movies”端点重命名为“GET /films”。
在 routes/movies.js 中添加以下代码:
-- -------------------- ---- ------- -- --- --- ------ ----- ------ --------- -------------------- ----- ---- -- - -------------- ----- -------- -- - -- ----- - -------------------------- - ---- - ------------------ - --- ---
然后,在 config/express.js 文件中添加以下代码:
app.use('/films', require('../routes/movies'));
现在,您可以使用“GET /films”端点来获取所有电影了。
自定义 URL 路由规则
除了自定义端点之外,您还可以自定义 URL 路由规则。
例如,您可以将“GET /movies/:id”端点更改为“GET /films/:id”端点。
在 routes/movies.js 中添加以下代码:
-- -------------------- ---- ------- -- --- - -------- ----- ---- ------ --- --------- ------------------------ ----- ---- -- - ----------------------------- ----- ------ -- - -- ----- - -------------------------- - ---- -- -------- - -------------------- - ---- - ---------------- - --- ---
然后,在 config/express.js 文件中添加以下代码:
app.use('/films', require('../routes/movies'));
现在,您就可以使用“GET /films/:id”端点来获取指定的电影了。
数据校验
epm-rest 还提供了一些非常有用的数据验证功能。
首先,在 models/Movie.js 中添加以下代码:
const MovieSchema = new Schema({ title: { type: String, required: true, validate: /^[A-Za-z0-9\s]+$/ }, year: { type: Number, required: true, min: 1900, max: new Date().getFullYear() }, rating: { type: Number, required: true, min: 0, max: 10 }, director: { type: String, required: true, validate: /^[A-Za-z\s]+$/ } });
我们向标题、年份、评分和导演字段添加了一些验证规则。标题和导演字段只允许包含字母数字和空格,年份必须在 1900 年和当前年份之间,评级必须在 0 和 10 之间。
当您尝试创建一个不符合规则的电影时,将收到以下错误消息:
-- -------------------- ---- ------- - ------- ---- --------- - -------- ------ ------- -- --- --------- ------- ------ ------ -- --- --------- --------- ------ -------- -- --- --------- ----------- ------ ---------- -- --- -------- - -
分页和排序
最后,您还可以使用 epm-rest 支持的分页和排序功能来更好地管理电影数据库。
接下来,我们将实现一个分页和排序逻辑,允许用户使用以下请求参数:
- page:当前页号,默认值为 0。
- size:每页的记录数,默认值为 10。
- sort:排序规则,默认值为“-created_at”。
在 routes/movies.js 中添加以下代码:
-- -------------------- ---- ------- -- --- --- ------ ----- ---------- --- -------- --------------- ----- ---- -- - ----- ---- - ----------------------- -- --- ----- ---- - ----------------------- -- ---- ----- ---- - -------------- -- -------------- ------------------------ ----- ------ -- - -- ----- - -------------------------- - ---- - -------------- ----------- ---------- - ----- ------------ ----------- -------- -- - -- ----- - -------------------------- - ---- - ---------- ----- ----- ----- ----- ------ ------ ------ ------- --- - --- - --- ---
然后,在 config/express.js 文件中修改以下代码:
app.use('/movies', require('../routes/movies'));
现在,您可以使用“GET /movies?page=1&size=5&sort=-rating”端点来获取按评级排序的第二页电影列表。
结论
在这篇文章里,您学习了如何使用 epm-rest 将一个普通的 Node.js 应用程序导出为 restful API,并使用 epm-rest 提供的一些功能来进行定制。我们创建了一个电影数据库,支持分页和排序、数据校验等一系列功能,希望这篇文章对您有所帮助。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/60066e26a563576b7b1ecfa7