怎么在流行而强大的 Apache Web 服务器上托管两个或多个站点。 在我的上一篇文章中,我解释了怎么为单个站点配置 Apache Web 服务器,事实证明这很容易。...即使你只从单个站点开始,我也建议你将其设置为虚拟主机,这样可以在以后更轻松地添加更多站点。在本文中,我将从上一篇文章中我们停止的地方开始,因此你需要设置原来的站点,即基于名称的虚拟站点。...在 httpd.conf 中为第二个站点创建一个新的配置节,并将其放在上一个虚拟主机配置节下面(这两个应该看起来非常相似)。此节告诉 Web 服务器在哪里可以找到第二个站点的 HTML 文件。...例如,你可能希望为这些网站中的一个或全部使用一些 CGI 脚本。...Apache 网站 描述了管理多个站点的其他办法,以及从性能调优到安全性的配置选项。 Apache 是一个强大的 Web 服务器,可以用来管理从简单到高度复杂的网站。
最近在协助调研 Apollo 生成的代码是否有可能跨 Query 共享模型的问题,虽然初步结论是不能,并不是预期的结果,但是在调研过程中积累的一些经验,有必要记录下。...初步接触 Github API 的童鞋,可能会走好多弯路,比如把 Github APP 的token生成规则当成了 API 的访问 Token,几经周折生成出来,却发现完全不好使。...完整的工具库,见https://github.com/APIs-guru/graphql-voyager。如果能和上文的 graphiql 的 App 聚合在一起,就非常完美了。...但是其中的坑,还是有几个,记录下,或许能帮助后来的童鞋: iOS 兼容性是 iOS 9.0。如果你的项目指定最低版本为 8.0,会发现 pod 安装的总是旧版 Apollo 库。...-name '*.graphql')" --schema=schema.json --output API.swift 【未验证】如果考虑 Apollo 自定义Header或者自定义 HTTPS 证书校验
关于GraphCrawler GraphCrawler是一款功能强大的自动化安全测试工具,在该工具的帮助下,广大研究人员可以轻松对任意GraphQL节点进行安全测试。...工具运行机制 GraphCrawler基于Escape Technology强大的Graphinder工具来进行GraphQL节点搜索。...工具会对目标节点给出一个安全评级(1-10),10分为高危。...接下来,广大研究人员可以使用下列命令将该项目源码克隆至本地: git clone https://github.com/gsmith257-cyber/GraphCrawler.git (向右滑动、查看更多...、查看更多) 我们在使用该工具的时候,可以不指定输出选项,默认配置下工具会将输出结果保存到schema.json文件中。
目标 本文将上手使用 GraphQL,并用 Nestjs 与 Strapi 这两个 Node 框架搭建 GraphQL 服务。...有没有这样一个功能,将这些接口做一下聚合,然后将结果的集合返回给前端呢?...可以参阅 BFF——服务于前端的后端 但这些接口一般来说都比较重,里面有很多当前页面并不需要的字段,那还有没有一种请求:客户端只需要发送一次请求就能获取所需要的字段 有,也就是接下来要说的 GraphQL...在上面一开始的例子中是 Code First 方式,通常使用该方式即可,无需关心 Schema 是如何生成的。下文也会以 Code First 方式来编写 GraphQL 服务。...如今看来,GraphQL 还处于不温不火的状态,目前更多的站点主流还是使用 Restful API 架构。
如果你的客户端和 / 或服务器编程语言是静态类型的,并且你不能用错误的字段名或类型构造对象,那可能没问题。...如果你不使用 Swagger,这可能意味着你需要维护专门的测试基础设施。与单元测试相比,你对集成测试(即同时测试客户端和服务器端代码)的需求会更多。...如果应用程序需要项目有所有者,并且除了每个集合有单独的视图显示外,还有一个视图显示所有这些数据的聚合?它要么是三个独立的 HTTP 请求,要么是一个复杂的请求,同时获取所有数据用于聚合。...你需要同时在服务器和客户端上实现每个端点 还有大量的库可以在 ORM 或直接数据库自省的帮助下自动生成 REST 端点。即使使用了这样的库,它们通常也不是很灵活或可扩展的。...另外值得一提的两个 GraphQL 库是 PostGraphile 和 Apollo。
结果,静态类型很好的保证了服务端响应和数据转化逻辑能够匹配我们的schema。由于GraphQL schema本身就是一种类型集合,可以根据它很方便地生成TypeScript类型。...下面是我们所体会到的gRPC的主要优势: 生成对应我们全部后端服务接口的客户端类型代码是一件灰常简单的事情,我们使用这个插件来生成TypeScript definitions。...为了保证GraphQL server和前端之间的类型安全,我们使用Apollo CLI的代码生成器:使用命令行来生成我们所有GraphQL查询的类型: React示例 在我们的应用中需要用到三种查询:...{ deleteTodo(input: $input) { success } } 基于这些GraphQL查询和我们的服务端GraphQL schema,我们可以给这些查询生成typescript...结合这两个工具类型,我们可以将CreateTodoMutation的props类型表示为CreateTodoMutationClass中除了mutation相关的props类型,并且由这个封装类来自动提供
我们现在解决方案是在网关这一层,集成 GraphQL 的一个聚合服务,第二场架构师会来讲具体架构图,这边单独讲这一个点。...我们理想中的 GraphQL 接入方式,是跟网关同层嵌入在里面做一个管道,但是现在我们的实现方式呢,考虑到快速跑通,暂时把它放在网关的下面,是为它的鉴权跟安全不想占太多开发成本,把它交给网关去做了,所以它就只做数据聚合这么一件事情...拿 PPT 上这个作为示例:我们要去拿 id 为 1 的文章,如果我只要 id 和 content,我在 query 里面指定这两个字段,那么返回的就是 id 和 content,如果除了 id 和 content...第四步我解释一下,在GraphQL里面有一个类型的概念叫类型 (type),每一个类型下面对应的是一个或多个字段,每一个字段绑定了一个 resolver,这个 resolver 的作用就是获取字段对应的数据...还有比较提升性能一点,官方的 graphql-js 去执行每一个字段的 resolver 时是循环串行执行的,有没有可能做到针对实际情况适当地并行执行 resolver 。
如上所示,AddTodoResult 类型是一个 union,包含 AddTodoError 和 AddTodoSuccess 两个类型,表示或的关系。...这正是错误处理的精确表达:要么出错,要么成功。 查询数据时,我们用 ... on Type {} 的语法,同时查询两个类型下的字段。由于它们是或的关系,是互斥的,因此查询结果总是只有一组。...union type 不局限于组合两个类型,还可以组合更多类型,表达超过 2 种的互斥场景。...这个问题在 TypeScript 项目中影响重大,当 graphql-to-typescript 后,客户端会得到一份来自 graphql 生成的类型。由于服务端没有标记 !...五、GraphQL 应用场景 作为 BFF 服务,在解决单一接口快速接入之后,通常会回到聚合多个服务端接口这个最初的目的,下面是常见几种的串、并调用等应用场景。
提到前后端同构,不得不提到最近流行的两个框架react和vue,但是这两个框架更多是作为一个view层来出现的,实际上我们的业务场景有时候复杂的不是view层,更多的是model层。...+ 容灾版:容灾版是内部爬虫爬直出服务生成的静态化页面,定期生成,静态版不包含前端引擎及rds文件。...hawaii是一个更底层的框架,后续也会支持react/view组件化。 与GraphQL对比 Hawaii不仅仅支持页面的直出,也可以提供为数据聚合网关。...从json聚合接口的焦点来讲,与GraphQL是完全可以对比的,完全具备GraphQL宣称的“请求数据仅需一次请求”、“数据完全按需”两个特点,除了没有类型系统外。...Hawaii在无需修改现有任何接口和服务的情况下,提供数据一次请求及数据按需两个特性的支持,仍然不失为一个可行且不错的解决方案。
使用 ORDS,您可以进行聚合和连接,但这是通过创建您可以调用的自定义函数来完成的。但是应用程序必须知道这些函数做了什么才能理解如何解释结果。没有元数据或标准行为定义可以告诉应用程序会发生什么。...例子 为了直观地说明使用这些 API 的差异,以下两个代码示例展示了如何在 GraphQL 和 OData 中执行“排序依据”。...它功能强大,但使用它意味着您的应用程序与特定 GraphQL 服务的实现方式紧密耦合。没有办法笼统地描述它是如何工作的。...这为服务开发人员设置了更大的进入壁垒。 但是,您可以利用我们的混合技术来生成标准 REST API (OData)。...我们利用我们的混合技术完成所有繁重的工作,以生成标准的 REST API (OData)。我们使用 OData 完成所有繁重的工作,因此您不必担心遵守标准。我们为您降低了进入门槛。
GraphQL 这种方式能够将原有 RESTful 风格时的多次请求聚合成一次请求,不仅能够减少多次请求带来的延迟,还能够降低服务器压力,加快前端的渲染速度。...集中式 vs 分散式 GraphQL 以图的形式将整个 Web 服务中的资源展示出来,其实我们可以理解为它将整个 Web 服务以 “SQL” 的方式展示给前端和客户端,服务端的资源最终都被聚合到一张完整的图上...我们可以看到当前博客服务总共由内容、评论以及订阅三个不同的服务来提供,在这时其实并没有充分利用 GraphQL 服务的好处,当客户端或前端同时需要多个服务的资源时,需要分别请求不同服务上的资源,并不能通过一次...,没有办法将多个不同服务中的资源关系串联起来,这对于中心化设计的 GraphQL 来说其实会造成一定体验上的丢失。...GraphiQL,并可以通过代码生成文档,节约文档的维护成本和沟通成本; 不得不说 GraphQL 作为一门新兴的技术有着非常多的优点,很多公司都在尝试使用 GraphQL 对外提供 API,虽然目前来说这门技术不算特别成熟
集中式 vs 分散式 GraphQL 以图的形式将整个 Web 服务中的资源展示出来,其实我们可以理解为它将整个 Web 服务以 “SQL” 的方式展示给前端和客户端,服务端的资源最终都被聚合到一张完整的图上...评论以及订阅三个不同的服务来提供,在这时其实并没有充分利用 GraphQL 服务的好处,当客户端或前端同时需要多个服务的资源时,需要分别请求不同服务上的资源,并不能通过一次 HTTP 请求满足全部的需求...,没有办法将多个不同服务中的资源关系串联起来,这对于中心化设计的 GraphQL 来说其实会造成一定体验上的丢失。...集中式 vs 分散式 GraphQL 以图的形式将整个 Web 服务中的资源展示出来,其实我们可以理解为它将整个 Web 服务以 “SQL” 的方式展示给前端和客户端,服务端的资源最终都被聚合到一张完整的图上...,没有办法将多个不同服务中的资源关系串联起来,这对于中心化设计的 GraphQL 来说其实会造成一定体验上的丢失。
实际上在模块的生成过程中存在诸多的差异,比如以下两种差异: 字段拼接逻辑差异:比如以上图中两个团购货架的团购标题为例,同样是标题,在丽人团购货架中的展示规则是:[类型] + 团购标题,而在足疗团购货架的展示规则是...同时,借助GraphQL的编排和聚合查询能力,后端可以将逻辑分解在不同的展示服务中,因此在一定程度上能够化解BFF这层的复杂性。...问题:商品标题展示服务自己调用类型数据还是将两个展示服务合并到一起? 以上描述的问题的是展示服务颗粒度把控的问题,我们可以怀疑上述的示例是不是因为展示服务的颗粒度过小?...2)数据图划分问题 通过GraphQL将多个展示服务的数据聚合到一张图(GraphQL Schema)中,形成一个数据视图,需要数据的时候只要数据在图中,就可以基于Query按需查询。...思考一下取数逻辑和展示逻辑的关注点是什么?取数逻辑关注怎么查询和聚合数据,而展示逻辑关注怎么加工生成需要的展示字段,它们的关注点不一样,放在一起也会增加展示服务的复杂性。
GraphiQL:为 《星球大战》API 自动生成的测试 GUI 我们的经验已经为对 GQLMS 作为快速开发平台感兴趣的团队带来了一个具有许多最佳实践的架构。...聚合函数 或 JSON 函数 时,Graphile 在如何描述嵌套类型方面存在局限性。...,数据类型为 JSON: json 字段的内部结构(hello world 和 2 这两个子字段)在生成的 GraphQL 模式中是不透明的。...另外,对这两个字段的描述都被显示在生成的 GraphQL 模式中。...向 Graphile 生成的模式中添加自定义查询和突变(即公开 UI 所需的 gRPC 服务调用)是我们目前在 Docker 镜像中不支持的。
当这样的相似但又不同的地方多的时候,就需要开发更多的接口来满足前端的需要。增加了后端开发人员的工作量和重复度。...Endpoints对比 REST API's Endpoints GraphQL 实际上将多个 HTTP 请求聚合成了一个请求,将多个 restful 请求的资源变成了一个从根资源 POST 访问其他资源的...Tipe (github): 一个 SaaS(软件即服务)内容管理系统,允许你使用强大的编辑工具创建你 的内容,并通过 GraphQL 或 REST API 从任何地方访问它。...quicktype (github): 在 TypeScript、Swift、golang、C#、C++ 等语言中为 GraphQL 查 询生成类型。...看完这篇介绍,有没有想动手尝试一下呢? 你会在你下一个项目中引入Graphql并使用它吗? 你对Graphql还有什么疑惑的问题呢?
当这样的相似但又不同的地方多的时候,就需要开发更多的接口来满足前端的需要。增加了后端开发人员的工作量和重复度。...Tipe (github): 一个 SaaS(软件即服务)内容管理系统,允许你使用强大的编辑工具创建你 的内容,并通过 GraphQL 或 REST API 从任何地方访问它。...quicktype (github): 在 TypeScript、Swift、golang、C#、C++ 等语言中为 GraphQL 查 询生成类型。...想要学习更多Graphql的知识,可以去GraphQL.cn。 好了,一个入门级的Graphql介绍篇就这样完结了(尽管篇幅也很大哈哈)。 不知道你懂得它的原理和优点了吗? 你对它感兴趣吗?...看完这篇介绍,有没有想动手尝试一下呢? 你会在你下一个项目中引入Graphql并使用它吗? 你对Graphql还有什么疑惑的问题呢?
过了2年,如今再回过头来看,已经涌现出各种开源或商用服务专注于这个领域,各种语言的框架和工具也都很完备了,感觉是时候重新接触GraphQL了。...我会和产品和前端开发团队一起来讨论需要提供哪些数据类型,查询或更新操作。如果你了解领域驱动设计方法[4],你会很熟悉这个流程。前端开发团队在拿到服务端返回的数据结构之前是没有办法开始编码的。...如何让我们的服务能支持复杂的聚合查询呢?...把resolver定位为一个纯函数,是GraphQL设计者们的另一个明智之举。 查询引擎的集成化测试 那么,如何来测试数据依赖,类型和聚合逻辑呢?...但他们同时也靠售卖GraphQL相关服务来盈利,所以在盲目遵从他们提供的教程之前,你最好能有个备选方案。 开发一个GraphQL服务端需要比REST服务端更多的工作,但同样你也会得到加倍的回报。
GraphQL - Wikipedia 简单翻译一下: GraphQL是一个由Facebook在2012年的内部项目孵化并且于2015年正式发布的一个文档型API GraphQL的用法 GraphQL里面的所有操作归为两类..., 一个是query, 一个是mutation Query可以简单理解为 rest的get请求, 就是一个获取资源的请求....GraphQL对前端来说的弊端/麻烦 那么GraphQL对前端来说有没有弊端或者麻烦的地方呢? 当然是有的, 这里我们说两个问题....消息体暴露带来的安全问题 我们在请求的时候, 可以从http请求的Headers里面看到我们的query, 里面有完整的schema, 那么有没有解决这两点的办法呢?...预生成persisted query 刚刚我们介绍了, 如何在使用过程中生成. 但是如何预生成呢? 也就是, 在前端部署的过程中或者是在访问页面之前就已经生成好.
全貌 GraphQL 是一种 API 规范。不是拿来即用的库或框架。不同对 GraphQL 的实现在客户端的用法几乎没有区别,但在服务端的开发方式则天差地别。...函数),或 apollo-server 提供的服务执行。...提供了生成可执行 Schema 的函数和执行 Schema 生成返回值的函数(graphql、execute 函数),使用执行方法可快速将现有 API 接口快速改造为 GraphQL 接口。...适合高度定制 GraphQL 服务或快速改造。...没有 BFF 层时,由于 GraphQL 对于实现数据聚合、字段转换提供了范式,可以考虑使用 GraphQL 服务作为 BFF 层,或者结合1、2点,将部分接口实现为 GraphQL,作为 BFF 层的一部分
正文 RestFul的缺陷 假设,此时我们有两个资源分别是Book和Author,这两个资源对应的ER图如下 相应的API有 POST /books GET /books/{id} POST /authors...VO(View Object):视图对象,用于展示层,它的作用是把某个指定页面(或组件)的所有数据封装起来。...那么,有没有办法让前端自定灵活的使用查询语句,自己想捞什么数据就捞什么数据呢? 有的,那就是Graphql!...一些疑问 (1)java语言中,对Graphql的支持如何? 在java中,有个jar包为graphql-java-tools提供了对Java的支持。...第一,前端不用了解后端的数据结构,GraphQL自己生成可交互式的接口文档,前端可以自己测试调用 第二,后端不用在编写什么接口文档,GrapQL自动帮你生成,用起来非常舒心!
领取专属 10元无门槛券
手把手带您无忧上云