Feathers.js:快速构建RESTful API服务器的指南
核心要点:
- Feathers.js 简化了RESTful API服务器的创建,处理大部分重复的后端工作,让开发者专注于代码定制和配置。
- 该框架基于Express构建,支持SQL和NoSQL数据库,使用自动生成必要代码的服务,可以轻松进行CRUD操作。
- Feathers.js中的身份验证可以使用JSON Web Tokens (JWT)来保护API端点,确保只有授权用户才能访问或修改数据。
- Feathers.js中的钩子(Hooks)充当中间件函数,可以在数据到达数据库之前或之后操作数据,这对于验证、授权和动态添加字段等任务非常有用。
- Feathers.js 旨在易于使用和扩展,通过WebSockets支持实时更新,并提供适用于各种前端框架的灵活架构。
本文将指导您使用Feathers.js在Node.js中构建RESTful API服务器。
API服务器,也称为应用程序服务器,是一个向前端应用程序提供数据的程序。它还在后端处理业务逻辑,并提供对组织数据库的受限访问。它不仅可以防止未经授权的人员访问数据;如果登录用户没有权限,它还可以限制他们访问或更改数据。
您构建的每个应用程序都需要向最终用户提供服务。为此,您的应用程序需要处理数据。您可以使用远程API来创建新服务。但是,对于大多数应用程序,您需要管理自己的数据存储。一个流行的选择是使用在线数据存储服务,例如Firebase。这样,您不必处理运行分布式数据库服务器的繁琐细节。但是,您的项目需求可能需要使用功能齐全的内部数据库管理系统,例如MongoDB或Oracle。为了让您的前端应用程序访问数据库中存储的数据,您需要一个位于数据库和前端应用程序之间的服务器应用程序。
如上图所示,应用程序服务器的工作是从数据库中使用SQL或NoSQL命令访问数据,并将其转换为前端应用程序(客户端浏览器)可以理解的格式——例如JSON。此外,应用程序服务器可以使用各种安全协议——例如HTTPS加密和令牌授权——来确保数据库和客户端应用程序之间的通信安全可靠。使用这种架构的一个主要优点是,您可以使用相同的应用程序服务器部署针对不同平台的应用程序——桌面、移动、Web等等。而且,为了高效地为更多用户提供服务并实现快速的响应时间,也很容易水平扩展您的应用程序。
我们将构建一个简单的API服务器,并演示Feathers提供的各种功能。
先决条件:
在开始学习本教程之前,您需要对以下主题有扎实的基础:
- ES6 JavaScript
- 创建Express应用程序
- 使用Express创建RESTful API
Feathers构建在Express之上,Express是Node.js的一个极简主义Web框架。如果您完成了链接中演示的教程,您会发现仅仅使用Express构建RESTful API非常费力。使用Feathers,大部分重复性工作已经为您完成。您只需要专注于配置和定制代码。让我们深入代码,学习这个Web框架是如何工作的。
项目创建:
要开始使用Feathers,您需要全局安装其命令行应用程序:
npm install -g @feathersjs/cli
接下来,使用以下命令创建一个新的API项目:
mkdir contacts-api cd contacts-api feathers generate app
以下是我的选择,您可以随意选择任何测试框架。不幸的是,测试不在本文的重点范围内,因此这里不会介绍。我个人喜欢简单,这就是我选择Jest的原因。
安装完成后,您可以打开您喜欢的代码编辑器查看项目文件。
如果您完成了我在先决条件部分列出的Express教程,那么生成的代码不应该让您感到害怕。这是一个简短的摘要,描述了文件夹和文件。
现在不必太担心每个文件的作用。在本教程的过程中,您会逐渐了解它们的工作方式。现在,让我们确认测试是否正常工作。
代码风格检查(Linting):
为了确保我们的项目符合定义的ESLint规则,只需运行命令npm test
。如果您使用的是Unix或Linux平台,这应该可以正常运行。如果您使用的是Windows,则需要调整一些内容才能成功运行测试。
首先,转到package.json
并查看scripts
部分。将test
行更改为:
"scripts": { "test": "npm run eslint && SET NODE_ENV= npm run jest", },
接下来,如果您在Visual Studio Code中安装了Prettier,则需要在“工作区设置”选项卡中将单引号设置更改为true:
{ "prettier.singleQuote": true }
最后,确保在创建或编辑任何文件时,换行符为LF。如果您使用的是Visual Studio Code或类似的编辑器,您可以在状态栏中检查当前的换行符样式。如果显示CRLF,则更改为LF。进行这些更改将帮助您通过代码风格检查测试。不幸的是,要使测试通过需要更多工作,这里将不作介绍。
让我们看看如何生成CRUD RESTful接口。
生成服务:
在Express中构建RESTful CRUD API接口需要一些工作。在Feathers中,您只需执行单个命令,回答几个问题,即可生成代码:
npm install -g @feathersjs/cli
在本教程中,我们将使用NeDB数据库。Feathers确实支持SQL数据库(如MySQL)和NoSQL数据库(如MongoDB)。但是,安装数据库系统——无论是在您的机器上还是在云服务器上——都需要花费一定的时间来配置它。另一方面,NeDB是一个完全用JavaScript编写的内存数据库,支持MongoDB API的一个子集。无需配置;您只需安装它即可。它非常适合原型设计和测试新应用程序。这就是我们将在本教程中使用的数据库。
让我们简要地看一下使用此命令生成的一些文件:
-
services/contacts/contact.service.js
。这是一个Feathers服务,它为/contacts
提供CRUD API端点。非常小,不是吗?这是因为Feathers为我们完成了繁重的工作。它使我们免于编写样板CRUD代码。 -
services/contacts/contact.hooks.js
。在这里,我们自定义CRUD逻辑的行为。我们有before
部分,我们可以在Feathers读取或写入数据库之前检查或更改数据。我们还有一个after
部分,我们可以在将结果发送到客户端应用程序之前检查或更改数据库中的结果。我们可以执行诸如限制访问、数据验证、执行联接操作以及计算附加字段或列的值等操作。 -
models/contacts.model.js
。在这里,我们定义一个模型并将其附加到数据库表。这也是我们定义模式的地方,该模式可用于在插入或更新新记录时验证字段。不幸的是,NeDB不支持模式。但是,我已经提供了一个连接到MongoDB的模型示例,该模型通过mongoose适配器支持模式功能:
mkdir contacts-api cd contacts-api feathers generate app
尽管使用NeDB有一些限制,但它仍然是一个非常适合原型设计的数据库。大多数NoSQL数据库允许您使用任何结构提交数据,而无需首先定义模式。最好在实现项目需求后实现模式。有了模式,Feathers将使用您定义的规则为您执行字段验证。您需要一个可用于生产的数据库(如MongoDB)才能定义模式。请注意,开发数据库的配置定义在config/default.json
中:
"scripts": { "test": "npm run eslint && SET NODE_ENV= npm run jest", },
这是提供数据库凭据的地方。我们还有另一个配置文件config/production.json
。这是在部署Feathers应用程序时使用的生产数据库配置。在开发过程中使用单独的数据库非常重要。否则,您有删除或损坏生产数据库中业务运营数据的风险。
现在我们已经设置了联系人的CRUD服务,是时候试一试了。您可以使用命令npm start
启动Feather服务器。请注意,此服务器不支持热重载。因此,每次更改代码时都需要重新启动它。为了与我们的Feathers应用程序交互,我们需要一个API浏览器工具,例如Postman或Insomnia。在本教程中,我将使用Insomnia,但是您可以轻松地使用Postman或任何其他工具来进行操作。
创建新的GET请求(按Ctrl N),并将其命名为“列出联系人”。在URL部分,输入http://localhost:3030/contacts
。当您点击“发送”按钮时,您应该看到以下视图:
什么也没有!我们的数据库当前为空,因此我们需要创建一些新的联系人。创建一个名为“创建联系人”的新请求。填写其余字段,如下所示:
如果您忘记将上述表单中的方法更改为POST,您可以稍后进行更改。将方法更改为POST,并将“正文”选项卡更改为JSON。将以下数据复制到JSON选项卡中:
npm install -g @feathersjs/cli
当您点击“发送”按钮时,您应该会收到以下响应。请注意,已为您的新联系人生成了一个_id
。
返回“列出联系人”,然后再次点击“发送”按钮。您应该得到以下结果:
mkdir contacts-api cd contacts-api feathers generate app
返回“创建联系人”,并发布几个新记录:
"scripts": { "test": "npm run eslint && SET NODE_ENV= npm run jest", },
{ "prettier.singleQuote": true }
现在让我们执行更新操作。为此,我们不会使用UPDATE HTTP方法。此方法将完全覆盖记录。我们想要做的只是覆盖单个字段,而不是整个记录。为此,我们将使用PATCH。创建一个新的请求,“更新联系人”,如下所示:
在URL字段中,输入http://localhost:3030/contacts/{_id}
。用第一条记录的ID替换{_id}
。将以下数据粘贴到JSON选项卡中:
feathers generate service
点击“发送”按钮。您应该会看到以下结果:
请注意其余字段保持不变。接下来,我们将删除一条记录。这很容易。只需创建一个新的DELETE请求,并将其命名为“删除联系人”。在URL字段中,使用格式http://localhost:3030/contacts/{_id}
。就像之前一样,用要删除的记录的ID替换{_id}
。点击“发送”将为您删除该记录。您可以通过再次运行“列出联系人”请求来确认。
我们刚刚验证了所有CRUD操作都运行正常。在下一节中,我们将学习如何设置身份验证。
(以下内容与原文类似,但进行了部分语句调整和段落合并,以提高可读性和流畅性,并保持原意不变。图片格式保持不变。)
身份验证:
目前,我们的/contacts
API端点不受保护。如果我们将应用程序部署到云服务器,任何拥有URL的人都可以访问和操作我们的记录。为了限制访问,我们需要设置身份验证。我们将使用JSON Web Tokens来为我们的API应用程序实现身份验证。运行以下命令来设置它:
npm install -g @feathersjs/cli
如您所见,Feathers支持不同的用户身份验证方式。“本地用户名 密码”选项最容易设置。
选择以下选项:
接下来,我们需要创建一个新用户。我们可以使用Insomnia或任何其他API浏览器工具来完成此操作。创建一个新的请求,并将其命名为“创建用户”。
在JSON选项卡中,发送以下数据:
mkdir contacts-api cd contacts-api feathers generate app
您应该会收到类似以下的响应:
我们现在有了一个用户。让我们通过创建一个新的请求“列出用户”并发送URL http://localhost:3030/users
来确认这一点。不幸的是,您将收到以下响应:
我们需要进行身份验证才能访问此数据。由于我们没有开发可以用来登录的前端应用程序,我们将继续使用API浏览器。创建一个新的请求,并将其命名为“获取JWT令牌”。填写表单,如下所示:
此请求使用POST方法。为了更清晰起见,您可以将其重命名为“登录”。在JSON选项卡中,复制以下数据:
"scripts": { "test": "npm run eslint && SET NODE_ENV= npm run jest", },
点击发送按钮后,您应该会收到以下响应:
复制令牌代码(不带双引号)。转到“列出用户”请求页面,选择“Auth”选项卡并选择Bearer。将此令牌代码粘贴到TOKEN字段中。
点击“发送”按钮后,您应该会看到用户列表。请注意,我们的身份验证系统并不完全安全。任何拥有/users
URL端点的人都可以创建一个新帐户并访问我们的系统。为了防止未经授权创建新帐户,我们也需要限制该端点。打开文件services/users/users.hooks.js
并更新以下代码段:
这将确保只有经过身份验证的用户才能创建新帐户。下一步是保护/contacts
端点。只需打开文件services/contacts/contacts.hooks.js
并相应地进行更新:
重新启动Feathers服务器以使代码更改生效。如果您尝试运行“列出联系人”请求,您将收到以下响应:
要进行身份验证,您需要像之前一样设置Bearer令牌。完成此操作后,您可以发送请求,并且应该会收到您的联系人列表。请注意,您之前获得的令牌将在一天后过期。为提高效率,最好使用环境变量,以便更容易一次更新所有API请求参数。在构建前端应用程序时,您需要将此令牌存储在本地存储中。不要使用cookie。否则,您的应用程序将容易受到CSRF攻击。查看Feathers安全文档,了解您应该注意的其他安全风险。
现在您已经设置了身份验证,之后创建的任何新服务都将为您提供保护新端点的选项。让我们在下一节中查看本教程的最后一个主题。
钩子(Hooks):
钩子是附加到服务方法之前、之后或出错时的中间件函数。它们通常用于处理日志记录、限制访问、保护字段、填充相关实体、发送通知等。如果您查看services/users/users.hooks.js
,您可以看到一些内置的Feathers钩子正在使用中。我们将创建我们自己的自定义钩子。首先,停止服务器并删除data/contacts.db
数据库表。接下来,使用以下命令生成一个新钩子:
npm install -g @feathersjs/cli
使用以下选项创建自定义钩子process-contact
:
我们想在这个钩子中做的是在处理“创建联系人”请求之前注入两个新字段。
-
createdBy
:通过_id
链接到当前登录的用户 -
createdOn
:添加创建日期
打开文件hooks/process-contact.js
并按如下方式更新文件:
接下来,创建一个另一个钩子populate-user
,它将在请求时将用户对象附加到每个联系人记录。按照以下屏幕截图中的说明进行操作:
打开文件hooks/populate-user
并插入以下代码:
现在您可以启动服务器了。使用“创建联系人”请求再次创建三个联系人。如果您还没有设置Bearer令牌,请设置它。否则,您将收到授权错误。这是创建新联系人时应该得到的响应类型:
总结:
我希望您现在已经学习了如何快速构建自己的RESTful API服务器。我们只触及了基础知识,您应该阅读完整的指南以发现Feathers可以提供的更多功能,这些功能可以帮助您以最小的努力实现高级功能。您还应该查看Awesome Feathers页面,其中包含大量的资源。无论您需要插件、项目示例还是教程,您都可能会在那里找到链接。您还应该查看Feathers-plus CLI,它是增强版的Feathers。它在Feathers CLI已提供的功能之上添加了新功能,例如生成用于播种和GraphQL支持的代码。
如果您想进一步改进contacts-api
项目,我建议您使用您选择的框架创建一个新的前端应用程序。为/contacts
和/users
端点构建登录屏幕和CRUD页面。享受实施挑战的乐趣。
关于Feathers.js的常见问题:
-
什么是Feathers.js? Feathers.js是一个用于构建实时应用程序的Web框架。它旨在轻量级、灵活且易于使用,提供了一套用于构建可扩展和可维护服务器端应用程序的工具和模式。
-
Feathers.js支持哪些编程语言? Feathers.js主要在服务器端和客户端使用JavaScript。它可以在服务器上与Node.js一起使用,并支持客户端上的各种JavaScript框架,包括React、Angular和Vue.js等框架。
-
Feathers.js的关键特性是什么? Feathers.js包括实时功能(通过WebSocket和RESTful API)、面向服务的架构、对各种数据库(MongoDB、PostgreSQL等)的支持、身份验证和授权机制以及用于扩展的插件系统等特性。
-
Feathers.js如何处理实时通信? Feathers.js利用WebSockets的功能来实现实时通信。它开箱即用地提供了一个实时API,允许客户端在服务器上的数据发生更改时接收实时更新。
-
我可以将Feathers.js用于服务器端渲染(SSR)吗? 虽然Feathers.js主要用于构建API和实时应用程序,但它可以与Next.js或Nuxt.js等其他框架结合使用,以实现Web应用程序的服务器端渲染(SSR)。
所有图片链接都保留了原文的格式。
以上是羽毛的初学者指南。的详细内容。更多信息请关注PHP中文网其他相关文章!

