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
Implementing GraphQL with PHP - PHP Community S...
Search
Alefe Souza
September 27, 2019
Programming
320
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Implementing GraphQL with PHP - PHP Community Summit
Alefe Souza
September 27, 2019
More Decks by Alefe Souza
See All by Alefe Souza
NativeScript: Native Apps with Angular
alefesouza
0
490
Implementing GraphQL with Laravel and Vue.js
alefesouza
0
350
React: Zero to Hero
alefesouza
2
520
Implementing GraphQL with PHP
alefesouza
0
600
Node.js Chatbots with Bot Framework
alefesouza
0
420
GraphQL: A new way to write APIs
alefesouza
0
450
Firebase as back-end
alefesouza
0
490
GitLab: A tool for the entire DevOps lifecycle.pdf
alefesouza
0
720
Web Components with Vanilla.js
alefesouza
0
690
Other Decks in Programming
See All in Programming
PHPで使える日時の表現と、その知り方 #frontend_phpcon_do
o0h
PRO
0
290
才能?センス?知らん、 続けたもん勝ちだ。-- 結婚・出産・癌を越えてなお、私がプロダクトを創り続ける理由
16bitidol
2
680
自作OSでスライド発表する
uyuki234
1
3.6k
symfony/aiとlaravel/boost
77web
0
120
関数型プログラミングのメリットって何だろう?
wanko_it
0
120
エージェンティックRAGにAWSで入門しよう!
har1101
9
1.9k
The Bowling Game- From Imperative to Functional Programming - Part 1
philipschwarz
PRO
0
250
TAKTでAI駆動開発の品質を設計する
j5ik2o
7
1.7k
気圧・高度・GPSを記録&可視化するアプリ「Koudo」を作った話
hjmkth
1
340
エンジニアと一緒にテストコードの設計と実装を改善した話
mototakatsu
0
250
なぜ関数型プログラミングで「型」と「証明」が語られるのか #fp_matsuri
kajitack
0
330
Datadog × OpenTelemetry 入門と実践のあいだ
kn_to_maxpno
1
180
Featured
See All Featured
Ecommerce SEO: The Keys for Success Now & Beyond - #SERPConf2024
aleyda
1
2k
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3.2k
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
0
550
Discover your Explorer Soul
emna__ayadi
2
1.2k
GraphQLの誤解/rethinking-graphql
sonatard
75
12k
Paper Plane (Part 1)
katiecoart
PRO
0
9.5k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.2k
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
180
Rails Girls Zürich Keynote
gr2m
96
14k
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.3k
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
1
250
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
410
Transcript
Implementando GraphQL com PHP @alefesouza https://as.dev
Alefe Souza @alefesouza https://as.dev Full Stack Developer @alefesouza Programador PHP
desde os 17 anos, instrutor de desenvolvimento de software, formado em análise e desenvolvimento de sistemas, Microsoft Specialist em tecnologias web.
Agenda • O que é GraphQL • Conceitos básicos •
Demo • Implementação em Laravel • Implementação no front-end @alefesouza https://as.dev
@alefesouza https://as.dev GraphQL? Uma especificação de linguagem de consulta de
APIs, desenvolvida pelo Facebook.
@alefesouza https://as.dev GraphQL? Baseado em apenas um endpoint.
@alefesouza https://as.dev GraphQL? Fortemente tipada.
@alefesouza https://as.dev GraphQL? Documentação automática.
@alefesouza https://as.dev Conceitos básicos • Tipos • Queries • Mutations
@alefesouza https://as.dev Tipos Permitem especificar objetos de entrada e saída,
impedindo a requisição caso ocorra algo fora do padrão.
@alefesouza https://as.dev Queries Utilizadas para consultas no endpoint único, também
é muito fácil de solicitar apenas o que os campos necessários.
@alefesouza https://as.dev Mutations Utilizadas para realizar qualquer tipo de alteração
nos dados, equivalente ao POST, PUT, PATCH, DELETE, identificados pelo nome.
@alefesouza https://as.dev Onde funciona?
@alefesouza https://as.dev Onde funciona?
@alefesouza https://as.dev Quem utiliza?
@alefesouza https://as.dev $ composer install webonyx/graphql-php Como iniciar?
@alefesouza https://as.dev Demo! http://bit.ly/talk-graphql-php
@alefesouza https://as.dev Implementação no Laravel $ composer install rebing/graphql-laravel $
php artisan vendor:publish --provider="Rebing\GraphQL\GraphQLServiceProvider"
@alefesouza https://as.dev Implementação no front-end $ npm install --save vue-apollo
graphql apollo-boost
@alefesouza https://as.dev Implementação no front-end import VueApollo from 'vue-apollo'; import
ApolloClient from 'apollo-boost'; import App from './App.vue'; Vue.use(VueApollo); const apolloClient = new ApolloClient(); const apolloProvider = new VueApollo({ defaultClient: apolloClient, }); new Vue({ el: '#app', apolloProvider, render: h => h(App), });
@alefesouza https://as.dev <ApolloQuery :query="require('./../graphql/queries/fetchUsers.gql')" > <template v-slot="{ result: { loading,
error, data } }"> <!-- Loading --> <div v-if="loading" class="loading apollo">Carregando...</div> <!-- Error --> <div v-else-if="error" class="error apollo">Houve um erro</div> <!-- Result --> <div v-else-if="data" class="result apollo"> <ul> <li v-for="user in data.users" :key="user.id"> <b>Nome:</b> {{ user.name }}<br> <b>E-mail:</b> {{ user.email }}<br> <b>Empresa:</b> {{ user.company.name }} </li> </ul> </div> </template> </ApolloQuery>
@alefesouza https://as.dev <ApolloQuery :query="require('./../graphql/queries/fetchUser.gql')" :variables="{ id: userId }" > <template
v-slot="{ result: { loading, error, data } }"> <!-- Loading --> <div v-if="loading" class="loading apollo">Carregando...</div> <!-- Error --> <div v-else-if="error" class="error apollo">Houve um erro</div> <!-- Result --> <div v-else-if="data" class="result apollo"> <b>Nome:</b> {{ data.user.name }}<br> <b>E-mail:</b> {{ data.user.email }}<br> <b>Empresa:</b> {{ data.user.company.name }} </div> </template> </ApolloQuery>
@alefesouza https://as.dev <ApolloMutation :mutation="require('../graphql/mutations/addUser.gql')" :variables="{ input }" @done="onDone" > <template
v-slot="{ mutate, loading, error }"> <div> <div> <div>Nome:</div> <input type="text" v-model="input.name"> </div> <div> <div>E-mail:</div> <input type="text" v-model="input.email"> </div> <div> <div>ID da empresa:</div> <input type="number" v-model="input.company_id"> </div> </div> <button :disabled="loading" @click="mutate()">Salvar</button> <p v-if="error">Ocorreu um erro: {{ error }}</p> </template> </ApolloMutation>
@alefesouza https://as.dev Obrigado! @alefesouza https://bit.ly/talk-graphql-php https://bit.ly/talk-laravel-vue-graphql