前言
在现代 Web 应用程序中,通过 API 驱动程序的概念已经越来越普及。一个 API 应该提供一组具有明确定义行为的接口,使开发人员能够轻松地进行创建、更新、读取和删除操作。大多数 Web 应用程序都包含一个后端,其中包含所有这些 API。在这种架构中,Restful API(Representational State Transfer API)是一种非常常见且流行的 API 设计模式之一。然而,对于那些没有后端经验的前端开发人员来说,构建和维护这样的 API 是一项复杂的任务。Sequelize Rest API 正是为了解决这个问题而存在的。
什么是 @codyraffy/sequelize-rest-api
@codyraffy/sequelize-rest-api 是一个基于 Express 和 Sequelize ORM 的 npm 包,它帮助您快速构建 Restful API。它自动为您生成数据库表和 API 路由,并提供了可配置的请求过滤、分页和排序功能。
如何使用
安装
@codyraffy/sequelize-rest-api 可以通过 npm 直接安装:
npm install @codyraffy/sequelize-rest-api
配置
首先,您需要 Sequelize 模型。确保它们正确地与您的数据库连接并且数据可以正确地读取和写入。
然后,您需要定义一个名为 sequelizeRestApi 的函数并传入以下参数:
- app:Express 应用程序实例。
- models:Sequelize 模型。应该是您之前定义的模型。
- path:API 路径。路由将挂载在这个路径上。
- auth:可选的请求身份验证。这应该是一个函数,它根据传入的请求对象确定是否拥有关联的角色或权限。
- options:一个对象,其中包含可选的配置选项。
例如:
-- -------------------- ---- ------- ----- ------- - ------------------- ----- - --------- - - -------------------- ----- - ---------------- - - ----------------------------------------- ----- --- - ---------- ------------------------ ----- ------ - - ----- ------------------------ ----- ------------------------ -------- --------------------------- -- --------------------- ------- ------- ----- - --------- --- ---
可选配置
- limit:默认限制返回的行数。默认值为 100。
- pageSize:每页的默认记录数。默认值为 25。
- searchFields:一个字符串数组,其中列出了可以搜索的字段。在分页和搜索实现中使用。
- sortFields:一个对象,列表出了可以排序的字段和它们的默认排序方式。默认排序为升序。例如:
{ title: "ASC", description: "DESC", }
- where:一个默认的 sequelize where 条件。例如:
{ published: true, }
示例代码
下面是一个完整的例子,我们将创建一个名为 "blog_db" 的 SQLite 数据库来演示:
models/User.js:
-- -------------------- ---- ------- ----- - --------- - - --------------------- ----- - --------- - - ------------------- ----- ---- - ------------------------ - --- - ----- ------------------ ----------- ----- -------------- ---- -- ------ - ----- ----------------- ---------- ----- -- --------- - ----- ----------------- ---------- ----- -- ----- - ----- ----------------------- -------- ---------- ----- -- --- -------------- - -----
models/Post.js:
-- -------------------- ---- ------- ----- - --------- - - --------------------- ----- - --------- - - ------------------- ----- ---- - ------------------------ - --- - ----- ------------------ ----------- ----- -------------- ---- -- ------ - ----- ----------------- ---------- ----- -- ------------ - ----- --------------- ---------- ----- -- ---------- - ----- ------------------ ---------- ------ ------------- ----- -- --- -------------- - -----
index.js:
const Sequelize = require("sequelize"); const sequelize = new Sequelize({ dialect: "sqlite", storage: "blog_db.sqlite", }); module.exports = { sequelize };
server.js:
-- -------------------- ---- ------- ----- ------- - ------------------- ----- - --------- - - -------------------- ----- - ---------------- - - ----------------------------------------- ----- --- - ---------- ------------------------ ----- ------ - - ----- ------------------------ ----- ------------------------ -------- --------------------------- -- --------------------- ------- ------- ----- - --------- --- --- ---------------- -- -- - ------------------- -- ------- -- ---- -------- ---
运行 node server.js
,它将会自动创建数据库表和 API 路由,我们可以通过访问 http://localhost:3000/api/User
和 http://localhost:3000/api/Post
来查看结果。它们应该返回我们的 User 和 Post 模型的所有记录。
请求过滤与排序
@codyraffy/sequelize-rest-api 还支持一些可选的请求过滤和排序参数。这些参数必须以查询参数的形式传递。例如:
// 获取前10条已发布的Post记录,并按标题升序排序 // 请求:http://localhost:3000/api/Post?published=true&_limit=10&_sort=title app.get("/api/Post", (req, res) => { req.query.where = { ...req.query.where, published: true }; return models.Post.findAll(req.query).then((results) => res.json(results)); });
在这个例子中,我们使用 req.query
对象来获取查询参数。我们将 req.query.where
中的 "published" 属性设置为 true,将每页的记录数(也就是 _limit
参数)设置为 10,然后将按照 "title" 字段和升序方式排序(也就是 _sort=title
参数)。
身份验证
如果您需要对某些 API 路由进行身份验证,@codyraffy/sequelize-rest-api 也提供了这样的机制。您可以传入一个 auth 函数参数,该函数将决定用户是否有必要的角色或权限以访问该路由。例如:
-- -------------------- ---- ------- -- -------------- --------------------- ------- ------- ----- -- - -- --------- -- ------------- --- -------- - ------ ----- - ------ ------ -- - --------- --- ---
在这个例子中,我们创建了一个 auth 函数,该函数检查传入的请求对象是否包含名为 "user" 的属性,如果该属性存在且 "role" 属性为 "admin",则该函数返回 true。
结论
@codyraffy/sequelize-rest-api 使前端开发人员能够快速构建和维护 Restful API,无需拥有后端经验。它提供了一组可配置的特性,可用于处理分页、排序、搜索和身份验证等常见任务。如果您正在寻找一种简单而强大的 API 解决方案,请考虑使用 @codyraffy/sequelize-rest-api。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/600672683660cf7123b36653