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
710
Web Components with Vanilla.js
alefesouza
0
680
Other Decks in Programming
See All in Programming
TSKaigi Night Talks 2026_TypeScriptでサプライチェーンの整合性を型に閉じ込める
geekplus_tech
0
340
Dataformのリポジトリを立ち上げるときにまずやること / dataform-day0-2026
snhryt
0
160
AIとASP.NET Coreで雑Webアプリを作った話
mayuki
0
520
IBM Bobを活用したレガシーアプリの最新化
oniak3ibm
PRO
1
190
Spec Driven Development | AI Summit Lisbon
danielsogl
PRO
0
190
スマートグラスで並列バイブコーディング
hyshu
0
130
[2026年度第1回ORセミナー] 計画最適化ベンチャーと競技プログラミング人材
terryu16
0
260
net-httpのHTTP/2対応について
naruse
0
480
Developing with AI Agents — Codex, Claude Code & Cowork Practical Guide
x5gtrn
PRO
0
1.3k
決定論的オーケストレーションの設計と実装 / Design and Implementation of Deterministic Orchestration
nrslib
3
1.3k
「なぜそう決めたのか」を残し続ける仕組み ― Notion AI カスタムエージェント × Slack連携による設計判断の自動記録 - NIKKEI Tech Talk #47
niftycorp
PRO
0
140
エージェンティックRAGにAWSで入門しよう!
har1101
8
1.5k
Featured
See All Featured
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.5k
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
460
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
2
390
AI: The stuff that nobody shows you
jnunemaker
PRO
8
710
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.3k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
28
3.5k
Odyssey Design
rkendrick25
PRO
2
690
VelocityConf: Rendering Performance Case Studies
addyosmani
333
25k
Done Done
chrislema
186
16k
Designing for Performance
lara
611
70k
Designing for Timeless Needs
cassininazir
1
250
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
380
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