GraphQL: change for the best

Anastasiia Lysenko

GraphQL Resolver

1. Design and develop resolver for queries, process schema and presenters
2. Choose between pagination options and implement chosen one
3. Create ResultHandler and ErrorHandler (who said it would be easy)
4. Create endpoint

5. Send a query

TODO list:

Resolver

CreateWishlistResolver

Input types:

CreateWishlistResolver

WishlistSchema

wishlists (first: 10, after: "cursor") {

    edges {

        cursor,

        node {

             id,

             name,

             items {

                     id,    

                    type

             }

        }

    },

   totalCount,

    pageInfo {

         startCursor,

         endCursor,

         hasNextPage,

         hasPreviousPage

    }

}

Cursor

Offset

wishlists (first: $first, offset: $offset) {

    edges {

         id,

         name,    

         items {

             id,    

             type

         }

     },

     pageInfo {

         first,

         offset,

         total,

         hasNextPage,

         hasPreviousPage

     }

}

 

NodePresenter

CollectionPresenter

AbstractPresenter

ResultHandler

use GraphQL\Error\ClientAware;

GraphQLException

Request Clients

GraphQL Resolver

Don't query unreliable data! You don't need it.

Wishlist {

    id,

    name

}

Wishlist {

    id,

    name,

    items {

        id,    

        type,

        name,

        category,

        price,

        currency

    }

}

Optimization

No recursions! You can do better than this!

Author {

    name,

    books {

        title,

        authors {

            name,

            books

        }

    }

}

wishlists (first: $first, offset: $offset) {  #fetches wishlists (N queries)

    edges {

         id,

         name,    

         items {  #fetches items for each wishlist (M queries per wishlist)

             id,    

             type

         }

     },

     pageInfo {

         first,

         offset,

         total,

         hasNextPage,

         hasPreviousPage

     }

} # therefore M*N queries

N + 1

Solutions

NoSQL

Cache

Thank you!

#StandWithUkraine

WSAS: GraphQL: change for the best (en)

By Anastasia Lysenko

WSAS: GraphQL: change for the best (en)

How one can use GraphQL with PHP from scratch. Practical cases and optimization advice.

  • 35