Gexqlヨガ2.0を発表!


This article was published on 2022-03-29 by Charly Poly @ The Guild Blog


今日、私たちは信じられないほどあなたと新しいGrapqlヨガを共有する興奮!このリリースでは、あなたの貢献、問題、およびフィードバックで可能になった.
The Guild Graphqlヨガの開発を引き継いだPrisma 2021年初期に、そして、Graphqlスペースのツールの成長しているコミュニティで、最も最近Envelop , 我々は、簡単にセットアップ、パフォーマンス、および開発者の経験では、ゼロからGraphSQLヨガ2.0を書き換えることができた.
Graphicヨガは、“構成上の規約”と、お客様のお気に入りのライブラリを使用する自由は、HTTPからスキーマの建物を自慢し続けている.
もはやサブスクリプション、ファイルのアップロード、Cors、エラーマスキングなどの機能を得るために依存関係の数十をインストールする必要があります.
GraphSQLヨーガサーバーを構築するには、単一のインポートとAPIを提供するコードのいくつかの行だけが必要です.そしてあなたも得るGraphiQL 開発をさらに容易にするために.
// 1. Import GraphQL Yoga
import { createServer } from '@graphql-yoga/node'

// 2. Create your server
const server = createServer({
  schema: {
    typeDefs: /* GraphQL */ `
      type Query {
        hello: String
      }
    `,
    resolvers: {
      Query: {
        hello: () => 'Hello Hello Hello'
      }
    }
  }
})

// 3. Serve the API and GraphiQL
server.start()

ヨガV 2体験


あなたのスタックと習慣


ヨガV 2の主な目標は、既存のスキーマデザイン、HTTPサーバーライブラリ、および配置環境の大部分と互換性を持つことで、すべてのGraphel生態系を活用できるようにすることです.
モジュールと拡張可能なGraphSQLサーバーの上に構築され、ヨガのV 2は、あなたの好みのスキーマのデザインアプローチとHTTPサーバーライブラリを使用することができます.
例えば、ヨガV 2は完全にExpressとネクサスと互換性があります.
import express from 'express'
import { makeSchema, queryType } from 'nexus'
import { createServer } from '@graphql-yoga/node'

const Query = queryType({
  definition(t) {
    t.string('hello', { resolve: () => 'hello world!' })
  }
})
const schema = makeSchema({
  types: [Query]
})

const graphQLServer = createServer({ schema })

const app = express()

// Bind GraphQL Yoga to the `/graphql` endpoint
// Here it takes the request and response objects and handles them internally
app.use('/graphql', graphQLServer)

app.listen(4000, () => {
  console.log('Running a GraphQL API server at http://localhost:4000/graphql')
})
同様に、GraphSQLツール、pothos、nexus、typegraphql、SDLの最初のスキーマデザインのアプローチにも適用できます.graphql-js , アポロツール、Fastify、Koa、次.JS、Sveletkit、およびデコ.
スキーマ設計とHTTPサーバーライブラリの互換性を超えて、ヨガV 2はシームレスな(vercel関数、CloudFlareの労働者、AWSラムダなど)の任意の環境にGraphSQL APIを展開することができます.
ここでは、GrapdFlare作業員に配備されたGraphSQLモジュールで構築されたGraphSQL API
import { createServer } from '@graphql-yoga/common'

import { createApplication } from 'graphql-modules'
import { helloWorldModule } from './helloWorld'

const application = createApplication({
  modules: [helloWorldModule]
})

const server = createServer({ schema: application.schema })

server.start()

生産性を指先で


バッテリー含まれる


ヨガv 2は、より良い開発を完了するために賢明なデフォルトで、すべての完全なタイプスクリプトをサポートしています.
ファイルのアップロード、サブスクリプションサポート、高度なエラー処理、またはCorsのような現代のGraphical APIに共通の機能は、ヨガで組み込まれています:
import { createServer, GraphQLYogaError } from '@graphql-yoga/node'

// Provide your schema
const server = createServer({
  schema: {
    typeDefs: /* GraphQL */ `
      # adding this custom scalar enables file upload support
      scalar Upload

      type Query {
        hello: String
      }

      type Subscription {
        countdown(from: Int!): Int!
      }

      type Mutation {
        readTextFile(file: Upload!): String
      }
    `,
    resolvers: {
      Query: {
        hello: () => 'world'
      },
      Subscription: {
        countdown: {
          // This will return the value on every 1 sec until it reaches 0
          subscribe: async function* (_, { from }) {
            for (let i = from; i >= 0; i--) {
              await new Promise((resolve) => setTimeout(resolve, 1000))
              yield { countdown: i }
            }
          }
        }
      },
      Mutation: {
        readTextFile: async (_, { file }: { file: File }) => {
          let textContent = null
          try {
            textContent = await file.text()
          } catch (e) {
            // return an error visible by the client
            throw new GraphQLYogaError(`Failed to parse file`)
          }
          return textContent
        }
      }
    }
  }
})

