创建安全Node.js GraphQL API的快速指南

发布时间:2025-09-10 点击:16
本文的目标是提供关于如何创建安全的 node.js graphql api 的快速指南。【视频教程推荐:nodejs视频教程 】
你可能会想到一些问题:
使用 graphql api 的目的是什么?什么是graphql api?什么是graphql查询?graphql的好处是什么?graphql是否优于rest?为什么我们使用node.js?
这些问题都是有意义的,但在回答之前,我们应该深入了解当前 web 开发的状态:
现在几乎所有的解决方案都使用了某种应用程序编程接口(api)。即使你只用社交网络(如facebook或instagram),仍然会用到使用api的前端。如果你感到好奇,你会发现几乎所有在线娱乐服务都在用不同类型的api,包括netflix,spotify和youtube等。
你会发现几乎在每种情况下都会有一个不需要你去详细了解的api,例如你不需要知道它们是怎样构建的,并且不需要使用与他们相同的技术就能够将其集成到你自己的系统中。api允许你提供一种可以在服务器和客户端通信之间进行通用标准通信的方式,而不必依赖于特定的技术栈。
通过结构良好的api,可以拥有可靠、可维护且可扩展的api,可以为多种客户端和前端应用提供服务。
什么是 graphql api?
graphql 是一种 api 所使用的查询语言,由facebook开发并用于其内部项目,并于2015年公开发布。它支持读取、写入和实时更新等操作。同时它也是开源的,通常会与rest和其他架构放在一起进行比较。简而言之,它基于:
graphql查询 —— 允许客户端进行读取和控制接收数据的方式。graphql 修改 —— 描述怎样在服务器上写入数据。关于怎样将数据写入系统的graphql约定。
虽然本文应该展示一个关于如何构建和使用graphql api的简单但真实的场景,但我们不会去详细介绍graphql。因为graphql团队提供了全面的文档,并在introduction to graphql中列出了几个最佳实践。
什么是graphql查询?
如上所述,查询是客户端从api读取和操作数据的一种方式。你可以传递对象的类型,并选择要接收的字段类型。下面是一个简单的查询:
query{ users{ firstname, lastname }}我们尝试从用户库中查询所有用户,但只接收firstname和lastname。此查询的结果将类似于:
{ "data": { "users": [ { "firstname": "marcos", "lastname": "silva" }, { "firstname": "paulo", "lastname": "silva" } ] }}客户端的使用非常简单。
使用graphql api的目的是什么?
创建api的目的是使自己的软件具有可以被其他外部服务集成的能力。即使你的程序被单个前端程序所使用,也可以将此前端视为外部服务,为此,当通过api为两者之间提供通信时,你能够在不同的项目中工作。
如果你在一个大型团队中工作,可以将其拆分为创建前端和后端团队,从而允许他们使用相同的技术,并使他们的工作更轻松。
在本文中,我们将重点介绍怎样构建使用graphql api的框架。
graphql比rest更好吗?
graphql是一种适合多种情况的方法。 rest是一种体系结构方法。如今,有大量的文章可以解释为什么一个比另一个好,或者为什么你应该只使用rest而不是graphql。另外你可以通过多种方式在内部使用graphql,并将api的端点维护为基于rest的架构。
你应该做的是了解每种方法的好处,分析自己正在创建的解决方案,评估你的团队使用解决方案的舒适程度,并评估你是否能够指导你的团队快速掌握这些技术。
本文更偏重于实用指南,而不是graphql和rest的主观比较。如果你想查看这两者的详细比较,我建议你查看我们的另一篇文章,为什么graphql是api的未来。
在今天的文章中,我们将专注于怎样用node.js创建graphql api。
为什么要使用node.js?
graphql有好几个不同的支持库可供使用。出于本文的目的,我们决定使用node.js环境下的库,因为它的应用非常广泛,并且node.js允许开发人员使用他们熟悉的前端语法进行服务器端开发。
掌握graphql
我们将为自己的 graphql api 设计一个构思的框架,在开始之前,你需要了解node.js和express的基础知识。这个graphql示例项目的源代码可以在这里找到(https://github.com/makinhs/no…)。
我们将会处理两种类型的资源:
users ,处理基本的crud。products, 我们对它的介绍会详细一点,以展示graphql更多的功能。
users 包含以下字段:
idfirstnamelastnameemailpasswordpermissionlevel
products 包含以下字段:
idnamedescriptionprice
至于编码标准,我们将在这个项目中使用typescript。
让我们开始编码!
首先,要确保安装了最新的node.js版本。在本文发布时,在nodejs.org上当前版本为10.15.3。
初始化项目
让我们创建一个名为node-graphql的新文件夹,并在终端或git cli控制台下使用以下命令:npm init。
配置依赖项和typescript
为了节约时间,在我们的git存储库中找到以下代码去替换你的package.json应该包含的依赖项:
{ "name": "node-graphql", "version": "1.0.0", "description": "", "main": "dist/index.js", "scripts": { "tsc": "tsc", "start": "npm run tsc && node ./build/app.js" }, "author": "", "license": "isc", "dependencies": { "@types/express": "^4.16.1", "@types/express-graphql": "^0.6.2", "@types/graphql": "^14.0.7", "express": "^4.16.4", "express-graphql": "^0.7.1", "graphql": "^14.1.1", "graphql-tools": "^4.0.4" }, "devdependencies": { "tslint": "^5.14.0", "typescript": "^3.3.4000" }}更新package.json后,在终端中执行:npm install。
接着是配置我们的typescript模式。在根文件夹中创建一个名为tsconfig.json的文件,其中包含以下内容:
{ "compileroptions": { "target": "es2016", "module": "commonjs", "outdir": "./build", "strict": true, "esmoduleinterop": true }}这个配置的代码逻辑将会出现在app文件夹中。在那里我们可以创建一个app.ts文件,在里面添加以下代码用于基本测试:
console.log('hello graphql node api tutorial�

阿里云轻量服务器值不值得买
域名可以多少个字符
云服务器 抢购秒杀
什么是站群域名 站群域名购买需要注意哪些问题
如何在搬瓦工Ubuntu 20.04系统上安装OpenLiteSpeed环境
云服务器虚拟机购买
购买云兔服务器
手机打不开网站-虚拟主机/数据库问题