Evolve your development workflow

Guillaume Chau

Vue.js Core Team

We need better tools to build great apps

Why?

Mobile World

Latency

Bandwidth

Processing power

Realtime data

Today's apps are complex

MongoDB

MySQL

Oracle

ERP

CRM

Vue

Angular

React

Micro-services

Redis

Android

iOS

Legacy custom apps

AWS

JavaScript

Java

C#

Team Communication needs

Frontend Team

Backend Team

DataBase Team

Other Service Team

Mobile World

Today's apps are complex

Team Communication needs

Why?

GraphQL solves problems
Apollo adds value
Vue makes it approachable

1
2
3

GraphQL solves problems

1

What is GraphQL?

Schema definition language

Query language

Community of tools

Strong typing

type Message {
  id: ID!
  content: String
  user: User
  date: Int
}

type User {
  id: ID!
  name: String
  email: String
  avatarUrl: String
}

type Query {
  messages: [Message]
}

Strong typing

Help prevent errors

Improve the debugging experience

More explicit API (auto Docs)

Query only the data you need

{
  messages {
    id
    content
    user {
      id
      name
    }
  }
}
{
  "data": {
    "messages": [
      {
        "id": "0",
        "content": "Are you enjoying the conference?",
        "user": {
          "id": "0",
          "name": "Anne"
        }
      },
      {
        "id": "1",
        "content": "Absolutely!",
        "user": {
          "id": "1",
          "name": "Yoan"
        }
      }
    ]
  }
}

Query only the data you need

Reduce transfer size

No waterfall requests

Get predictable data shape

Clear and simple structure

Version-less

Add new fields

Deprecate old ones

Strong typing

Query language

Simpler architecture

Version-less

GraphQL

Apollo adds value

2

What is Apollo?

Server tools

Feature-rich client

Strong community

Principles

By the community, for the community

Simplicity

Performance

Apollo Client

Query

Mutation

Subscription (Web socket)

.gql

Observable

query

Normalized Cache

Apollo Devtools

Apollo Server

Apollo Launchpad

Like JSFiddle but for a GraphQL API

Prototype a GraphQL schema in minutes

Schema Stitching

Apollo Server

Apollo Client

Even more tools

Apollo

Vue makes it approachable

3

vue-apollo

Quick onboarding

import Vue from 'vue'
import VueApollo from 'vue-apollo'

Vue.use(VueApollo)

const provider = new VueApollo({
  defaultClient: apolloClient
})

new Vue({
  provide: provider.provide(),
  // ...
})

Developer Experience

Automatic creation & teardown

Reactive parameters

Automatic updates

Simpler code

Colocate Data & Components

query {
  user (id: $id) {
    id
    name
    email
    avatar
  }
}
query {
  user (id: $id) {
    id
    name
    email
    avatar
  }
}

Apollo Components

<ApolloQuery
  :query="require('../graphql/HelloWorld.gql')"
  :variables="{ name }"
>
  <template slot-scope="{ result: { loading, error, data } }">
    <!-- Loading -->
    <div v-if="loading" class="loading apollo">Loading...</div>

    <!-- Error -->
    <div v-else-if="error" class="error apollo">An error occured</div>

    <!-- Result -->
    <div v-else-if="data" class="result apollo">{{ data.hello }}</div>

    <!-- No result -->
    <div v-else class="no-result apollo">No result :(</div>
  </template>
</ApolloQuery>

Apollo Components

<ApolloMutation
  :mutation="require('@/graphql/userLogin.gql')"
  :variables="{
    email,
    password,
  }"
  @done="onDone"
>
  <template slot-scope="{ mutate, loading, error }">
    <!-- Form -->
    <input v-model="email" type="email">
    <input v-model="password" type="password">
    <button :disabled="loading" @click="mutate()">Click me</button>

    <!-- Error -->
    <p v-if="error">An error occured: {{ error }}</p>
  </template>
</ApolloMutation>

vue-cli-plugin-apollo

Quicker onboarding

$ vue add apollo

Developer Experience

Included GraphQL Server

Automatic integration

Examples

Upgradable

DEMO

Quick onboarding

Developer Experience

Colocate Data & Components

Apollo Components

Vue-Apollo

Bonus

Apollo Engine

Apollo Engine

Monitoring with history

Performance tracing

Errors tracking

Schema inspect

Caching

Automatic persisted queries

1M requests per month free

Automatic Persisted Queries

Automatic Persisted Queries

DEMO

Who is using GraphQL?

You?

Case studies

Guillaume Chau

@Akryum

github.com/Akryum

Thank you!

How Vue and GraphQL can evolve your development workflow

By Guillaume Chau

How Vue and GraphQL can evolve your development workflow

Vue + Apollo + GraphQL: why it's the Ultimate Stack to build great apps

  • 10,364