JavaScript在网站、移动应用、桌面应用和服务器端编程中均有广泛应用。1)在网站开发中,JavaScript与HTML、CSS一起操作DOM,实现动态效果,并支持如jQuery、React等框架。2)通过ReactNative和Ionic,JavaScript用于开发跨平台移动应用。3)Electron框架使JavaScript能构建桌面应用。4)Node.js让JavaScript在服务器端运行,支持高并发请求。

Python更适合数据科学和自动化,JavaScript更适合前端和全栈开发。1.Python在数据科学和机器学习中表现出色,使用NumPy、Pandas等库进行数据处理和建模。2.Python在自动化和脚本编写方面简洁高效。3.JavaScript在前端开发中不可或缺,用于构建动态网页和单页面应用。4.JavaScript通过Node.js在后端开发中发挥作用,支持全栈开发。

C和C 在JavaScript引擎中扮演了至关重要的角色,主要用于实现解释器和JIT编译器。 1)C 用于解析JavaScript源码并生成抽象语法树。 2)C 负责生成和执行字节码。 3)C 实现JIT编译器,在运行时优化和编译热点代码,显着提高JavaScript的执行效率。

JavaScript在现实世界中的应用包括前端和后端开发。1)通过构建TODO列表应用展示前端应用,涉及DOM操作和事件处理。2)通过Node.js和Express构建RESTfulAPI展示后端应用。

