首页
学习
活动
专区
圈层
工具
发布

GraphQL 初体验,Node.js 构建 GraphQL API 指南

在传统的基于 REST 的 API 方法中,客户端发出请求,而服务端决定响应。 但是在 GraphQL 中,客户端可以精确地确定其从服务器获取的数据。...综上所述,这些响应的有效载荷可能超过了渲染你当前页面的需要,而且每个 API 调用都有网络延迟,总的延迟加起来可能非常恐怖。...使用 GraphQL,你无需进行多个 API 调用(例如 GET /user/:id 和 GET /user/:id/addresses ),而是进行一次 API 调用并将查询提交到单个端点: ` query...因为我们使用的是 Express,所以我们可以使用 express-graphql 包来暴露我们的模式作为端点。...但这个缺点也是积极的:通过仔细设计你的 Graphql Schema,你可以避免在更容易实现(也更容易破坏)的 REST 端点中明显的陷阱,如命名的不一致和混乱的关系。

8.9K40
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    使用Node.js构建API网关

    0_tsaWLhYvsKIOITHQ_.jpg Netflix处理不同客户的方法,来源 API网关功能 我们在前面讨论过,你可以将通用共享逻辑放入你的API网关,而在本节将介绍最常见的网关职责(做什么...你还可以在API网关中定义与多个服务协作的新端点。 0_xFnCEkaYwNb-edFl (1).png 演进式设计 API网关方法还可以帮助你分解你的整体应用。...在这种情况下,我们可以在整体应用前放置一个代理或API网关,实现微服务作为新功能,并将新端点路由到新服务,同时我们也可以通过巨型服务器为旧端点服务。...0_CZk-BgeShcNbtQmL (1).png 限速和缓存 在前面的例子中,你可以看到我们可以将通用的共享逻辑(如身份验证)放入API网关中。...在Node.js中,你可以使用http-proxy包简单地将请求代理到特定服务,或者你可以使用功能更多的功能丰富的express-gateway来创建API网关。

    5.3K90

    从零到部署:用 Vue 和 Express 实现迷你全栈电商应用(最终篇)

    (七)[9] 应用容器化和 Docker Compose 配置 首先,如果你是一路跟着前面七篇教程一路敲过来的,那么将整个 Vue 前端项目放到新创建的 client 目录中,把整个 Express 后端项目放到新创建的...并且,所有获取前端资源的请求(例如 HTML、CSS、JS 等静态文件资源),Nginx 可以直接返回;所有获取 API 端点的请求(例如 /api/v1/products ),则将请求转交给给 API...这种经典的架构有以下优势: 通过 Nginx 可以实现访问控制,过滤掉不合法的请求 解决了前后端跨域的问题,因为前端页面和后端 API 都通过同一个端点访问 整个应用架构对用户透明,可以轻松进行配置扩容...8080:80 注意 在指定每个 service 时,如果使用 image 字段指定镜像,那么就会直接从镜像仓库拉取该镜像,这里我们的 db 服务就是如此。.../nginx client docker push registry.cn-shanghai.aliyuncs.com/vue-online-shop/nginx 提示 实际部署时,建议给每个镜像加上一个标签

    1.4K20

    什么是REST API

    ` } ) ); 或者,Express.js中间件函数可以将头部附加到每个端点请求: // enable CORS app.use((req, res, next) => { res.append...API密钥[17]。第三方应用程序通过发布一个密钥来获得使用API的许可,这个密钥可能有特定的权限或被限制在一个特定的域。密钥在每个请求中的HTTP头或查询字符串中被传递。 OAuth[18]。...在发出任何请求之前,通过向OAuth服务器发送一个客户ID和可能的客户秘密,获得一个令牌。然后,OAuth令牌会随每个API请求一起发送,直到过期。...验证所有端点URL和body对象。 避免在客户端JavaScript中暴露API令牌。 阻止来自未知域名或IP地址的访问。 阻止意外的大型有效负载。...响应包含有每个作者ID的书籍列表。 最多组成10个/author/{id}请求以获取每个作者的详细信息。 这被称为「N+1问题」;必须为父请求中的每个结果提出N个API请求。

    5.2K20

    使用 Node.js 搭建一个 API 网关(助力微服务)

    你还可以在你的API网关中定义与多个服务配合的新端点。 ? API 网关作为微服务入口点 网关设计的进化 API网关方法可以帮助你分解整体应用程序。...在这种情况下,我们可以将代理或 API 网关置于我们的整体应用程序之前,将新功能作为微服务实现,并将新端点路由到新服务,同时通过原有的路由服务旧端点。...限速和缓存 在前面的例子中,你可以看到我们可以把通用的共享逻辑(如身份验证)放在 API 网关中。除了身份验证之外,你还可以在 API 网关中实现速率限制,缓存以及各种可靠性功能。...在 Node.js 中,你可以使用 http-proxy 软件包简单地代理对特定服务的请求,也可以使用更多丰富功能的 express-gateway 来创建 API 网关。...在我们的第一个 API 网关示例中,我们在将代码委托给 user 服务之前验证请求。

    3.1K20

    使用 Node.js 搭建一个 API 网关

    您还可以在您的 API 网关中定义与多个服务配合的新端点。 ? API 网关作为微服务入口点 网关设计的升级 API 网关方法也可以帮助您分解您的整体应用程序。...在这种情况下,我们可以将代理或 API 网关置于我们的整体应用程序之前,将新功能作为微服务实现,并将新端点路由到新服务,同时通过原有的路由服务旧端点。...速率限制和缓存 在前面的例子中,您可以看到我们可以把通用的共享逻辑(如身份验证)放在 API 网关中。除了身份验证之外,您还可以在 API 网关中实现速率限制,缓存以及各种可靠性功能。...在 Node.js 中,您可以使用 http-proxy 软件包简单地代理对特定服务的请求,也可以使用更多丰富功能的 express-gateway 来创建 API 网关。...API 网关中发出新的请求,并将响应返回给客户端: const express = require('express') const request = require('request-promise-native

    3.1K80

    使用 Node.js 构建 API 网关

    你甚至可以在路由时进行版本控制或者在暴露的公共接口不变的情况下改变后台接口。你也可以定义新的端点来配合不同的服务。 ?...在这种情况下,我们可以为我们庞大的应用设置一个代理或者一个API Gateway,然后以微服务实现新的功能并路由新的端点到新的服务上,同时我们可以用原来的庞大的应用为旧的端点提供服务。...在微服务架构里,你可以通过网络配置保护你的服务在DMZ(控制区)里,同时把它们通过API Gateway暴露给客户端。这个gateway也可以处理多个认证方式。...限速和缓存 前面的例子,你可以看见我们把像认证这种通用的共享逻辑放在API Gateway里。除了认证,你也可以在API Gateway里实现限速,缓存和各种可靠特性。...const express = require('express') const httpProxy = require('express-http-proxy') const app = express

    2.9K20

    13个构建RESTful API的最佳实践

    你可以设计以下路由来实现此目的: api.com/addNewAuthor api.com/getAuthorByID/3 想象一下,一个承载了许多资源的API,每个资源都有许多属性。...可能的端点列表将变得无穷无尽,而且对用户不是很友好。所以我们需要一种更有组织、更标准化的方式来设计API端点。...这种方法的最大优点是,每个开发者都了解RESTful API是如何设计的,他们可以立即使用API,而不必阅读你的每个端点的文档。 使用复数资源 资源应始终使用其复数形式。为什么?...因此,你会调用以下端点:GET api.com/authors 。 当你阅读请求时,你无法判断API响应将只包含一个或所有作者。出于这个原因,API端点应该使用复数资源。...对于Node.js,后端开发人员喜欢使用Express.js[6],而对于Python,Falcon[7]是一个不错的选择。 输出文档 最后,就是编写文档!我没有在开玩笑。

    1.6K20

    前端小白玩转koa(一)

    Koa 作为 Express 的后继者,Koa 在异步操作处理和中间件机制上更加先进,通过使用 async/await 语法,让异步代码的编写更加直观,采用洋葱模型的中间件,使请求和响应的处理更加灵活。...特点: 模块化架构:采用模块来组织代码,每个模块可以包含控制器、服务、提供者等组件。...它提供了强大的模型驱动的开发方式,能够自动生成 API 端点和数据库访问代码。...可以通过配置不同的认证策略(如基于 JWT、OAuth 等)来保护 API 端点。...ps:这里2年前用koa写的了,现在公司在使用NestJS,所有后续还会用NestJS重构一下,体验不同框架之间的差别和优劣、开发体验等等 开发微信小程序(记账小程序&h5通用api) 为什么写记账功能

    45920

    【微服务架构 】微服务简介,第3部分:服务注册表

    在微服务系列的这篇文章中,我们将讨论服务注册表。在第2部分中,我们讨论了API网关,其中我们提到服务已在数据库中注册。网关根据该数据库中包含的信息调度请求。...客户端发现强制客户端在执行实际请求之前查询发现服务。正如自我注册所发生的那样,这要求客户处理除主要目标之外的其他问题。发现服务可能位于API网关后面,也可能不位于API网关后面。...此外,每个客户端都需要知道要联系发现服务的固定端点(或端点)。这些都是缺点。一个很大的优点是不必在网关系统中编写必要的逻辑。选择发现方法时,请仔细研究。 ?...服务器端发现使API网关处理发现请求的正确端点(或端点)。 这通常用于更大的架构。 由于所有请求都直接发送到网关,所以与之相关的所有好处都适用(参见第2部分)。...“服务器端发现使API网关能够处理发现请求的正确端点。” 服务器端发现 ? 示例:注册表服务 在第2部分中,我们研究了一个简单的API网关实现。在该示例中,我们通过查询到服务数据库来实现动态调度请求。

    1.1K20

    手写Express.js源码

    上一篇文章我们讲了怎么用Node.js原生API来写一个web服务器,虽然代码比较丑,但是基本功能还是有的。但是一般我们不会直接用原生API来写,而是借助框架来做,比如本文要讲的Express。...手写源码 手写源码才是本文的重点,前面的不过是铺垫,本文手写的目标就是自己写一个express来替换前面用到的express api,其实就是源码解析。...在开始之前,我们先来看看用到了哪些API: express(),第一个肯定是express函数,这个运行后会返回一个app的实例,后面用的很多方法都是这个app上的。...我之前在讲JS的面向对象的文章提到过如果你要给一个类加上类方法可以这样写: function Class() {} Class.prototype.method1 = function() {} var...路由也是一个layer,layer上有一个path属性来表示他可以处理的API路径。 path可能有不同的method,每个method对应layer.route上的一个layer。

    5.8K30

    express新手入门指南

    在这篇教程中,你将了解 Express 在 Node 内置 http 模块的基础上做了怎样的封装,并掌握路由和中间件这两个关键概念,学习和使用模板引擎、静态文件服务、错误处理和 JSON API,最终开发出一个简单的个人简历网站...路径和请求方法合起来一般被称为 API 端点(Endpoint)。而服务器根据客户端访问的端点选择相应处理逻辑的机制就叫做路由。...Express 的简化版中间件流程如下图所示: ? 首先客户端向服务器发起请求,然后服务器依次执行每个中间件,最后到达路由,选择相应的逻辑来执行。...这张示意图和之前的图有两点重大区别: •每个路由定义本质上是一个中间件(更准确地说是一个中间件容器,可包含多个中间件),当 URI 匹配成功时直接返回响应,匹配失败时继续执行下一个路由•每个中间件(包括路由...到了动手环节,让我们在 server.js 中添加一个简单的 JSON API 端口 /api,返回关于图雀社区的一些数据: // ...

    3.6K20

    解释 RESTful API,以及如何使用它构建 web 应用程序。

    REST(Representational State Transfer)的设计原则包括以下几个方面: 资源(Resources):RESTful API将每个数据或功能视为一个资源,通过URL地址来表示...每个资源都有唯一的URL。 动词(Verbs):RESTful API使用HTTP动词(GET、POST、PUT、DELETE等)对资源进行操作。...使用RESTful API构建Web应用程序的一般步骤如下: 设计数据模型:确定应用程序的数据模型和资源。 设计URL结构:为每个资源设计唯一的URL地址。...设计HTTP方法:确定每个资源对应的HTTP方法(GET、POST、PUT、DELETE等)。 设计数据表示:选择合适的数据格式(如JSON、XML)来表示数据。...实现API端点:使用Web框架(如Express、Django)实现API端点,处理HTTP请求和响应。 鉴权和权限控制:根据应用程序需要,实现用户鉴权和权限控制。

    29100

    【Web前端】Web API:构建Web应用核心

    可识别的入口点 API 通常通过特定的 URL 路径(即“端点”)提供访问,每个端点对应于 API 提供的某种功能。...这种结构化的设计使得开发者能够清晰地理解和使用 API,便于进行数据请求、操作和管理。 1、API 端点 在 RESTful API 中,端点是客户端与服务器之间交互的具体路径。...每个端点通常对应着一种资源或一组相关的操作。例如,在用户管理系统中,我们可能会有以下几个常见的 API 端点: 获取所有用户:用于检索系统中的所有用户信息。...如何定义多个 API 端点,并且使用 JavaScript 对这些端点进行组织: const apiEndpoints = { getUsers: "/api/users", // 获取所有用户...下面是一个使用 Express 框架设置 CORS 的示例代码: const express = require('express'); const cors = require('cors'); const

    1K10

    Dapr 入门教程之消息队列

    : topic - name: publishTopic value: sample - name: authRequired value: "false" 前面在本地模式下面我们没有主动声明组件...如何工作 前面我们在本地或 Kubernetes 中都运行了示例应用,而且没有更改任何代码,应用结果都符合预期,接下来我们看看这是如何工作的。...这里使用 Express 暴露了一个 API 端点,需要注意的是 API 名称必须与在 Kafka 绑定组件中声明的组件名称相同,然后 Dapr 运行时将使用来自 sample 主题的事件,然后将 POST...const express = require("express"); const bodyParser = require("body-parser"); const port = process.env.APP_PORT..."3000"; require("isomorphic-fetch"); const app = express(); app.use(bodyParser.json()); // 这里的 api

    87920

    Claude Code子代理完全指南:从0到1构建你的AI编程军团

    Patterns) 这就像你在组建一个虚拟开发团队,每个成员都有自己的专业领域和工作职责。...以下是我的开发方法: **我使用的API架构:** -带有适当HTTP状态码的RESTful端点 -Express.jswithTypeScriptforNode.jsAPIs -PrismaORM进行数据库操作...测试API架构师 测试构建用户认证端点: "构建一个完整的用户注册API端点,包含邮箱验证、密码哈希和JWT令牌生成。"...const express = require('express'); const app = express(); app.post('/login', (req, res) => { const...架构师 - 创建安全、结构良好的后端代码 代码审查执行者 - 在问题到达生产之前捕获它们 技术研究助手 - 让我了解新技术 每个代理都有自己的专业领域、特定工具和与我的开发风格相匹配的详细指令。

    54710

    Dapr 入门教程之发布订阅

    Node 消息订阅服务 重新导航到 node-scriber 目录并查看 Node.js 订阅者代码 app.js,该服务通过 Express 暴露了三个 API 端点。...app.post("/B", (req, res) => { console.log("B: ", req.body.data.message); res.sendStatus(200); }); 这两个端点处理来自每个主题类型的消息...与 Node.js 订阅者一样,我们暴露了三个 API 端点,只是这里使用的是 flask,第一个是 GET 端点: @app.route('/dapr/subscribe', methods=['GET...Express 内置的 JSON 中间件函数用于解析传入请求中的 JSON: app.use(express.json()); 这样我们可以获取到提交的 messageType,可以确定使用哪个主题来发布消息...要使用 Dapr 来发布消息,同样也是直接使用 Dapr 提供的 API 端点 http://localhost:/publish// 即可,

    1.8K40
    领券