Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
GraphQL and Schema-First Development
Search
Kōhei Yamamoto
June 28, 2018
Technology
4
3.8k
GraphQL and Schema-First Development
GraphQL NightでのLT発表資料です
Kōhei Yamamoto
June 28, 2018
Tweet
Share
More Decks by Kōhei Yamamoto
See All by Kōhei Yamamoto
一休.comレストランにおけるRustの活用
kymmt90
3
690
一休.comレストランのRustバックエンド開発の様子
kymmt90
15
11k
レガシーWebアプリケーションの性能とコードの健全性をインクリメンタルに改善する / pepabotech-20211209
kymmt90
1
2.2k
コードレビュー座学 / About code reviews
kymmt90
0
6.5k
ペパボのWebサービス 開発スタイル / Web services development at GMO Pepabo
kymmt90
2
540
EC新サービスにおけるスキーマファースト開発 / Schema First Development in the New EC Service
kymmt90
1
2.1k
rails new --api してからやったこと 〜2017年・夏〜 / EC Tech MTG 3
kymmt90
0
710
カテゴリ階層の拡張を目的とした階層的トピックモデル / A hierarchical topic model for expanding category hierarchies
kymmt90
0
410
Other Decks in Technology
See All in Technology
Platform Engineering for Software Developers and Architects
syntasso
1
600
10XにおけるData Contractの導入について: Data Contract事例共有会
10xinc
7
730
Lambda10周年!Lambdaは何をもたらしたか
smt7174
2
140
Android 15 でウィジェットピッカーのプレビュー画像をGlanceで魅せたい/nikkei-tech-talk-27-1
nikkei_engineer_recruiting
0
100
テストコード品質を高めるためにMutation Testingライブラリ・Strykerを実戦導入してみた話
ysknsid25
8
2.8k
組織成長を加速させるオンボーディングの取り組み
sudoakiy
3
320
初心者向けAWS Securityの勉強会mini Security-JAWSを9ヶ月ぐらい実施してきての近況
cmusudakeisuke
0
150
Python(PYNQ)がテーマのAMD主催のFPGAコンテストに参加してきた
iotengineer22
0
580
SDNという名のデータプレーンプログラミングの歴史
ebiken
PRO
2
210
【LT】ソフトウェア産業は進化しているのか? #Agilejapan
takabow
0
120
CDCL による厳密解法を採用した MILP ソルバー
imai448
3
330
TypeScript、上達の瞬間
sadnessojisan
49
14k
Featured
See All Featured
GraphQLとの向き合い方2022年版
quramy
43
13k
Optimising Largest Contentful Paint
csswizardry
33
2.9k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
48k
Six Lessons from altMBA
skipperchong
27
3.5k
Raft: Consensus for Rubyists
vanstee
136
6.6k
Measuring & Analyzing Core Web Vitals
bluesmoon
4
140
ReactJS: Keep Simple. Everything can be a component!
pedronauck
665
120k
Become a Pro
speakerdeck
PRO
25
5k
Rebuilding a faster, lazier Slack
samanthasiow
79
8.7k
Why You Should Never Use an ORM
jnunemaker
PRO
54
9.1k
Building Your Own Lightsaber
phodgson
103
6.1k
Java REST API Framework Comparison - PWX 2021
mraible
PRO
28
8.2k
Transcript
,ōIFJ:BNBNPUP!LZNNU (SBQI2-φΠτ-5 (SBQI2-ͱ εΩʔϚϑΝʔετ։ൃ
(.0ϖύϘΧϥʔϛʔϦϐʔτCMPHLZNNUDPN ,ōhei Yamamoto /!LZNNU SVCZSBJMTZPLPIBNBSC
None
͋ΒͨΊͯհ͠·͢
εΩʔϚϑΝʔετ։ൃ wϑϩϯτΤϯυ '& ͱόοΫΤϯυ #& ؒͷ ΠϯλʔϑΣʔεఆٛΛ։ൃνʔϜͰઌʹܾΊΔ wͦͷ͋ͱ'&#&ʹ͔Εͯฒߦ։ൃ͢Δ
ฒߦ։ൃ w'&#&ͷ࣮͕ऴΘΔ·ͰϞοΫαʔόΛͬͨΓ ͢Δ w3&45ͷ߹ w0QFO"1* 4XBHHFS ͰઌʹΠϯλϑΣʔεΛॻ͘ wपลπʔϧ 4XBHHFS$PEFHFOͳͲ Λͬͯ
ϞοΫαʔόΛ࡞Δ
ΠϯλʔϑΣʔεఆٛྫ 0QFO"1*ͷ߹ paths: /pets/{petId}: get: parameters: - name: petId in:
path required: true schema: type: string responses: '200': content: application/json: schema: required: - id - name properties: id: type: integer format: int64 name: type: string (&5QFUTQFU@JE
ΧϥʔϛʔϦϐʔτ εΩʔϚϑΝʔετ։ൃ͍ͯ͠·͢ '&7VFKT #&3BJMT
(SBQI2-ͰεΩʔϚϑΝʔετ։ൃ w3&45"1*ͰεΩʔϚΛܾΊ͔ͯΒ'&ͱ#&Ͱ ฒߦ։ൃΛਐΊΔͷศརͩͬͨ wҰ෦(SBQI2-Λಋೖͯ͠Έ͍ͯΔ w3BJMTͳͷͰHSBQIRMSVCZ w(SBQI2-Ͱಉ͡Α͏ʹͰ͖ͳ͍͔ʁ
(SBQI2-ʹ͓͚ΔεΩʔϚϑΝʔετͱ wεΩʔϚ͚ͩઌʹܾΊΔ w#&SFTPMWFSΛ͋ͱͰ࣮͢Δ w'&͕͏ϞοΫαʔόͲ͏͢Δʁ
"QPMMPͱHSBQIRMSVCZΛ Έ߹ΘͤͯϞοΫαʔόΛ࡞ΕΔ
HSBQIRMSVCZ w3VCZͷγϯλοΫεͰ(SBQI2-εΩʔϚΛॻ͘ w(SBQI2-ͷεΩʔϚΛμϯϓͰ͖Δ
3VCZͰεΩʔϚΛॻ͘ class Types::QueryType < Types::BaseObject field :viewer, Types::UserType, null: true
# resolverΛॻ͍ͯͳ͍ʂ end class Types::UserType < Types::BaseObject field :email, String, null: true field :popularPosts, [Types::PostType], null: true # resolverΛॻ͍ͯͳ͍ʂ end class Types::PostType < Types::BaseObject field :title, String, null: true end
HSBQIRMSVCZͰεΩʔϚΛμϯϓ FooBarSchema.to_definition # ҎԼͷจࣈྻΛऔಘ͢Δ type Query { viewer: User }
type User { email: String popularPosts: [Post!] } type Post { title: String }
"QPMMP w"QPMMPͷ(SBQI2-5PPMTΛ͏ w.PDLJOHͱ͍͏ػೳ͕͋Δ w(SBQI2-ͷεΩʔϚΛ৯ΘͤΔͱϞοΫαʔό͕ ࡞ΕΔ
(SBQI2-5PPMTͰϞοΫαʔό // express, graphql-express, body-parserͳͲΛrequire import { addMockFunctionsToSchema, makeExecutableSchema }
= require('graphql-tools'); const schema = makeExecutableSchema({ /* μϯϓͨ͠εΩʔϚจࣈྻ */ }); const mocks = require('./mocks') addMockFunctionsToSchema({ schema, mocks }); const app = express(); app.use('/graphql', bodyParser.json(), graphqlExpress({ schema })); app.listen(3000, () => { console.log('GraphQL mock server is running!!1'); });
(SBQI2-5PPMTͰϞοΫαʔό // mocks.js module.exports = { User: () => ({
email: '
[email protected]
', }), Post: () => ({ title: 'The Awesome Post', }), }; ϞοΫαʔό͕ฦ͢μϛʔσʔλΛॻ͚Δ ࢦఆ͠ͳ͚ΕεΧϥʔܕͷ"QPMMP͕ దʹฦ͢
ϞοΫαʔόͷ1045HSBQIRMΛୟ͍༷ͨࢠ
"QPMMPͱHSBQIRMSVCZΛ Έ߹ΘͤͯϞοΫαʔόΛ࡞Εͨ
εΩʔϚϑΝʔετ։ൃͰ͖Δʂ ศརʂʂ
ৄͪ͘͜͠ΒͰ HJUIVCDPNLZNNUTDIFNBpSTUHSBQIRMFYBNQMF
ࢀߟ wIUUQCMPHLZNNUDPNFOUSZNPDLJOHHSBQIRMTFSWFSXJUI SBJMTBOEBQPMMP wIUUQTXXXBQPMMPHSBQIRMDPNEPDTHSBQIRMUPPMT NPDLJOHIUNM