在现代的 Web 开发中,为了加快开发进程,提高效率和代码可维护性,API(Application Programming Interface)成为了前端界面和后端逻辑交互的标准方式。一方面,后端需要定义一系列的 API 接口,以便让前端可以调用,实现前后端分离的开发模式;另一方面,前端团队也需要快速地搭建出自己的 API 服务,以便快速基于后端 API 进行开发。
因此,出现了一系列的 API 开发框架和工具,其中一个不错的工具就是 npm 包 rest-api-starter。下面将介绍如何使用它来快速搭建 API 服务。
rest-api-starter 简介
rest-api-starter 是一个基于 Express 和 MongoDB 的 RESTful API 开发框架,它可以帮助我们快速搭建一个符合 RESTful API 规范的 Web 服务。通过 rest-api-starter,我们可以快速构建增、删、改、查等常见的 API 接口,并方便地进行权限控制和输入验证。
安装
首先,我们需要在本地环境中安装 Node.js 和 MongoDB,然后就可以使用 npm 在命令行中安装 rest-api-starter 了。
npm install rest-api-starter --save
使用
安装完成后,我们需要引入 rest-api-starter 模块,并初始化一个 Express 应用程序。
-- -------------------- ---- ------- ----- -------------- - ---------------------------- ----- ------- - ------------------- ----- --- - ---------- ------------------------ -- --- ---------------- -- ----- --- - --------------------- ---- --------- --------------------------------------- -- ----- -------- ---------- -- --- ---- ----- - -- ---- ------- ----------- -- --- -- ---------- ---- -- --- ---- - --- ---------------- -- -- - ------------------- ------- -- ---- ------- ---
上面这段代码中,我们先引入了 rest-api-starter 模块和 express 框架。由于 rest-api-starter 是基于 Express 开发的,我们需要先初始化一个 Express 应用程序。然后,我们在应用程序中添加 express.json() 中间件,以便正确地解析请求参数。
接着,我们使用 restApiStarter.init() 方法初始化 rest-api-starter 框架。该方法接受一个参数对象,其中包含了以下几个属性:
- app:一个已经初始化的 Express 应用程序
- mongoUri:MongoDB 数据库的连接地址
- apiPath:API 路径前缀
- auth:JWT 鉴权的配置
最后,我们在应用程序中添加一个监听器开始监听端口,以便启动我们的 Web 服务。
使用上面的代码启动应用程序后,我们可以在浏览器中打开 http://localhost:3000/api/v1/,看到 rest-api-starter 框架的欢迎信息。
API 接口定义
由于 rest-api-starter 框架是基于 Express 的,我们可以使用 Express 的路由方法来定义 API 接口。例如,下面是一个简单的 GET 接口:
api.get('/users', async (req, res) => { const users = await User.find(); res.json(users); });
在上面的代码中,我们使用 api 对象来定义 /users 路由,它将会响应 GET 请求,并返回 User 集合中的所有数据。请注意,我们使用 await 来等待 User.find() 方法返回数据,因为该方法是异步的。
除了使用 Express 的路由方法来定义接口之外,我们还可以使用 rest-api-starter 框架提供的一些实用工具来快速构建增、删、改、查、排序、分页等常见的 API 接口。例如,下面是一个简单的增加用户的接口:
api.create('/users', async (req, res) => { const user = await User.create(req.body); res.json(user); });
在上面的代码中,我们使用 api.create() 可以自动构建一个 POST 接口,用来创建一个新的 User 对象。我们在其中使用 User.create() 方法,传入 req.body 对象作为参数,用来构建新的 User 对象。最后,我们将创建好的对象以 JSON 格式返回给调用方。
除了使用 api.create() 方法之外,我们还可以使用 api.getOne()、api.update()、api.delete()、api.list() 等方法来构建其他 BREAD 操作接口。
鉴权和输入验证
为了保护 API 接口的安全性,我们需要对 API 接口进行鉴权和输入验证。在 rest-api-starter 框架中,我们可以使用 JWT(JSON Web Token)鉴权机制,来保证只有已登录用户才能够访问某些 API 接口,同时也可以使用 Joi 验证库来对输入数据进行验证。
例如,下面是一个需要鉴权的 GET 接口:
-- -------------------- ---- ------- ----------------- ------------- ----- ----- ---- -- - ----- ----- - ----- ------------ ---------------- --- -------- ----------------- ---- ----- - ----- ---------- - -------------------------- -- ------------- - ------ ---------------------- -------- -------- ------------- ------- --- - ----- ------ ------ - ------------------ --- -- ----- --- -------- -- ------- - ------ ---------------------- -------- -------- ------------- ------- --- - --- - ----- ------- - ----------------- -------------------- -------- - -------- ------- - ----- ----- - ---------------------- -------- -------- --- ------ --- - -
在上面的代码中,我们首先定义一个 authenticate() 中间件函数,用于验证用户的 JWT 令牌。该函数会检查请求的 Authorization header 是否有效,然后使用 jwt 库解析令牌,将解析后的用户信息存储在 req.user 对象中,以便后续的 API 接口可以使用该信息。
我们在 /users 路由的回调函数中添加了 authenticate 中间件,这样只有经过鉴权的用户才能够访问该 API 接口了。
除了鉴权之外,我们还可以使用 Joi 验证库来检查输入的参数是否合法。例如,下面是一个验证 name 和 password 字段是否存在的接口:
-- -------------------- ---- ------- ----- --- - --------------------- ----- ---------- - ------------ ----- ------------------------ --------- ----------------------- --- -------------------- ----- ----- ---- -- - ----- - ------ ----- - - ----------------------------- - ----------- ----- --- -- ------- - ------ ---------------------- -------- ----------- ------- ------- --------------------- -- -- ------ -------------- -------- --------- --- --- - ----- ---- - ----- ------------------- --------------- ---
在上面的代码中,我们先定义了一个 userSchema 对象,它使用了 @hapi/joi 库中的链式调用语法,来定义 User 对象中必须存在的字段和其对应的验证规则。
接着,在 /users 路由的回调函数中,我们使用 userSchema.validate() 方法来验证 req.body 对象是否符合以上的规则。如果存在验证错误,我们将返回一个 400 错误,其中包含错误信息数组。
结论
通过以上的介绍,我们可以看到 rest-api-starter 框架可以帮助我们快速构建符合 RESTful API 规范的 Web 服务。该框架提供了方便的 BREAD 操作接口,同时也提供了 JWT 鉴权和 Joi 验证库,用来保证 API 接口的安全性和输入数据的合法性。如果你是一个前端开发人员,希望快速搭建 API 服务,不妨试试 rest-api-starter 吧!
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6005567581e8991b448d3473