JavaScript在Web开发中的主要用途包括客户端交互、表单验证和异步通信。1)通过DOM操作实现动态内容更新和用户交互;2)在用户提交数据前进行客户端验证,提高用户体验;3)通过AJAX技术实现与服务器的无刷新通信。

理解JavaScript引擎内部工作原理对开发者重要,因为它能帮助编写更高效的代码并理解性能瓶颈和优化策略。1)引擎的工作流程包括解析、编译和执行三个阶段;2)执行过程中,引擎会进行动态优化,如内联缓存和隐藏类;3)最佳实践包括避免全局变量、优化循环、使用const和let,以及避免过度使用闭包。

Python更适合初学者,学习曲线平缓,语法简洁;JavaScript适合前端开发,学习曲线较陡,语法灵活。1.Python语法直观,适用于数据科学和后端开发。2.JavaScript灵活,广泛用于前端和服务器端编程。

Python和JavaScript在社区、库和资源方面的对比各有优劣。1)Python社区友好,适合初学者,但前端开发资源不如JavaScript丰富。2)Python在数据科学和机器学习库方面强大,JavaScript则在前端开发库和框架上更胜一筹。3)两者的学习资源都丰富,但Python适合从官方文档开始,JavaScript则以MDNWebDocs为佳。选择应基于项目需求和个人兴趣。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

DVWA
Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中

VSCode Windows 64位 下载
微软推出的免费、功能强大的一款IDE编辑器

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

适用于 Eclipse 的 SAP NetWeaver 服务器适配器
将Eclipse与SAP NetWeaver应用服务器集成。

Dreamweaver Mac版
视觉化网页开发工具