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

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