代码之家  ›  专栏  ›  技术社区  ›  Strider

防止Apollo服务器2中的重复查询

  •  0
  • Strider  · 技术社区  · 6 年前

    Apollo Server Documentation ,有一个链接指向如何使用 KeyValueCache ,但我不知道如何使用它来防止重复查询多次运行。

    谢谢

    1 回复  |  直到 6 年前
        1
  •  3
  •   Daniel Rearden    6 年前

    express-rate-limit

    const server = new ApolloServer({ typeDefs, resolvers })
    const app = express()
    
    const limitMiddleware = rateLimit({
      windowMs: 15 * 60 * 1000,
      max: 100,
    })
    
    app.use(limitMiddleware)
    server.applyMiddleware({ app })
    
    app.listen({ port: 4000 })
    

    默认情况下,中间件会关闭请求IP,但是如果您希望更细粒度地关闭IP和查询字段名(例如),您可以使用 graphql-tag 并相应地生成一个密钥。

    GraphQL在安全性方面提出了一些独特的挑战。你可以看看 this article 要进行更深入的讨论,除了限速之外,您可能还需要研究以下措施:

    1. 数量限制-在存储级别使用限制,使用自定义标量或在解析器中实现检查,以防止一次返回太多的一个“东西”
    2. 查询深度限制- graphql-depth-limit
    3. graphql-validation-complexity graphql-cost-analysis