SlideShare a Scribd company logo
ScalaでGraphQL
芸者東京
竹下義晃
GraphQLとは
https://graphql.org/learn/
クライアント <-> サーバー間のリクエストを行うためのク
エリ言語仕様
Facebookが開発。githubも採用
GraphQLとは
Schema Query
type Query {
user (id : Long!): User
}
type User {
id: Long!
nickname: String!
friends: [User!]!
}
query {
user(id: 1) {
id
nickname
friends {
nickname
friends {
nickname
}
}
}
}
Schemaを定義して、サーバーとクライアントで共有
Queryで取得したいフィールドをだけを指定して取得
Schema,Queryは独自文法、結果はjson(が普通)
結果
{
“data”: {
“id”: 1,
“nickname”: “Hoge”,
“friends”: [{
“nickname”: “Fuga,
“friends”: [{
“nickname”:”foo”
}, ...]
}, …]
}
}
メリット
● 複数のリクエストを一つにまとめられる
● サーバーとクライアントの実装をGraphQLで分断できる
● 様々なツール、ライブラリのサポートを受けられる
デメリット
● パフォーマンスを出すための暗黙の知識が結構必要
● まだ普及仕切っていないので使える人は限られる
複数のリクエストを1つにまとめられる
query getUserAndNews{
user(id: 1) {
nickname
}
news(size: 20) {
title
body
}
}
Restだと2つのAPIを呼び出す(かわざわざ2つの機能を合体させた新しいEndpointを作
る)必要があるような呼び出しを、クエリを書き換えるだけでまとめて呼び出せる
ただ、Http2が普及すれば、このメリットはほぼ無くなる。よくメリットとして上げられるが、
割とどうでもいいと思っている
サーバーとクライアントの実装を分断できる
Schemaを共有することで、サーバーができていなくても事前にクライアントの実装がで
きる。また、細かな仕様変更もクライアント側でQueryを修正するだけで対応できる
ただのRestAPI
API仕様策定 -> サーバー実装 -> 修正
-> クライアント実装 -> 接続試す -> 修正
(サーバー、クライアント共に実装完了しないとテストが困難)
GraphQL
API仕様策定 -> サーバー実装 -> 適当なQuery投げてテスト
-> クライアント実装 -> 投げるQuerySchemaに合うかチェック -> 接続試す
様々なツール、ライブラリのサポートを受けられる
標準化されていることで、対応したツール、ライブラリを使用できるのでいろいろらくでき
る
# GraphiQL
Queryを書いて、投げて、結果を見れるツール。Queryの保管もやってくれる
# 各言語ライブラリ
Schema,Queryのパースや組み立てをやってくれる
デメリット
# パフォーマンスを出すための暗黙の知識が結構必要
これはRestAPIだとしてもあり得るのでそこまでデメリットではないが、やはり特有の最
適化知識は必要になってきそう
# まだ普及仕切っていないので使える人は限られる
即使えますって人はまだあまりいないと思います。啓蒙必要
Scalaでは?
Sangria( https://sangria-graphql.org/ )
というライブラリがある。サーバー/クライアントどちらにも使用可能
機能は大体ドキュメントとサンプルみればわかる
機能
Query
● DSLによるQuery構築
● テキストからのQueryのパース
● Schema検証
● Queryの実行
Schema
● DSLによるSchema構築
● AnnotationベースによるDSL自動生成
● テキストからのSchemaのパース
自分で書きたく無い機能群
# Introspectionの機能
Schemaの情報を返す機能。勝手にサポートしてくれる
# やばいクエリの検証機能
リスト取得時に大きすぎるsize指定や、深すぎるネストをバリデーションして実行時に弾
く機能がある
# N+1問題の対応機能
(すごく使いやすいわけでは無いが)内部で複数のDBアクセスをまとめて1回の実行にす
ることのできる汎用機構がある
余談
GraphQLを使うとリクエストがqueryとmutationに分離されるので、
CQRS( https://docs.microsoft.com/ja-jp/azure/architecture/patterns/cqrs )
の設計パターンと親和性が高いのでは?

More Related Content

PPTX
Log collect with google fluentd
PDF
Google bigquery導入記
PDF
20181031 springfest spring data geode
PPTX
HTML入門
PDF
AngularFireで楽々バックエンド
PDF
Grails 2.0.0.M1の話
PDF
Isomorphic web development with scala and scala.js
PDF
Scala が支える医療系ウェブサービス #jissenscala
Log collect with google fluentd
Google bigquery導入記
20181031 springfest spring data geode
HTML入門
AngularFireで楽々バックエンド
Grails 2.0.0.M1の話
Isomorphic web development with scala and scala.js
Scala が支える医療系ウェブサービス #jissenscala

Similar to GraphQL with scala (20)

PPTX
2015 03-12 道玄坂LT祭り第2回 Spark DataFrame Introduction
PDF
GraphQL入門 (AWS AppSync)
PPTX
REST API、gRPC、GraphQL 触ってみた【2023年12月開催勉強会資料】
PDF
Caliban: Functional GraphQL Library for Scala
PPTX
Microsoft Graphことはじめ クエリパラメータ編
PPTX
Spring data-rest-and-spring-cloud-contract
PPTX
JapanDreamin24_はじめてのGraphQL×LWC.pptx
PDF
Angular.jsについてちょっとしゃべる
PDF
Visual Studio 2012 Web 開発 ~ One ASP.NET から TypeScript まで ~
PDF
DEV-010_エンプラ系業務 Web アプリ開発に効く! 実践的 SPA 型モダン Web アプリ開発の選択手法
PDF
ゲームアーキテクチャパターン (Aurora Serverless / DynamoDB)
PDF
Google Cloud Dataflow を理解する - #bq_sushi
PDF
named_scope more detail - WebCareer
PDF
20241114_flutter_tokyo_flutter_graphql_usequery.pdf
PDF
ソーシャルアプリ勉強会(第一回資料)配布用
PDF
AWSとGCPを使用したインフラ環境
PPTX
エンタープライズ分野での実践AngularJS
PDF
PHPフレームワーク入門
PDF
G * magazine 0
PDF
AWS は形式手法の夢を見るか? - モデル検査器 Alloy によるインフラ設計
2015 03-12 道玄坂LT祭り第2回 Spark DataFrame Introduction
GraphQL入門 (AWS AppSync)
REST API、gRPC、GraphQL 触ってみた【2023年12月開催勉強会資料】
Caliban: Functional GraphQL Library for Scala
Microsoft Graphことはじめ クエリパラメータ編
Spring data-rest-and-spring-cloud-contract
JapanDreamin24_はじめてのGraphQL×LWC.pptx
Angular.jsについてちょっとしゃべる
Visual Studio 2012 Web 開発 ~ One ASP.NET から TypeScript まで ~
DEV-010_エンプラ系業務 Web アプリ開発に効く! 実践的 SPA 型モダン Web アプリ開発の選択手法
ゲームアーキテクチャパターン (Aurora Serverless / DynamoDB)
Google Cloud Dataflow を理解する - #bq_sushi
named_scope more detail - WebCareer
20241114_flutter_tokyo_flutter_graphql_usequery.pdf
ソーシャルアプリ勉強会(第一回資料)配布用
AWSとGCPを使用したインフラ環境
エンタープライズ分野での実践AngularJS
PHPフレームワーク入門
G * magazine 0
AWS は形式手法の夢を見るか? - モデル検査器 Alloy によるインフラ設計
Ad

More from Yoshiteru Takeshita (7)

PDF
Developing large-scale smart-phone game servers by a single person
PDF
Play framework+docker+aws ecr+aws beanstalk で楽々デプロイ
PDF
Scala Matsuri 2016コミュニティセッション
PDF
Scala導入あれこれ
PDF
Unityでreflection入門
PDF
Dslからのコードジェネレーションで楽々play開発
PDF
Scala web framework比較
Developing large-scale smart-phone game servers by a single person
Play framework+docker+aws ecr+aws beanstalk で楽々デプロイ
Scala Matsuri 2016コミュニティセッション
Scala導入あれこれ
Unityでreflection入門
Dslからのコードジェネレーションで楽々play開発
Scala web framework比較
Ad

GraphQL with scala