Upgrade to Pro — share decks privately, control downloads, hide ads and more …

PractiQL GraphQL

PractiQL GraphQL

Talk performed at AsyncJS meetup in Brighton on 3.12.2015

Avatar for Alexander Savin

Alexander Savin

December 03, 2015
Tweet

More Decks by Alexander Savin

Other Decks in Technology

Transcript

  1. { user { name } } { “user”: { “name”:

    “Alex Savin” } } GraphQL JSON
  2. { user(id: 123456) { …UserDetails } } fragment UserDetails on

    User { first_name last_name email twitter town homepage }
  3. type User { name: String id: String! } TYPE ROOT

    QUERY type Query { user(id: String!): User }
  4. { "created_at": "2015-08-30T00:50:25.000+00:00", "genres": [], "id": "e66637db-13f9-4056-abef-f731f8b1a3c7", "like_count": 3, "liked_count":

    3, "name": "Excuse me while I kiss these frets", "owner": { "avatar_url": "https://secure.gravatar.com/avatar/ 4ede0ad35bb796ea8f78861acc4372ca?s=300", "bio": null, "id": "b06e671a-b169-45e6-a645-74c31abca910", "login": "playlistrock",
  5. { "created_at": "2015-08-30T00:50:25.000+00:00", "genres": [], "id": "e66637db-13f9-4056-abef-f731f8b1a3c7", "like_count": 3, "liked_count":

    3, "name": "Excuse me while I kiss these frets", "owner": { "avatar_url": "https://secure.gravatar.com/avatar/4ede0ad35bb796ea8f78861acc4372ca?s=300", "bio": null, "id": "b06e671a-b169-45e6-a645-74c31abca910", "login": "playlistrock", "name": "Playlist Rock", "site_admin": false }, "published": false, "saved_count": 3, "tags": [ { "name": "Jimi Hendrix" }, { "name": "Jimmy Page" }, { "name": "Eric Clapton" }, … https://blog.jacobwgillespie.com/from-rest-to-graphql-b4e95e94c26b
  6. async resolve(obj, {...}) { const endpoints = [ { endpoint:

    'voiceNumber', data: contactNumber }, { endpoint: 'smsNumber', data: contactNumber }, { endpoint: 'email', data: email }, ]; const processEndpoint = async ({endpoint, data}) => { try { return await contactService[endpoint](data); } catch (error) { return error; } }; const processes = [
  7. const processes = [ for (process of endpoints) processEndpoint(process) ];

    const responses = await* processes; const errors = responses.filter(response => response instanceof Error); if (errors.length) { throw errors; } return { accessToken, refreshToken, };
  8. FRONT END APP SERVICE A SERVICE C SERVICE B SERVICE

    D GRAPHQL SERVER IOS ANDROID FRONT END APP V2 IOS V2 ANDROID V2