使用 Restapify 快速轻松地模拟 REST API
嘿,开发者们👋
通常,当您开始开发使用 REST API 的新前端项目时,后端尚未准备就绪。然而,很多时候后端只是最基本的,您只想接收伪造的数据来查看应用程序的行为。这时,您决定使用工具来模拟您的 API,例如postman或库,例如json-server、mocker-api或http-fake-backend。这些工具确实很好,但仍然有一些缺点。例如,Postman 并非完全免费使用并且需要登录, mocker-api 在单个 javascript 文件中定义所有路由,而 json-server 在某些时候对边缘情况的限制非常严格。
因此,我决定开发一种新的 API 模拟工具,该工具应该能够处理所有情况,并且具有良好的开发人员体验流程:Restapify。
Restapify 是一个基于 Node.js 的 CLI,它允许你使用直观且开发者友好的 JSON 文件结构(类似于 NextJS 或 Sapper 中的内容)快速轻松地部署本地 REST API。让我们通过创建一个简单的模拟 API 来描述它的工作原理,该 API 应该提供以下功能:
GET /me
GET /posts
GET /users
GET /users/:userid
POST /users/:userid
DEL /users/:userid
GET /users/:userid/comments
创建端点
首先创建一个包含路由 json 文件的文件夹,我将其命名为/api
。然后我们可以添加一些需要服务的路由。创建路由意味着添加一个.json
文件,其文件名描述了端点、方法和状态码,其内容描述了响应主体。因此,要创建GET /me
包含状态码的端点,200
只需创建以下文件:
📂 api
┣ 📜 me.GET.200.json
由于GET
和200
是方法和状态代码的默认值,因此您可以将文件名简化为:
📂 api
┣ 📜 me.json
响应应包含 a firstname
、alastname
和 an email
,因此的文件内容/api/me.json
将类似于:
{
"firstname": "Janie",
"lastname": "Hermann",
"email": "Jo.Kessler@yahoo.com"
}
然后让我们添加 的端点/users
。由于端点数量较多,我们可以将它们分组到同一个文件夹中users
📂 api
┣ 📂 users
┃ ┗ 📜 _.json
┃ ┣ 📂 [userid]
┃ ┃ ┗ 📜 _.json
┃ ┃ ┗ 📜 _.POST.201.json
┃ ┃ ┗ 📜 _.DELETE.201.json
┣ 📜 me.json
该文件夹[userid]
表明此路由是动态的。然后,您可以在 JSON 文件内容中使用语法来使用此变量[userid]
。文件中的示例/api/users/[userid]/_.json
:
{
"id": "[userid]",
"email": "Jo.Kessler@yahoo.com"
}
如果您拨打电话,GET /users/42
您将得到回复:
{
"id": "42",
"email": "Jo.Kessler@yahoo.com"
}
在这里,要将 转换为数字,只需使用类似 的
id
语法对变量进行转换即可。变量转换文档n:[var]
"id": "n:[userid]"
Restapify 提供了一种语法,可以使用著名的fakerjs库轻松填充响应主体(请查看文档):
{
"firstname": "[#faker:name:firstName]",
"lastname": "[#faker:name:lastName]",
"email": "[#faker:internet:email]"
}
您还可以使用for 循环语法轻松创建大量数据。因此,如果您希望通过请求获取 10 条评论,GET /users/:userid/comments
只需在 JSON 文件中写入以下内容/api/users/[userid]/comments.json
:
[
"#for i in range(10)",
{
"id": "n:[i]",
"creatorId": "n:[userid]",
"content": "[#faker:lorem:sentences]"
},
"#endfor"
]
现在,我们已经创建了所有发送成功响应的 API 端点。但是,如果我们想测试应用程序在用户不存在的情况下的行为,该怎么办呢GET /users/:userid
?真实的 API 可能会返回一个没有任何内容的 。为了模拟这种行为,Restapify 实现了端点状态404
的概念。为此,您只需为每个不同的状态创建一个新文件,并在文件末尾添加用点分隔的语法。因此,让我们为 创建一个新状态:{STATE_NAME}
GET /users/:userid
📂 api
┣ 📂 users
┃ ┣ 📂 [userid]
┃ ┃ ┗ 📜 _.json
┃ ┃ ┗ 📜 _.404.{NOT_FOUND}.json
要在 Restapify 中返回无内容,您必须使用此语法作为文件内容:
[null]
空文件会更方便,但根据ECMA-404标准,它对于 JSON 文件无效。
现在您已经创建了端点,是时候提供模拟 API 了。为此,请安装 Restapi CLI……
yarn global add restapify
# or npm install -g restapify
...然后提供api/
文件夹:
restapify serve api/
然后它将在您的浏览器中打开一个仪表板,为您提供模拟 API 的概览。
您可以在此仪表板中查阅端点及其内容,获取它们,更重要的是选择您想要服务的端点状态。
因此,如果您点击状态按钮NOT_FOUND
,它将更新 API 以服务于端点的此状态,因此如果您在请求后直接发送,GET /users/42
您将收到一个404
。这对于测试您的前端(例如登录表单)非常有帮助,您可以根据需要创建多个状态,以满足所有需求和特殊情况。
因此,我介绍了 Restapify 的最重要功能,但我真的鼓励您查看它的官方文档,以更详细地了解其他用例,例如查询字符串、for 循环中的路由变量或fakerjs 集成。
您可以在https://restapify.vercel.app/examples找到一些模拟 API 的示例,以便您可以直接体验并体验其效果。如果您有任何问题或反馈,请随时在讨论中发布;如果您想查看源代码,请访问以下 GitHub 仓库:
祝你有美好的一天⭐
文章来源:https://dev.to/johannchopin/quickly-and-easily-mock-a-rest-api-with-restapify-16om