GraphQL: change for the best
Anastasiia Lysenko
13Chats
GraphQL Resolver
PHP Ports for GraphQL
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.php
CreateWishlistResolver.php
Input types:
CreateWishlistResolver.php
WishlistSchema.php
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.php
CollectionPresenter.php
AbstractPresenter.php
ResultHandler.php
use GraphQL\Error\ClientAware;
GraphQLException.php
Request Clients
Controller.php
GraphQL Resolver
File Upload
'args' => [ 'file' => new UploadType()]
FileUploaderResolver.php
mutation(
$file: Upload
) {
uploadYourFileHere(
file: $file
) {
File {
path,
name
}
}
FileUpload Mutation Example
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
GraphQL: change for the best (en)
By Anastasia Lysenko
GraphQL: change for the best (en)
How one can use GraphQL with PHP from scratch. Practical cases and optimization advice.
- 37