This repository was archived by the owner on Dec 19, 2019. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 153
Data loading workflow [DRAFT]
Valerii Naida edited this page Apr 8, 2019
·
24 revisions
[Diagram]
- Resolver: [FieldConfigInterface, QueryContextInterface, QueryInterface, QueryInterface]
- Search Criteria creating [query, query parametrs, query context] => SearchCriteria
- Data searhing [SearchCriteria] => matched identifiers
- Data loading[query info, matched identifiers] => loaded data
interface ResolverInterface
{
public function resolve(
FieldConfigInterface $fieldConfig,
QueryContextInterface $queryContext,
QueryInterface $query,
array $parentResolvedValue = []
);
}
Ideally, initialize and pass just what resolver needed
interface FieldConfigInterface extends \Magento\Framework\GraphQl\Config\ConfigElementInterface
interface QueryContextInterface
{
public function getStore(): StoreInterface;
public function getUser(): UserInterface;
}
Open question:
- Immutability with setExtensionAttribues (for example for collect warnings)
- Returning whole object or just identificator (store_code, user_id)
interface QueryInterface
{
public function getStructure(): ResolveInfo
public function getArguments(): array;
public function getVariables(): array;
}
Could be used as data container between resolvers
interface SearchCriteriaFactoryInreface
{
public function create(QueryInterface $query, QueryContextInterface $queryContext): SearchCriteriaInterface;
}
interface DataSearchInterface
{
public function search(SearchCriteriaInterface $searchCriteria): array;
}
Open question:
- A format of output data
- Work with current search API or using a lighter version
- Covering indexes (when the index contains enough data and don't need to load data from raw source)
interface DataProviderInterface
{
public function load(QueryStructure $queryStructure, QueryContextInterface $queryContext, array $identifiers): DataInterface;
}
QueryOutputProcessingInterface
- responsible for processing data before output (for example set warnings to result)
interface QueryOutputProcessingInterface
{
public function process(DataInterface $data): void;
}
Base implementation works with \GraphQL\Executor\ExecutionResult
(webonyx)
- Roadmap
- ZenHub task board (requires GitHub sign-in)
- Weekly calls:
- Thursday, 15:00 UTC
- Video conference link - https://bluejeans.com/180764326
- Recordings - https://goo.gl/5Q7QAw
- Slack: #graphql (Use http://tinyurl.com/engcom-slack to register)