$30 off During Our Annual Pro Sale. View Details »

GraphQL with Kotlin

Mohit S
April 26, 2017

GraphQL with Kotlin

How to query and build a schema with GraphQL using Kotlin.

Mohit S

April 26, 2017
Tweet

More Decks by Mohit S

Other Decks in Programming

Transcript

  1. GraphQL +Kotlin
    Mohit Sarveiya

    View Slide

  2. — Query Language for your API developed at Facebook.
    — Polyglot implementation for client and server - Java, Javascript,
    Python, etc…
    — Reduces API requests needed and only gives you that data you
    asked for.
    What is GraphQL?

    View Slide

  3. Problem
    — Too many API requests per month.
    — Would be good to get data for a 

    month in request.

    View Slide

  4. GraphQL Overview
    query GetMonthData {
    campaign {
    date range
    posts {
    title
    created date
    }

    }
    }
    Return Result
    Fetches Data
    Validates
    Client Server

    View Slide

  5. GraphQL Overview
    query GetMonthData {
    campaigns {
    title
    posts {
    title
    }

    }
    }
    Return Result
    Fetches Data
    Validates
    Query Result
    {
    campaigns {
    [ {
    title: “Campaign 1”
    posts: [
    title: “Post 1”
    ]
    } …
    ]
    }
    }

    View Slide

  6. DATABASE
    REST API
    CLIENTS
    GraphQL Server

    View Slide

  7. DATABASE
    REST API
    GRAPHQL SERVER
    CLIENTS
    GraphQL Server

    View Slide

  8. 1. How to query the sever
    2. Build a GraphQL server
    in Kotlin

    View Slide

  9. Star Wars Database
    Droids (R2D2, C3PO,…)
    — name, height, friends, 

    primary function..
    Humans (Luke, Leia, Solo,…)
    — name, height, friends, planet…

    View Slide

  10. Simple Query
    query Hero {
    hero {
    name
    }
    }

    View Slide

  11. Simple Query
    query Hero {
    hero {
    name
    }
    }
    GraphQL Object defined in schema.
    Field on hero object.

    View Slide

  12. Simple Query
    query Hero {
    hero {
    name
    }
    }
    {
    data: {
    hero: {
    name: “R2 -D2”
    }
    }
    }
    Query Result

    View Slide

  13. 1. How to construct queries on
    Android in Kotlin

    View Slide

  14. View Slide

  15. 1. Add Gradle Plugin.
    2. Add schema definition to app in a JSON file.
    3. Add queries to files with a “.graphql” file extension.
    4. Use autogenerate classes from the “.graphql” files to make calls.
    Integrating Apollo Android Client

    View Slide

  16. 1. Add Apollo Gradle Plugin

    View Slide

  17. 2. Add Introspection of Schema (schema.json)

    View Slide

  18. 3. Add Queries to file with “.graphql” ext
    File: queries.graphql

    View Slide

  19. 4. Use ApolloClient object to make request

    View Slide

  20. Arguments & Variables

    View Slide

  21. Get Details for Droid with id - 2000.

    View Slide

  22. Get Details for Droid for any id

    View Slide

  23. Handling arguments on Android

    View Slide

  24. Result
    Query

    View Slide

  25. Enum Arguments

    View Slide

  26. Supplying Enum Arguments on Android

    View Slide

  27. Aliases & Fragments

    View Slide

  28. Aliases

    View Slide

  29. Aliases

    View Slide

  30. Aliases

    View Slide

  31. Aliases

    View Slide

  32. Fragments

    View Slide

  33. Fragments

    View Slide

  34. Fragments

    View Slide

  35. Mutations

    View Slide

  36. Create a Review for an Episode

    View Slide

  37. Mutating on Android

    View Slide

  38. Mutation Result

    View Slide

  39. 2. Building a GraphQL server

    View Slide

  40. View Slide

  41. View Slide

  42. — GraphQL Object type
    — Scalar types (String, Int, Float, Boolean)
    — List type
    — Interface type
    — Enum type
    — Union type
    — Input Object type
    GraphQL Type System

    View Slide

  43. Star Wars Database
    Droids (R2D2, C3PO,…)
    — name, height, friends, 

    primary function..
    Humans (Luke, Leia, Solo,…)
    — name, height, friends, planet…

    View Slide

  44. — Common fields between Human and Droid
    — name
    — height
    — friends
    — appearsIn
    Create an interface

    View Slide

  45. Character Interface

    View Slide

  46. Droid GraphQL Object

    View Slide

  47. Human GraphQL Object

    View Slide

  48. Enum Types

    View Slide

  49. Schema Structure

    View Slide

  50. Query Type

    View Slide

  51. Parsing Queries and Returning Results

    View Slide

  52. View Slide

  53. — Client and server Java GraphQL implementations are not stable.
    — No Kotlin only GraphQL implementation.
    — Learning curve.
    — Need to setup GraphQL server on top of your infrastructure. This
    requires more work.
    Disadvantages

    View Slide

  54. Thanks! May the force be with
    you!
    Twitter: @heyitsmohit
    Github: http://github.com/mysa

    View Slide