diff --git a/site/code/index.html.js b/site/code/index.html.js index 88f524aa54..cfc2b09c68 100644 --- a/site/code/index.html.js +++ b/site/code/index.html.js @@ -33,16 +33,46 @@ GraphQL 已有多种编程语言支持。下表包含一些流行的服务端框 - [Groovy](#groovy) - [Java](#java) - [JavaScript](#javascript) +- [Kotlin](#kotlin) - [PHP](#php) - [Python](#python) -- [Scala](#scala) - [Ruby](#ruby) +- [Rust](#rust) +- [Scala](#scala)] +- [Swift](#swift) ### C# / .NET - - [graphql-dotnet](https://github.com/graphql-dotnet/graphql-dotnet):.NET 的 GraphQL 实现 +#### [graphql-dotnet](https://github.com/graphql-dotnet/graphql-dotnet):.NET 的 GraphQL 实现 + +\`\`\`csharp +using System; +using GraphQL; +using GraphQL.Types; + +public class Program +{ + public static void Main(string[] args) + { + var schema = Schema.For(@" + type Query { + hello: String + } + "); + var json = schema.Execute(_ => + { + _.Query = "{ hello }"; + _.Root = new { Hello = "Hello World!" }; + }); + Console.WriteLine(json); + } +} +\`\`\` + - [graphql-net](https://github.com/ckimes89/graphql-net):转换 GraphQL 到 IQueryable - - [Hot Chocolate](https://github.com/ChilliCream/hotchocolate):针对 .net core 和 .net classic 的 GraphQL 服务器 + - [Entity GraphQL](https://github.com/lukemurray/EntityGraphQL):针对 .NET Core 的 GraphQL 库。编译为 IQueryable 以轻松地从现有的数据模型(例如从 Entity Framework 数据模型)中暴露出 schema + - [DotNetGraphQLQueryGen](https://github.com/lukemurray/DotNetGraphQLQueryGen):从 GraphQL schema 生成类,以在 dotnet 中进行类型安全的查询的 .NET Core 库 + - [Hot Chocolate](https://github.com/ChilliCream/hotchocolate):针对 .NET core 和 .NET classic 的 GraphQL 服务器 ### Clojure @@ -128,6 +158,8 @@ $ curl -XPOST "http://0:3000" -H'Content-Type: application/json' -d'{ - [graphql-relay-go](https://github.com/graphql-go/relay):一个用于帮助构建 graphql-go 服务器的 Go/Golang 库,支持 react-relay 。 - [machinebox/graphql](https://github.com/machinebox/graphql):用于 GraphQL 的一个优雅的底层 HTTP 客户端。 - [samsarahq/thunder](https://github.com/samsarahq/thunder):可轻松进行 schema 构建、实时查询和批处理的 GraphQL 实现。 + - [99designs/gqlgen](https://github.com/99designs/gqlgen):一个 schema 优先的 GraphQL 服务器生成。 + - [appointy/jaal](https://github.com/appointy/jaal):在 Go 中开发符合规范的 GraphQL 服务器。 ### Groovy @@ -145,7 +177,7 @@ $ curl -XPOST "http://0:3000" -H'Content-Type: application/json' -d'{ 更多信息请查看 [文档](https://grails.github.io/gorm-graphql/latest/guide/index.html)。 -#### [GQL](https://grooviter.github.io/gql/) +#### [GQL](https://grooviter.github.io/gql/) GQL 是一个在 Groovy 中使用 GraphQL 的库。 @@ -177,7 +209,7 @@ public class HelloWorld { SchemaParser schemaParser = new SchemaParser(); TypeDefinitionRegistry typeDefinitionRegistry = schemaParser.parse(schema); - RuntimeWiring runtimeWiring = newRuntimeWiring() + RuntimeWiring runtimeWiring = new RuntimeWiring() .type("Query", builder -> builder.dataFetcher("hello", new StaticDataFetcher("world"))) .build(); @@ -266,47 +298,83 @@ app.listen(4000, () => console.log('Now browse to localhost:4000/graphql')); 如果要运行 \`apollo-server-express\` 的 hello world 服务器: \`\`\`bash -npm install apollo-server-express body-parser express graphql graphql-tools +npm install apollo-server-express express \`\`\` 然后使用 \`node server.js\` 以运行 \`server.js\` 中的代码: \`\`\`js -var express = require('express'); -var bodyParser = require('body-parser'); -var { graphqlExpress, graphiqlExpress } = require('apollo-server-express'); -var { makeExecutableSchema } = require('graphql-tools'); - -var typeDefs = [\` -type Query { - hello: String -} - -schema { - query: Query -}\`]; - -var resolvers = { - Query: { - hello(root) { - return 'world'; - } +const express = require('express'); +const { ApolloServer, gql } = require('apollo-server-express'); +const typeDefs = gql\` + type Query { + hello: String } +\`; +const resolvers = { + Query: { + hello: () => 'Hello world!', + }, }; - -var schema = makeExecutableSchema({typeDefs, resolvers}); -var app = express(); -app.use('/graphql', bodyParser.json(), graphqlExpress({schema})); -app.use('/graphiql', graphiqlExpress({endpointURL: '/graphql'})); -app.listen(4000, () => console.log('Now browse to localhost:4000/graphiql')); +const server = new ApolloServer({ typeDefs, resolvers }); +const app = express(); +server.applyMiddleware({ app }); +app.listen({ port: 4000 }, () => + console.log('Now browse to http://localhost:4000' + server.graphqlPath) +); \`\`\` Apollo Server 也支持所有的 Node.js HTTP 服务器框架:Express、Connect、HAPI 和 Koa。 +### Kotlin + + - [graphql-kotlin](https://github.com/ExpediaGroup/graphql-kotlin/):一组用于在 Kotlin 中运行 GraphQL 服务器的库。 + + ### PHP - [graphql-php](https://github.com/webonyx/graphql-php):GraphQL 参考实现的 PHP 移植版本。 - [graphql-relay-php](https://github.com/ivome/graphql-relay-php):一个用于辅助构建 graphql-php 服务器的库,支持 react-relay。 + - [Lighthouse](https://github.com/nuwave/lighthouse):一个用于 Laravel 的 GraphQL 服务器 + - [GraphQLBundle](https://github.com/overblog/GraphQLBundle):一个用于 Symfony 的 GraphQL 服务器 + +#### [API Platform](https://api-platform.com) ([github](https://github.com/api-platform/api-platform)) + +API Platform 是一个基于 Symfony 构建的功能齐全、灵活且可扩展的 API 框架。 +以下的类足以创建与 Relay 兼容的 GraphQL 服务器和支持现代 REST 格式(JSON-LD、JSONAPI...)的超媒体 API: + +\`\`\`php + (obj, args, ctx) { 'Hello world!' } end end -Schema = GraphQL::Schema.define do +class Schema < GraphQL::Schema query QueryType end @@ -413,6 +485,10 @@ puts Schema.execute('{ hello }').to_json 其也有对于 Relay 和 Rails 的良好绑定。 +### Rust + + - [graphql-rust/juniper](https://github.com/graphql-rust/juniper):用于 Rust 的 GraphQL 服务端库 + ### Scala #### [Sangria](http://sangria-graphql.org/) ([github](https://github.com/sangria-graphql/sangria)):支持 [Relay](https://facebook.github.io/relay/) 的一个 Scala GraphQL 库。 @@ -439,6 +515,7 @@ Executor.execute(schema, query) map println - [C# / .NET](#c-net-1) - [Clojurescript](#clojurescript-1) +- [Flutter](#flutter) - [Go](#go-1) - [Java / Android](#java-android) - [JavaScript](#javascript-1) @@ -455,6 +532,10 @@ Executor.execute(schema, query) map println - [re-graph](https://github.com/oliyh/re-graph/):一个在 Clojurescript 中实现的 GraphQL 客户端,支持 websockets。 +### Flutter + + - [graphql](https://github.com/zino-app/graphql-flutter#readme):一个 Flutter 中的 GraphQL 客户端实现。 + ### Go - [graphql](https://github.com/shurcooL/graphql#readme):一个使用 Go 编写的 GraphQL 客户端实现。 @@ -468,12 +549,13 @@ Executor.execute(schema, query) map println - [Relay](https://facebook.github.io/relay/) ([github](https://github.com/facebook/relay)) ([npm](https://www.npmjs.com/package/react-relay)):Facebook 的框架,用于构建与 GraphQL 后端交流的 React 应用。 - [Apollo Client](http://apollographql.com/client/) ([github](https://github.com/apollographql/apollo-client)):一个强大的 JavaScript GraphQL 客户端,设计用于与 React、React Native、Angular 2 或者原生 JavaScript 一同工作。 - - [graphql-request](https://github.com/graphcool/graphql-request):一个简单的弹性的 JavaScript GraphQL 客户端,可以运行于所有的 JavaScript 环境(浏览器,Node.js 和 React Native)—— 基本上是 \`fetch\` 的轻度封装。 + - [graphql-request](https://github.com/prisma/graphql-request):一个简单灵活的 JavaScript GraphQL 客户端,可以运行于所有的 JavaScript 环境(浏览器,Node.js 和 React Native)—— 基本上是 \`fetch\` 的轻度封装。 - [Lokka](https://github.com/kadirahq/lokka):一个简单的 JavaScript GraphQL 客户端,可以运行于所有的 JavaScript 环境 —— 浏览器,Node.js 和 React Native。 - [nanogql](https://github.com/yoshuawuyts/nanogql):一个使用模板字符串的小型 GraphQL 客户端库。 - [gq-loader](https://github.com/Houfeng/gq-loader):一个简单的 JavaScript GraphQL 客户端,通过 webpack 加载器让 *.gql 文件作为模块使用。 - [AWS Amplify](https://aws.github.io/aws-amplify):使用云服务进行应用开发的 JavaScript 库,支持 GraphQL 后端和用于处理 GraphQL 数据的 React 组件。 - [Grafoo](https://github.com/grafoojs/grafoo):一个通用的 GraphQL 客户端,具有仅 1.6kb 的多框架的视图层集成。 + - [urql](https://formidable.com/open-source/urql/) ([github](https://github.com/FormidableLabs/urql)):一个用于 React 的高度可定制且用途广泛的 GraphQL 客户端。 ### Swift / Objective-C iOS @@ -483,7 +565,7 @@ Executor.execute(schema, query) map println ### Python - [GQL](https://github.com/graphql-python/gql):一个 Python 中的 GraphQL 客户端。 - - [python-graphql-client](https://github.com/graphcool/python-graphql-client):适用于 Python 2.7+ 的简单 GraphQL 客户端。 + - [python-graphql-client](https://github.com/prisma/python-graphql-client):适用于 Python 2.7+ 的简单 GraphQL 客户端。 - [sgqlc](https://github.com/profusion/sgqlc):一个简单的 Python GraphQL 客户端。支持为 GraphQL schema 中定义的类型生成代码。 ## 工具 @@ -495,14 +577,15 @@ Executor.execute(schema, query) map println ## 服务 - - [Apollo Engine](http://www.apollographql.com/engine/):一个用于监视 GraphQL 后端的性能和使用的服务。 + - [Apollo Graph Manage](http://engine.apollographql.com):一个用于监视 GraphQL 后端的性能和使用的云服务。 - [GraphCMS](https://graphcms.com/):一个 BaaS(后端即服务),它为你配置了一个作为内容编辑工具来处理存储数据的 GraphQL 后端。 - - [Graphcool](https://www.graph.cool) ([github](https://github.com/graphcool)):一个 BaaS(后端即服务),它为你的应用程序提供了一个 GraphQL 后端,且具有用于管理数据库和存储数据的强大的 web ui。 + - [Prisma](https://www.prisma.io) ([github](https://github.com/prisma)):一个 BaaS(后端即服务),它为你的应用程序提供了一个 GraphQL 后端,且具有用于管理数据库和存储数据的强大的 web ui。 - [Reindex](https://www.reindex.io/baas/) ([github](https://github.com/reindexio/reindex-js)):一个 BaaS(后端即服务),它针对使用 React 和 Relay 的应用程序配置了 GraphQL 后端。 - [Scaphold](https://scaphold.io) ([github](https://github.com/scaphold-io)):一个 BaaS(后端即服务),为你的应用程序配置了一个拥有多种不同集成的 GraphQL 后端。 - [Tipe](https://tipe.io) ([github](https://github.com/tipeio)):一个 SaaS(软件即服务)内容管理系统,允许你使用强大的编辑工具创建你的内容,并通过 GraphQL 或 REST API 从任何地方访问它。 - [AWS AppSync](https://aws.amazon.com/appsync/):完全托管的 GraphQL 服务,包含实时订阅、离线编程和同步、企业级安全特性以及细粒度的授权控制。 - [Hasura](https://hasura.io):一个 BaaS(后端即服务),允许你在 Postgres 上创建数据表、定义权限并使用 GraphQL 接口查询和操作。 + - [FaunaDB](https://docs.fauna.com/fauna/current/graphql):通过导入 gql schema 创建即时 GraphQL 后端。数据库将为你创建关系和索引,因此你无需编写任何数据库代码即可在几秒钟内查询。Serverless 定价可免费开始使用。 ## 更多内容 diff --git a/site/community/Community-Events.md b/site/community/Community-Events.md index d344e88c24..e97228fdcc 100644 --- a/site/community/Community-Events.md +++ b/site/community/Community-Events.md @@ -8,14 +8,6 @@ sublinks: 即将举行的活动,聚会 ## 即将举行的活动 -### GraphQL Conf Berlin - -- **日期:** 2019 年 6 月 20 - 21 日 -- **地点:** 德国 柏林 -- **链接:** https://www.graphqlconf.org/ - -GraphQL Conf Berlin 是世界上最大的 GraphQL 社区会议。这是一次非盈利性会议,邀请了来自世界各地的演讲嘉宾。了解来自行业专家的 GraphQL 最佳实践,并成为蓬勃发展的 GraphQL 社区的一部分。 - ### GraphQL 峰会 - **日期:** 2019 年 10 月 29 - 31 日 diff --git a/site/community/Community-Resources.md b/site/community/Community-Resources.md index 6886b16476..f12ac2a3ab 100644 --- a/site/community/Community-Resources.md +++ b/site/community/Community-Resources.md @@ -4,7 +4,7 @@ layout: ../_core/DocsLayout category: 社区 permalink: /community/ next: /community/upcoming-events/ -sublinks: 博客,视频 +sublinks: 博客,视频,图书,更多资源 --- ## Stack Overflow @@ -25,7 +25,7 @@ sublinks: 博客,视频 - [@graphqlweekly](https://twitter.com/graphqlweekly) - [@GraphQLStackOverflow](https://twitter.com/GraphQLatSO) - [@apollographql](https://twitter.com/apollographql) -- [@graphcool](https://twitter.com/graphcool) +- [@prisma](https://twitter.com/prisma) - [@ScapholdDotIO](https://twitter.com/ScapholdDotIO) ## IRC @@ -69,6 +69,7 @@ sublinks: 博客,视频 - [GraphQL 服务器基础(第一部分):Schema](https://blog.graph.cool/graphql-server-basics-the-schema-ac5e2950214e) - Nikolas Burk - [GraphQL 服务器基础(第二部分):网络层](https://blog.graph.cool/graphql-server-basics-the-network-layer-51d97d21861) - Nikolas Burk - [GraphQL 服务器基础(第三部分):揭秘 GraphQL 解析器中的 `info` 参数](https://blog.graph.cool/graphql-server-basics-demystifying-the-info-argument-in-graphql-resolvers-6f26249f613a) - Nikolas Burk +- [GraphQL 入门指南](https://www.freecodecamp.org/news/a-beginners-guide-to-graphql-86f849ce1bec/) - Leonardo Maldonado ## 视频 @@ -107,11 +108,13 @@ Facebook 内外的开发者在世界各地的会议和聚会上都谈到了 Grap - [全栈 GraphQL](https://www.graphql.college/fullstack-graphql) - Julian Mayorga - [在 Elixir 和 Absinthe 中使用 Craft GraphQL API](https://pragprog.com/book/wwgraphql/craft-graphql-apis-in-elixir-with-absinthe) - Bruce Williams and Ben Wilson - [学习 GraphQL 和 Relay](https://www.packtpub.com/web-development/learning-graphql-and-relay) - Samer Buna +- [GraphQL 之路](https://www.robinwieruch.de/the-road-to-graphql-book/) - Robin Wieruch ## 更多资源 要探索其他有关 GraphQL 的社区开发的资源和内容,请查看以下网站: +- [Exploring GraphQL: A Query Language For APIs](https://www.edx.org/course/exploring-graphql-a-query-language-for-apis):免费的 7 周 edX 课程 - [How to GraphQL](https://www.howtographql.com):GraphQL 的全栈教程 - [Building Apollo](https://dev-blog.apollodata.com/) - [Learn GraphQL](https://learngraphql.com/basics/introduction) diff --git a/site/graphql-js/APIReference-TypeSystem.md b/site/graphql-js/APIReference-TypeSystem.md index 05bfd11a68..35c3946067 100644 --- a/site/graphql-js/APIReference-TypeSystem.md +++ b/site/graphql-js/APIReference-TypeSystem.md @@ -508,8 +508,8 @@ class GraphQLList { var PersonType = new GraphQLObjectType({ name: 'Person', fields: () => ({ - parents: { type: new GraphQLList(Person) }, - children: { type: new GraphQLList(Person) }, + parents: { type: new GraphQLList(PersonType) }, + children: { type: new GraphQLList(PersonType) }, }) }); ``` diff --git a/site/graphql-js/Guides-ConstructingTypes.md b/site/graphql-js/Guides-ConstructingTypes.md index f7f261979b..28bb023383 100644 --- a/site/graphql-js/Guides-ConstructingTypes.md +++ b/site/graphql-js/Guides-ConstructingTypes.md @@ -41,7 +41,7 @@ var fakeDatabase = { }; var root = { - user: function ({id}) { + user: ({id}) => { return fakeDatabase[id]; } }; @@ -94,7 +94,7 @@ var queryType = new graphql.GraphQLObjectType({ args: { id: { type: graphql.GraphQLString } }, - resolve: function (_, {id}) { + resolve: (_, {id}) => { return fakeDatabase[id]; } } diff --git a/site/graphql-js/Tutorial-Authentication.md b/site/graphql-js/Tutorial-Authentication.md index e787d08f82..5ed65c90d7 100644 --- a/site/graphql-js/Tutorial-Authentication.md +++ b/site/graphql-js/Tutorial-Authentication.md @@ -24,7 +24,7 @@ var schema = buildSchema(` } `); -function loggingMiddleware(req, res, next) { +const loggingMiddleware = (req, res, next) => { console.log('ip:', req.ip); next(); } diff --git a/site/graphql-js/Tutorial-ExpressGraphQL.md b/site/graphql-js/Tutorial-ExpressGraphQL.md index 9835f7b4f2..78f22c701c 100644 --- a/site/graphql-js/Tutorial-ExpressGraphQL.md +++ b/site/graphql-js/Tutorial-ExpressGraphQL.md @@ -41,7 +41,7 @@ app.use('/graphql', graphqlHTTP({ graphiql: true, })); app.listen(4000); -console.log('Running a GraphQL API server at localhost:4000/graphql'); +console.log('Running a GraphQL API server at http://localhost:4000/graphql'); ``` 用以下命令启动该 GraphQL 服务器: diff --git a/site/graphql-js/Tutorial-Mutations.md b/site/graphql-js/Tutorial-Mutations.md index 71f636430c..7629da17cc 100644 --- a/site/graphql-js/Tutorial-Mutations.md +++ b/site/graphql-js/Tutorial-Mutations.md @@ -27,11 +27,11 @@ type Query { ```javascript var fakeDatabase = {}; var root = { - setMessage: function ({message}) { + setMessage: ({message}) => { fakeDatabase.message = message; return message; }, - getMessage: function () { + getMessage: () => { return fakeDatabase.message; } }; @@ -112,20 +112,20 @@ class Message { var fakeDatabase = {}; var root = { - getMessage: function ({id}) { + getMessage: ({id}) => { if (!fakeDatabase[id]) { throw new Error('no message exists with id ' + id); } return new Message(id, fakeDatabase[id]); }, - createMessage: function ({input}) { + createMessage: ({input}) => { // Create a random id for our "database". var id = require('crypto').randomBytes(10).toString('hex'); fakeDatabase[id] = input; return new Message(id, input); }, - updateMessage: function ({id, input}) { + updateMessage: ({id, input}) => { if (!fakeDatabase[id]) { throw new Error('no message exists with id ' + id); } diff --git a/site/graphql-js/Tutorial-ObjectTypes.md b/site/graphql-js/Tutorial-ObjectTypes.md index 002cb7be19..523c5a1bf3 100644 --- a/site/graphql-js/Tutorial-ObjectTypes.md +++ b/site/graphql-js/Tutorial-ObjectTypes.md @@ -50,7 +50,7 @@ class RandomDie { } var root = { - getDie: function ({numSides}) { + getDie: ({numSides}) => { return new RandomDie(numSides || 6); } } @@ -111,7 +111,7 @@ class RandomDie { // root 规定了顶层的 API 入口端点 var root = { - getDie: function ({numSides}) { + getDie: ({numSides}) => { return new RandomDie(numSides || 6); } } diff --git a/site/graphql-js/Tutorial-PassingArguments.md b/site/graphql-js/Tutorial-PassingArguments.md index e2298528cd..e6e9512086 100644 --- a/site/graphql-js/Tutorial-PassingArguments.md +++ b/site/graphql-js/Tutorial-PassingArguments.md @@ -28,7 +28,7 @@ type Query { ```javascript var root = { - rollDice: function (args) { + rollDice: (args) => { var output = []; for (var i = 0; i < args.numDice; i++) { output.push(1 + Math.floor(Math.random() * (args.numSides || 6))); @@ -42,7 +42,7 @@ var root = { ```javascript var root = { - rollDice: function ({numDice, numSides}) { + rollDice: ({numDice, numSides}) => { var output = []; for (var i = 0; i < numDice; i++) { output.push(1 + Math.floor(Math.random() * (numSides || 6))); @@ -70,7 +70,7 @@ var schema = buildSchema(` // root 为每个端点入口 API 提供一个解析器 var root = { - rollDice: function ({numDice, numSides}) { + rollDice: ({numDice, numSides}) => { var output = []; for (var i = 0; i < numDice; i++) { output.push(1 + Math.floor(Math.random() * (numSides || 6))); diff --git a/site/learn/Introduction.md b/site/learn/Introduction.md index 67224f827f..f28e8c6a5d 100644 --- a/site/learn/Introduction.md +++ b/site/learn/Introduction.md @@ -7,7 +7,7 @@ permalink: /learn/ next: /learn/queries/ --- -> 在接下来的一系列文章中,我们会了解 GraphQL 是什么,它是如何运作以及如何使用它。在找如何搭建 GraphQL 服务的文档?这有一些类库可以帮你用[多种不同语言](/code/)实现 GraphQL。通过实用教程深入学习体验,请访问 [How to GraphQL](https://www.howtographql.com) 全栈教程网站。 +> 在接下来的一系列文章中,我们会了解 GraphQL 是什么,它是如何运作以及如何使用它。在找如何搭建 GraphQL 服务的文档?这有一些类库可以帮你用[多种不同语言](/code/)实现 GraphQL。通过实用教程深入学习体验,请访问 [How to GraphQL](https://www.howtographql.com) 全栈教程网站。我们还与 edX 合作创建了免费的在线课程,[探索 GraphQL:一种用于 API 的查询语言](https://www.edx.org/course/exploring-graphql-a-query-language-for-apis)。 GraphQL 是一个用于 API 的查询语言,是一个使用基于类型系统来执行查询的服务端运行时(类型系统由你的数据定义)。GraphQL 并没有和任何特定数据库或者存储引擎绑定,而是依靠你现有的代码和数据支撑。 diff --git a/site/users/index.html.js b/site/users/index.html.js index e8571c6e07..de20c2616f 100644 --- a/site/users/index.html.js +++ b/site/users/index.html.js @@ -1,5 +1,5 @@ /** - * Copyright (c) 2015, Facebook, Inc. + * Copyright (c) 2015, GraphQL Contributors * All rights reserved. * * This source code is licensed under the license found in the @@ -9,675 +9,14 @@ var React = require('react'); var Site = require('../_core/Site'); -/** - * Adding your logo? - * Add it to the /users/logos/ directory and then append an entry to this list. - * - * Please include logos with transparent backgrounds with no extra margin in the image. - * Images should be around 400px in the larger dimension. - * If your logo is round, include `isRound: true` in your entry. - * - * Please leave a trailing comma after your entry to avoid merge conflicts. - */ -var logos = [ - { - name: 'Facebook', - img: 'facebook.png', - link: 'https://www.facebook.com/' - }, - { - name: 'GitHub', - img: 'github.png', - isRound: true, - link: 'https://developer.github.com/v4/' - }, - { - name: 'Intuit', - img: 'intuit.png', - link: 'https://www.intuit.com/' - }, - { - name: 'Coursera', - img: 'coursera.png', - link: 'https://www.coursera.org/' - }, - { - name: 'Pinterest', - img: 'pinterest.png', - isRound: true, - link: 'https://www.pinterest.com/' - }, - { - name: 'Hudl', - img: 'hudl.png', - link: 'https://www.hudl.com/' - }, - { - name: 'Reindex', - img: 'reindex.png', - link: 'https://www.reindex.io/' - }, - { - name: 'Shopify', - img: 'shopify.png', - isRound: true, - link: 'https://www.shopify.com/' - }, - { - name: 'Meteor', - img: 'meteor.png', - link: 'https://dev-blog.apollodata.com/snappier-uis-with-apollo-client-graphql-bffab0b52b79#.fr92aru2y' - }, - { - name: 'Attendify', - img: 'attendify.png', - link: 'https://attendify.com/' - }, - { - name: 'Brewery Buddy', - img: 'brewerybuddy.png', - link: 'http://brewerybuddy.co/' - }, - { - name: 'Loggi', - img: 'loggi.png', - link: 'https://www.loggi.com/' - }, - { - name: 'Restorando', - img: 'restorando.png', - link: 'https://www.restorando.com/' - }, - { - name: 'Wishlife', - img: 'wishlife.png', - link: 'http://www.wishlife.com' - }, - { - name: 'Prowl', - img: 'prowl.png', - link: 'http://getprowl.com' - }, - { - name: 'Project September', - img: 'project-september.png', - link: 'https://www.projectseptember.com/' - }, - { - name: 'Curio', - img: 'curio.png', - link: 'https://curio.org' - }, - { - name: 'Persado', - img: 'persado.png', - link: 'http://persado.com/platform/persado-go/' - }, - { - name: 'Bazinga', - img: 'bazinga.png', - link: 'https://www.mybazinga.com/' - }, - { - name: 'OK GROW!', - img: 'okgrow.png', - link: 'https://www.okgrow.com/graphql' - }, - { - name: 'Redbubble', - img: 'redbubble.png', - link: 'https://www.redbubble.com/' - }, - { - name: 'Commercetools', - img: 'commercetools.png', - isRound: true, - link: 'https://commercetools.com/' - }, - { - name: '20 Minutes', - img: '20minutes.png', - link: 'https://www.20minutes.fr' - }, - { - name: 'AlloCiné', - img: 'allocine.png', - link: 'http://www.allocine.fr' - }, - { - name: 'Easy Carros', - img: 'easycarros.png', - link: 'http://www.easycarros.com' - }, - { - name: 'Graphcool', - img: 'graphcool.png', - link: 'https://graph.cool' - }, - { - name: 'Alphasights', - img: 'alphasights.png', - link: 'https://engineering.alphasights.com' - }, - { - name: 'Inerva', - img: 'inerva.png', - link: 'http://www.inerva.com' - }, - { - name: 'Serverless', - img: 'serverless.png', - link: 'https://serverless.com/' - }, - { - name: 'NewSpring', - img: 'newspring.png', - link: 'https://github.com/NewSpring' - }, - { - name: 'Buildkite', - img: 'buildkite.png', - link: 'https://buildkite.com' - }, - { - name: 'LeanIX', - img: 'leanix.png', - link: 'https://www.leanix.net' - }, - { - name: 'Quri', - img: 'quri.png', - link: 'http://www.quri.com' - }, - { - name: 'Make School', - img: 'make-school.png', - link: 'http://www.makeschool.com' - }, - { - name: 'Drift', - img: 'drift.png', - link: 'https://www.drift.com/' - }, - { - name: 'Icon Systems', - img: 'icon-systems.png', - link: 'https://www.iconcmo.com/' - }, - { - name: 'ovos', - img: 'ovos.png', - link: 'http://www.ovos.at' - }, - { - name: 'GraphCMS', - img: 'graphcms.png', - link: 'https://graphcms.com' - }, - { - name: 'Credit Karma', - img: 'creditkarma.png', - link: 'https://www.creditkarma.com/' - }, - { - name: 'The Hunt', - img: 'thehunt.png', - link: 'https://www.thehunt.com/' - }, - { - name: 'SYZYGY', - img: 'syzygy.png', - link: 'https://www.syzygy.net' - }, - { - name: 'UST Global', - img: 'ustglobal.png', - link: 'http://www.ust-global.com/' - }, - { - name: 'Sale Stock', - img: 'salestock.png', - link: 'https://www.salestockindonesia.com' - }, - { - name: 'IndonesiaX', - img: 'indonesiax.png', - link: 'https://www.indonesiax.co.id' - }, - { - name: 'ArangoDB', - img: 'arangodb.png', - link: 'https://www.arangodb.com' - }, - { - name: 'Wayfair', - img: 'wayfair.png', - link: 'https://www.wayfair.com/' - }, - { - name: 'BlenderBottle', - img: 'blenderbottle.png', - link: 'https://www.blenderbottle.com' - }, - { - name: 'Sky', - img: 'sky.png', - link: 'https://www.sky.com/' - }, - { - name: 'MojiLaLa', - img: 'mojilala.png', - link: 'https://www.mojilala.com/' - }, - { - name: 'Ningensoft', - img: 'ningensoft.png', - link: 'http://www.ningensoft.com/' - }, - { - name: 'Whitescape', - img: 'whitescape.png', - link: 'http://whitescape.com' - }, - { - name: 'Appier', - img: 'appier.png', - link: 'https://www.appier.com/' - }, - { - name: 'Bright', - img: 'bright.png', - link: 'https://www.thinkbright.mx/' - }, - { - name: 'Eastview', - img: 'eastview.png', - link: 'http://eastview.church/' - }, - { - name: 'zlyde', - img: 'zlyde.png', - link: 'http://www.zlyde.com/' - }, - { - name: 'Artsy', - img: 'artsy.png', - link: 'https://artsy.github.io/series/react-native-at-artsy/' - }, - { - name: 'Stem Disintermedia', - img: 'stem.png', - link: 'https://stem.is' - }, - { - name: 'M1 Finance', - img: 'm1finance.png', - link: 'https://www.m1finance.com/' - }, - { - name: 'Nova-Ideo', - img: 'nova-ideo.png', - link: 'https://www.nova-ideo.com/' - }, - { - name: 'Wirtualna Polska', - img: 'wirtualnapolska.png', - link: 'http://www.wp.pl/' - }, - { - name: 'Club Med', - img: 'clubmed.png', - link: 'https://www.clubmed.com/' - }, - { - name: 'Swapcard', - img: 'swapcard.png', - link: 'https://www.swapcard.com/' - }, - { - name: 'Scaphold.io', - img: 'scaphold.png', - link: 'https://scaphold.io/' - }, - { - name: 'Waldo Photos', - img: 'waldo-photos.png', - link: 'https://waldo.photos' - }, - { - name: 'Taller', - img: 'taller.png', - link: 'http://www.taller.net.br/' - }, - { - name: 'WaitlessQ', - img: 'waitlessq.png', - link: 'http://waitlessq.com/' - }, - { - name: 'Adayroi.com', - img: 'adayroi.png', - link: 'https://www.adayroi.com/' - }, - { - name: 'Startups.co', - img: 'startupsco.png', - link: 'https://www.startups.co/' - }, - { - name: 'WOW air', - img: 'wowair.png', - isRound: true, - link: 'https://wowair.com/' - }, - { - name: 'Unigraph', - img: 'unigraph.png', - link: 'https://unigraph.io/' - }, - { - name: 'Smarkets', - img: 'smarkets.png', - link: 'https://smarkets.com/' - }, - { - name: 'Lelivrescolaire.fr', - img: 'lelivrescolaire.png', - link: 'http://www.lelivrescolaire.fr/' - }, - { - name: 'DueDil', - img: 'duedil.png', - link: 'https://www.duedil.com/' - }, - { - name: 'Zzish', - img: 'zzish.png', - link: 'https://www.zzish.com/' - }, - { - name: 'Product Hunt', - img: 'product-hunt.png', - link: 'https://www.producthunt.com/' - }, - { - name: 'WorkflowGen', - img: 'workflowgen.png', - link: 'https://www.workflowgen.com/' - }, - { - name: 'Directlyrics', - img: 'directlyrics.png', - link: 'http://www.directlyrics.com/' - }, - { - name: 'Mixcloud', - img: 'mixcloud.png', - link: 'https://www.mixcloud.com/' - }, - { - name: 'HIJUP', - img: 'hijup.png', - link: 'https://www.hijup.com/' - }, - { - name: 'Vanila.io', - img: 'vanilaio.png', - link: 'https://vanila.io/' - }, - { - name: 'ANTS', - img: 'ants.png', - link: 'http://ants.vn/' - }, - { - name: 'Ediket', - img: 'ediket.png', - link: 'https://ediket.com/' - }, - { - name: 'HousingAnywhere', - img: 'housinganywhere.png', - link: 'https://housinganywhere.com/' - }, - { - name: 'SkyArch Networks Inc.', - img: 'skyarchnetworks.png', - link: 'https://www.skyarch.net/' - }, - { - name: 'Idobata', - img: 'idobata.png', - link: 'https://idobata.io/' - }, - { - name: 'Trove', - img: 'trove.png', - link: 'https://www.mytrove.com/' - }, - { - name: 'Legends of Learning', - img: 'legendsoflearning.png', - link: 'https://www.legendsoflearning.com/' - }, - { - name: 'Yelp', - img: 'yelp.png', - link: 'https://www.yelp.com/developers/graphql/guides/intro' - }, - { - name: 'The New York Times', - img: 'nyt.png', - link: 'https://www.nytimes.com', - }, - { - name: 'TeselaGen Biotechnology', - img: 'teselagen_logo.png', - link: 'https://www.teselagen.com/', - }, - { - name: 'CircleHD', - img: 'circlehd.png', - link: 'https://www.circlehd.com/', - }, - { - name: 'Helsinki Regional Transport Authority HSL', - img: 'hsl.png', - link: 'https://www.hsl.fi/', - }, - { - name: 'Digitransit', - img: 'digitransit.png', - link: 'https://digitransit.fi/', - }, - { - name: 'MyHeritage', - img: 'myheritage.png', - link: 'https://www.myheritage.com', - }, - { - name: 'Protel', - img: 'protel.png', - link: 'https://protel.com.tr/', - }, - { - name: 'Alembic', - img: 'alembic.png', - link: 'https://alembic.com.au', - }, - { - name: 'Twitter', - img: 'twitter.png', - link: 'https://twitter.com' - }, - { - name: 'EtMDB', - img: 'etmdb.png', - isRound: true, - link: 'https://etmdb.com' - }, - { - name: 'GetNinjas', - img: 'getninjas.png', - link: 'https://labs.getninjas.com.br/tagged/graphql' - }, - { - name: 'Dailymotion', - img: 'dailymotion.png', - link: 'https://developer.dailymotion.com/' - }, - { - name: 'Myntra', - img: 'myntra.png', - link: 'https://www.myntra.com/' - }, - { - name: 'Conduit', - img: 'conduit.png', - link: 'https://conduithq.com/' - }, - { - name: 'Medallia', - img: 'medallia.png', - link: 'https://www.medallia.com/' - }, - { - name: 'Colectica', - img: 'colectica.png', - link: 'http://www.colectica.com/' - }, - { - name: 'Neo4j', - img: 'neo4j_logo.png', - link: 'https://www.neo4j.com/developer/graphql/' - }, - { - name: 'ComparaOnline', - img: 'comparaonline.png', - link: 'https://www.comparaonline.com' - }, - { - name: 'Goalify.plus', - img: 'goalify.png', - link: 'https://goalify.plus' - }, - { - name: 'Teachers Pay Teachers', - img: 'teacherspayteachers.png', - link: 'https://teacherspayteachers.com' - }, - { - name: '1stdibs', - img: '1stdibs.png', - link: 'https://www.1stdibs.com/' - }, - { - name: 'Hackages', - img: 'hackages.png', - link: 'https://hackages.io/' - }, - { - name: 'Fairfax Media', - img: 'fairfaxmedia.png', - link: 'https://www.fairfaxmedia.com.au' - }, - { - name: 'Amplitude', - img: 'amplitude.png', - link: 'https://amplitude.com/engineering' - }, - { - name: 'Gentux', - img: 'gentux.png', - link: 'https://www.generationtux.com' - }, - { - name: 'Bynder', - img: 'bynder.png', - link: 'https://www.bynder.com' - }, - { - name: 'Hasura', - img: 'hasura.png', - link: 'https://hasura.io' - }, - { - name: 'Atlassian', - img: 'atlassian.png', - link: 'https://www.atlassian.com' - }, - { - name: 'Lets.events', - img: 'letsevents.png', - link: 'https://lets.events' - }, - { - name: 'KLM Royal Dutch Airlines', - img: 'klm.png', - link: 'https://www.klm.com' - }, - { - name: 'Universe', - img: 'universe.png', - link: 'https://www.universe.com' - }, - { - name: 'StackShare', - img: 'stackshare.png', - link: 'https://stackshare.io' - }, - { - name: 'Metric.ai', - img: 'metric-ai.png', - link: 'https://www.metric.ai' - }, - { - name: 'Jusbrasil', - img: 'jusbrasil.png', - link: 'https://www.jusbrasil.com.br' - }, - { - name: 'NBC News Digital', - img: 'nbc-news-digital.png', - link: 'https://www.nbcnews.com' - }, - { - name: 'PayPal', - img: 'paypal.png', - link: 'https://www.paypal.com/' - }, - { - name: 'Cheddar', - img: 'cheddar.png', - link: 'https://cheddar.com' - }, - { - name: 'UC Trends', - img: 'uctrends.png', - link: 'https://trends.ucweb.com' - }, - { - name: 'Expert360', - img: 'expert360.png', - link: 'https://expert360.com' - }, - { - name: 'Cloverleaf', - img: 'cloverleaf.png', - link: 'https://cloverleaf.me/' - }, - // Adding your logo? - // Add it to the /users/logos/ directory and then append an entry above this comment. - // - // Please include logos with transparent backgrounds with no extra margin in the image. - // Images should be around 400px in the larger dimension. - // If your logo is round, include `isRound: true` in your entry. - // - // Please leave a trailing comma after your entry to avoid merge conflicts. -]; +const iframe = ''; + +function Iframe(props) { + return (
); +} module.exports = ({ page }) => -
你的公司也在使用 GraphQL 吗?
- 编辑这个页面然后发出一个 Pull Request 来加上你的 logo 吧。
+ 请参考 说明文档 来向 GraphQL Landscape 提交你的拉取请求吧。