BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース Spring for GraphQLバージョン1.0がリリースへ

Spring for GraphQLバージョン1.0がリリースへ

原文(投稿日:2022/06/08)へのリンク

プロジェクト開始から2年も経たないうちに、Spring for GraphQL 1.0がリリースされた。
このプロジェクトでは2つのチームがコラボレーションして、SpringGraphQL Javaを統合した。

GraphQLは、API用のオープンソースのデータクエリ・操作言語であり、そして、既存のデータに対してクエリを実行するためのランタイムである。Facebookによって開発され、2015年に一般にリリースされた。

GraphQLを使うと、クライアントは必要なデータの構造を定義でき、同じ構造のデータがサーバから返されるため、過度に大量のデータが返されるのを防ぐことができる。

Spring for GraphQLは、Spring Initalizrを使って設定できる。最近リリースされたSpring Boot 2.7に依存関係graphql-spring-boot-starterを追加するだけである。InfoQはSpring Boot 2.7.0に関する詳細なニュース記事を追っていく予定である。

Spring for GraphQLは、クライアント側とサーバ側の両方で、HTTP、WebSocket、RSocketを介したGraphQLリクエストの処理をサポートする。

Spring for GraphQLにより、次の理由でGraphQLプロジェクトの開発が簡素化される。ロケーションを設定でき、そこからスキーマファイルを自動ロードできる。アノテーションベースのプログラミングモデルが提供される。例外を管理するためにDataFetcherExceptionHandlerを登録できる。 GraphQLのメトリックを設定できる。

以下に示す例では、Springによりメソッドがクエリにバインドされ、RuntimeWiring.Builderクラスを使って、上記のハンドラーメソッドが「hello」という名前のクエリ向けのDataFetcherとして登録される。

@Controller
public class GreetingController {

        @QueryMapping 
        public String hello() { 
            return "Hello, world!";
        }

}

以下に示す例のように、@SchemaMapping(typeName="Book", field="author")を使うだけで、親のタイプ名とフィールド名を指定することもできる。

@Controller
public class BookController {

    @SchemaMapping(typeName="Book", field="author")
    public Author getAuthor(Book book) {
        // ...
    }
}

バッチロードは、DataLoaderを使って個々のエンティティインスタンスのロードを先送りすることで提供される。

Spring for GraphQLは、既存のSpringテクノロジーを活用して、GraphQLを通してベースとなるデータソースを公開する。これは、QuerydslリポジトリーとQuery by Exampleリポジトリーの使用をサポートしており、データをDataFetcherにリカバリーできるようになる。

以下に示すコードを使ってDataFetcherを作成することができる。RuntimeWiringConfigurerを使って登録できる。

// For single result queries
DataFetcher<Account> dataFetcher = QuerydslDataFetcher.builder(repository).single();

// For multi-result queries
DataFetcher<Iterable<Account>> dataFetcher = QuerydslDataFetcher.builder(repository).many();

DataFetcherは、GraphQLリクエストパラメーターからQuerydsl述語を構築し、それを使ってデータをフェッチする。

@PreAuthorize@SecuredなどのSpring Securityアノテーションを追加すると、きめ細かいセキュリティを適用でき、GraphQL応答の特定箇所のデータを取得するメソッドに対する権限をチェックすることができる。

クライアント側では、InterceptionとSubscriptionのリクエストがサポートされている。現在、WebSocketトランスポートのみがGraphQLストリームをサポートしている。

Spring for GraphQLはまだ初期段階にあり、新機能とバグ修正によって進化する可能性が高い。過去3年間にNetflixで開発された人気のあるDGSフレームワーク代わるものになる可能性がある

作者について

この記事に星をつける

おすすめ度
スタイル

BT