// We now serve a GraphQL API with Subscriptions (over SSE), CORS,
// and File uploads support!
server.start()
ヨガv 2はまた、ログを処理するAPIを提供し、高度なサブスクリプションを使用してケース(以上のWS、パブ/サブ)、アポロ連合のサポート.and more .

簡単にエンベローププラグインでAPIを拡張する


ヨガサポートEnvelop ボックスの中には、より大きなコントロールを与え、GraphSQL実行フェーズにフックする機能があります.
ここでは、完全な機能を備えたGraphSQL APIを構築しています.
import { createServer } from '@graphql-yoga/node'

import { useDepthLimit } from '@envelop/depth-limit'
import { useResponseCache } from '@envelop/response-cache'
import { useSentry } from '@envelop/sentry'

import { schema } from './schema'

const server = createServer({
  schema: {
    typeDefs: /* GraphQL */ `
      type Query {
        hello: String
      }
    `,
    resolvers: {
      Query: {
        hello: () => 'Hello Hello Hello'
      }
    }
  },
  plugins: [
    useDepthLimit({
      // set up some security rules
      maxDepth: 10
    }),
    useResponseCache(), // speed up our server with a response cache
    useSentry() // report unexpected errors to sentry
  ]
})

// Start the server and explore http://localhost:4000/graphql
server.start()
現在のエンベローププラグインproposes more than 35+ plugins あなたが生産において必要とする標準的なGraphical APIのほとんどをカバーします.
最終的に、あなたはdevelop custom Envelop plugins Graphicsのライフサイクルにフックする再利用可能な動作を作成します.

生産準備


GraphicsヨガV 2は生産のための生産に組み込まれています.
我々のプロジェクトの中で実際の世界の状況に組み込まれています.GraphQL Mesh ) といくつかのour clients , 性能は高く評価された.
ヨガのコアは、できるだけ演奏され、我々は継続的に追跡し、それを改善します.
また、ヨガのV 2リポジトリは、すべてのコミットとプルのリクエストでパフォーマンスチェックを実行するので、我々は常に任意のパフォーマンスの回帰をキャプチャすることができます.
最後には、少なくとも、すべてのコミットは、エンドツーエンドのテストスイートを介してAWSラムダやCloudFlare労働者などのすべての展開ターゲットで実行するように確保されています!
我々は、より多くの生産環境にGraphicalヨガを押すことの我々の努力を続けますRedwood 1.0 それは、デフォルトのGraphical Serverとしてヨガ2.0を使用します.

標準準拠のGraphSQLサーバー


TypeScriptがECMAScriptと整列したままでいるのと同じように、GraphSQLヨガはいくつかの公式と認識仕様に基づいています.
  • GraphQL-spec , GraphQL-over-HTTP : あなたのGraphSQL APIがすべての既存のGraphSQLクライアント(アポロ、リレー、URQLとより多く)で働くよう保証します.
  • GraphQL-Multipart-Request : 偉大なファイルのアップロードをサポートします.
  • W3C Fetch API : 我々はノードの未来を受け入れる.jsとすべてのプラットフォーム上で同じ開発者の経験を提供します.
  • 将来からのGraphSQL機能


    ヨガv 2はいくつかの実験的なGraphics機能をサポートします @defer and @stream , GraphSQLの将来の味を得ることができますURQL ).
    また、エンベローププラグインシステムのおかげで、ヨガのV 2も"Babel for GraphQL" , Graphql仕様ではないが、今日の生産に非常に有用であるOneOf .

    ヨガv 2から始める


    ヨガのV 2はあなたの好みのスタックとツールを使用する自由を与えながら、最高のグラフィカルな経験を提供します.

    私たちの新しいチュートリアルでゼロから始める。


    それを試してみませんか?与えるour brand new tutorial やってくれ!それはGraphicalヨガでフル機能、モダンなAPIを構築する際にご案内いたします.
    Episode #24 of graphql.wtf また、Graphicsヨガ2.0への素晴らしい導入です:

    ... または既存のGraphSQLサーバをヨガに移行する


    すべてのヨガV 2の特徴are well documented on the website そして我々もsome migration guides ( V 1 ,アポロサーバとExpress Graphqlから).

    次は何


    ヨガv 2は、我々が日付までリリースした最も重要なプロジェクトですそれでも、それはちょうど我々のGraphSQLサーバービジョンの始まりです.
    私たちはあなたを得るのを待つことができないquestions, user feedback, and feature requests/PRs , そして、我々はすでに機能のエンベロープに似た機能を提供するように強化されたプラグインのような新しいレベルの機能を計画しています.
    Twitterで私たちに手を差し伸べるし、私たちをサポートすることを躊躇しないでください