Server side GraphQL (BETA)
This modules handles server side handling for bridging graphql and providence. Note that this is a limited implementation of graphql, and should not be taken as a reference for anything. There are also some notable limitations:
map
types in providence are not supported.- Only 1
interface
per object type. union MyUnion of Interface {}
will generate a graphql union, and make appropriate output. Note that non-interfaced unions are handled as simple types.- No
subscriptions
. TODO: This should be fairly feasible using a WebSocket, thou git needs substantial amount of research to do it right. I would want to avoid having my own protocol for handling these. - Always transported over
HTTP
.
From Providence to GraphQL
To make a graphql service we should first look at how the providence type structure is mapped to graphql, which is much more limited:
- All primitive types are mapped to built-in scalars.
string
fields are per default mapped toString
scalar type. In order to useID
types, the specificID
fields needs to be designated to when instantiating theGQLDefinition
.
union MyUnion of MyInterface {}
are mapped to graphql unions. Each field type representing a possible type.- A single query service is provided, with an optional mutation per GQL service. The definition is built upon whatever these two services provide and reference.
- Even if types are spread around multiple thrift and providence files, there can be no name conflicts.
- No default types should end name with
Input
orInputType
, as it will mess up thegraphql
distinction between output and input object types. - No directives.
- No default values on variables or arguments.
When it comes to the default handling of the grapgql query to make a response, these are the current limitations:
- Only arguments to the root function will affect the content of the struct per default. The sub-structure of fields etc is passed on to the processor (instantiated for the method call), which will need to update the return structure with all data asked for. The output processor will then trim, call field-mutators and otherwise build output according to field spec.