- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章在Node.js中创建安全的REST API由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
应用程序编程接口(API)能够让各种软件在内部和外部实现流畅交互,这是可扩展性和可重用性的基础。如今,提供公共API的在线帮助已是流行趋势。它方便了其他开发人员,快速地接入已有的社交账号登录、信用卡信息、以及绩效跟踪等功能。业界把此类实践的标准称为指定的REpresentational State Transfer(REST),它能够与当前的开发技术--Node.js完美配合.
从本质上说,Node.js既不是框架,又不是库。它是由Chrome V8的JavaScript引擎,提供了运行时(runtime)的上下文.
作为一个开源项目,Node.js由云计算与开发提供商—Joyent所资助。同时,该公司也资助了Ruby on Rails框架,并为Twitter和LinkedIn履行着托管职责。因此,LinkedIn成为了首批使用Node.js,为其移动应用后端创建新项目的公司之一。随后Uber、eBay和Netflix等公司的技术管理员也选用了Node.js。如今,Node.js服务器已被广泛地使用在服务器端的JavaScript中.
其中,Node.js IDEs是最流行的代码编辑器之一。它拥有JavaScript和Node.js的各种帮助和插件。当然,许多Node.js开发人员也会根据编程的实际要求,选用VS Code、Brackets和WebStorm等特定工具.
Node.js不但能够满足简单的中间件开发任务,而且可以让开发人员创建出新的Restful API。您可以通过浏览链接-- https://www.tatvasoft.com/blog/node-js-best-practices/,来获悉更多Node.js开发的各种实践.
REST是REST API的设计模型与风格。使用了Node.js的REST API能够在客户端设备上执行诸如新增或替换已配置的资源等操作.
同时,为了保护RESTful API,我们可以使用Node.js来开发各种约束。也就是说,Node.js服务器将设置REST的一组限制,使API易于被创建、实现和管理。例如,每当有请求要使用RESTful API时,Node.js服务器会将请求资源的状态表示,准确地分配给使用者(customer).
首先,让我们启动一个终端,并将其转移到常规的项目中,然后使用如下命令来建立一个新的目录:
接着,我们进入该目录,并使用npm install来构建一个新的项目:
如果您在文本目录或IDE中启动此目录,就会注意到npm命令产生了一个名为package.json的文件。其具体内容如下:
JSON 。
然后,您可以在设计源中,通过命令“mkdir src”,建立一个名为src的新目录,以将所有的参考代码都放入记录之中.
下面,我们需要构建一个名为index.js的文件,并将生成的代码附加到其中:
您可以将该文件定向到自己的计算机上,并通过如下命令来试验它:
如果一切正常,您的屏幕上会显示出“Good Morning!”的字样.
上面由Node.js显示“Good Morning!”的项目比较简单。下面让我们来创建一个RESTful API.
首先,我们输入命令:“npm install body-parser cors express helmet morgan”,以建立五个依赖项:
同时,我们需要在自己的项目中标记两个项目:
下面,我们启动index.js文件,并按照如下方式替换相应的代码:
JavaScript 。
该文件的最新版本首先会发送您之前建立的所有依赖项,通过不同的Express应用来安排(const app = express())。同时,它会提供该应用的侦听端口3001(即:app.listen (3001, ...)).
此外,这段代码还包含了两个重要的方面:
另一个可以被用来创建新项目的元素是Mongoose。它是MongoDB的对象数据建模(object data modelling,ODM)库,可用于在用户模式中生成用户指南.
对此,我们首先需要使用诸如req res之类的函数,来构建Mongoose模式.
JavaScript 。
在确定了模式之后,我们可以使用如下简单的语句,将其与用户模型相连接.
接着,我们可以利用该模型,在Express端点中执行所有必需的CRUD过程.
下面,让我们通过在users/routes.config.js中找到路径,来“创建用户”:
JavaScript 。
在index.js文件的Express应用中,UsersController对象对于控制器而言是必不可少的。在/users/controllers/users.controller.js中,我们会创建一个新的密码.
JavaScript 。
现在,我们需要在管理服务器上运行“npm init start”命令,并使用JSON数据,将POST请求分配给/users,以检查Mongoose模型.
JSON 。
在此,我们可以使用多种工具。其中,Insomnia和Postman是值得推荐的GUI工具,而curl则是常规的CLI选择。您可以通过如下JavaScript,从浏览器内置的开发工具去控制日志:
JavaScript 。
上述代码的post结果将带有已创建用户的ID:{ "id": "1b63h8cn98w0m390" }。下面,我们需要将createUser过程附加到users/models/users.model.js的模型中:
JavaScript 。
下面,我们需要查看用户是否的确存在,即,针对端点users/:userId,执行“get user by id”.
首先,我们在/users/routes/config.js中创建一个方法:
JavaScript 。
接着,我们在/users/controllers/users.controller.js中创建管理器:
JavaScript 。
最后,将findById方式附加到/users/models/users.model.js的模型中:
JavaScript 。
下面是其响应的代码:
JSON 。
由上述代码可知,密码已经进行了散列处理。有时候,我们需要根据用户更新的需求,只处理需要改进的部分。例如,我们会针对/users/:userid字段,进行如下PATCH操作.
JavaScript 。
如上述代码所示,在默认情况下,我们会发送一个不带回复正文的HTTP代码204,以标识post请求成功。同时,我们需要将patchUser方式添加到模型中:
JavaScript 。
如下代码段所示,用户列表会通过控制器,在/users/处建立为GET方法:
JavaScript 。
其对应的程序为:
JavaScript 。
下面的列表展示了其相应的结果:
JSON 。
最后,让我们来讨论一下对于/users/:userId的DELETE请求。其对应的删除控制器的代码为:
JavaScript 。
类似地,如前所述,控制器也会发送一个不带回复正文的HTTP代码204,来作为确认。其对应的模型程序为:
JavaScript 。
至此,我们已完成了管理用户设备所需的所有操作。当然,我们也需要通过安装auth模块,以验证和调整的方式,限制只有管理员方可更改各种权限级别,以保障接口的安全性.
为了通过权限和验证中间件来保护用户模块,我们需要创建一个令牌--JWT,以确认用户的电子邮件和身份。作为一种特殊的JSON Web标识,JWT能够保证仅在一段时间内有效。在此,我们将为/auth的POST请求创建一个端点。如下代码段所示,其请求列表中会包含用户的电子邮件和密码:
JSON 。
我们需要在/authorization/middlewares/verify.user.middleware.js中验证用户:
JavaScript 。
在完成之后,我们便可以在控制器中创建JWT了
在此,我们省略了令牌的更新,只需要在/authorization/routes.config.js中创建路径,并调用适当的中间件即可:
JavaScript 。
如下结果中的accessToken字段包含了已创建的JWT:
JSON 。
通过该令牌,我们后续便可以使用Bearer ACCESS_TOKEN的形式,在Authorization标头中使用它了.
小结一下,我们首先使用npm构建了最新的应用程序,接着通过可管理的Express去开启Rest API端点,并管理ads。同时我们对于角色身份进行了安全认证。这便是一个简单的、在Node.js中创建安全的REST API的过程.
原文标题:Creating a Secure REST API in Node.js,作者:Michhael Smit 。
【51CTO译稿,合作站点转载请注明原文译者和出处为51CTO.com】 。
原文链接:https://developer.51cto.com/art/202108/678611.htm#topx 。
最后此篇关于在Node.js中创建安全的REST API的文章就讲到这里了,如果你想了解更多关于在Node.js中创建安全的REST API的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我已经设置了 Azure API 管理服务,并在自定义域上配置了它。在 Azure 门户中 API 管理服务的配置部分下,我设置了以下内容: 因为这是一个客户端系统,我必须屏蔽细节,但以下是基础知识:
我是一名习惯 React Native 的新程序员。我最近开始学习 Fetch API 及其工作原理。我的问题是,我找不到人们使用 API key 在他们的获取语句中访问信息的示例(我很难清楚地表达有
这里有很多关于 API 是什么的东西,但是我找不到我需要的关于插件 API 和类库 API 之间的区别。反正我不明白。 在 Documenting APIs 一书中,我读到:插件 API 和类库 AP
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 7年前关闭。 Improve thi
我正在尝试找出设计以下场景的最佳方法。 假设我已经有了一个 REST API 实现,它将从不同的供应商那里获取书籍并将它们返回给我自己的客户端。 每个供应商都提供单独的 API 来向其消费者提供图书。
请有人向我解释如何使用 api key 以及它有什么用处。 我对此进行了很多搜索,但得到了不同且相互矛盾的答案。有人说 API key 是保密的,它从不作为通信的一部分发送,而其他人则将它发送给客户端
关闭。这个问题是opinion-based .它目前不接受答案。 想改进这个问题?更新问题,以便 editing this post 可以用事实和引用来回答它. 4年前关闭。 Improve this
谁能告诉我为什么 WSo2 API 管理器不进行身份验证?我已经设置了两个 WSo2 API Manager 1.8.0 实例并创建了一个 api。它作为原型(prototype) api 工作正常。
我在学习 DSL 的过程中遇到了 Fluent API。 我在流利的 API 上搜索了很多……我可以得出的基本结论是,流利的 API 使用方法链来使代码流利。 但我无法理解——在面向对象的语言中,我们
基本上,我感兴趣的是在多个区域设置 WSO2 API 管理器;例如亚洲、美国和欧洲。一些 API 将部署在每个区域的数据中心内,而其他 API 将仅部署在特定区域内。 理想情况下,我想要的是一个单一的
我正在构建自己的 API,供以下用户使用: 1) 安卓应用 2) 桌面应用 我的网址之一是:http://api.chatapp.info/order_api/files/getbeers.php我的
我需要向所有用户显示我的站点的分析,但使用 OAuth 它显示为登录用户配置的站点的分析。如何使用嵌入 API 实现仪表板但仅显示我的网站分析? 我能想到的最好的可能性是使用 API key 而不是客
我正在研究大公司如何管理其公共(public) API。我想到的是拥有成熟 API 的公司,例如 Google、Facebook、Twitter 和 Amazon。 这些公司向公众公开了许多不同的 A
在定义客户可访问的 API 时,以下是首选的行业惯例: a) 定义一组显式 API 方法,每个方法都有非常狭窄和特定的目的,例如: SetUserName SetUserAge Se
这在本地 deserver 和部署时都会发生。我成功地能够通过留言簿教程使用 API 资源管理器,但现在我已经创建了自己的项目并尝试访问我编写的第一个 API,它从未出现过。搜索栏旁边的黄色“正在加载
我正在尝试使用 http://ip-api.com/ api通过我的ip地址获取经度和纬度。当我访问 http://ip-api.com/json从我的浏览器或使用 curl,它以 json 格式返回
这里的典型示例是 Twitter 的 API。我从概念上理解 REST API 的工作原理,本质上它只是针对您的特定请求向他们的服务器查询,然后您会在其中收到响应(JSON、XML 等),很棒。 但是
我能想到的最好的标题,但要澄清的是,情况是这样的: 我正在开发一种类似短 url 的服务,该服务允许用户使用他们的 Twitter 帐户“登录”并发布内容。现在这项服务可以包含在 Tweetdeck
我正在设计用于管理评论和讨论线程的 API 方案。我想有一个点 /discussions/:discussionId 当您GET 时,它会返回一组评论和一些元数据。评论也许可以单独访问 /discus
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭去年。 Improve this quest
我是一名优秀的程序员,十分优秀!