GraphQL API
Aidbox supports default GraphQL implementation without any extensions (specification) Queries are supported, but mutations are not.
In Aidbox UI there is a GraphiQL interface, you can try your queries there.
GraphQL console sends all your requests to $graphql
endpoint which you can use from your application too
GraphQL endpoint
Aidbox uses the /$graphql
endpoint to serve GraphQL requests.
To make a GraphQL request send a GraphQL request object using POST
method.
GraphQL request object can contain three properties:
query
— the GraphQL query to evaluate.operationName
— the name of the operation to evaluate.variables
— the JSON object containing variable values.
Refer to the GraphQL documentation to get more information about these properties.
Examples
Simple query
Get IDs of two Patients. This query is similar to FHIR query
Request:
Response:
Query with variables
It is the same query as above but uses a variable to specify the number of results returned.
Request:
Response:
Query with a timeout
You can set a timeout (in seconds) for the query.
Request:
Objects, unions, scalars
Aidbox generates an object for every known resource and non-primitive data type.
Aidbox generates a scalar for every known primitive type i.e. for every entity with type primitive
.
Aidbox generates a union for every reference field. Additionally, Aidbox generates the AllResources
union which contains every resource object.
Fields
Aidbox generates a field for every field in a resource. There are some special fields:
reference fields
revinclude fields
References
Reference fields contain all usual fields of Aidbox references (id
, resourceType
, display
, identifier
) and a special resource
fields.
The resource
field is an AllResource
union. You can use it to fetch the referred resource using GraphQL fragments.
Example
The following query is similar to
Request:
Response:
Revincludes
Aidbox generates special fields to include resources that reference this resource.
Generated fields have the following name structure:
Note: unlike FHIR revincludes, GraphQL revincludes use field path, not parameter name.
Example
The following query is similar to
The request:
The response:
Queries
Aidbox generates three types of queries:
get by ID,
search,
history.
Get by ID
Aidbox generates query with name <ResourceType>
This query accepts a single argument id
and returns a resource with the specified id
.
Example
The following query is similar to
Request:
Response:
History
Aidbox generates a query with the name <ResourceType>History
The query accepts id
argument and return history of a resource with the specified id
.
Example
The following query is similar to
Request:
Response:
Search
Aidbox generates a query with the name <ResourceType>List
.
The query can accept multiple arguments. Aidbox generates arguments from search parameters.
Each search parameter leads to 2 arguments:
<parameter>
— simple argument, equivalent to using FHIR search parameter<parameter>_list
— represents AND condition
Example
The following query is similar to
Request
Response
Search with conditions
It is possible to encode simple AND and OR conditions for a single parameter.
FHIR allows to encode of the following type of conditions for a single parameter:
In GraphQL API the <parameter>_list
parameter represents AND condition.
E.g. PatientList(name_list: ["James", "Mary"])
searches for patients who have both names: James and Mary.
Comma represents OR condition.
E.g. PatientList(name: "James,Mary")
searches for patients who have either the name James or Mary
You can use both conditions at the same time.
E.g. PatientList(name_list: ["James,Mary", "Robert,Patricia"])
searches for patients who have name James or Mary and name Robert or Patricia.
Search total
Aidbox generates a special field total_
that contains the total count of the matching result. When you use this field, Aidbox can make a query to calculate total, which can be slow (depending on data).
Example
Request:
Response:
Complex examples
Multiple fragments
Get id of the DeviceRequestList resource, and add the address of the Organizations and Practitioners referenced in DeviceRequestList.requester:
Common fragment
This example demonstrates how to use fragments, both types of search parameter arguments and reverse includes.
Request
Response
Configuration
Set timeout
Sets the timeout for GraphQL queries in seconds. Default value is 60
.
Warmup
By default, Aidbox does an in-memory index cache warmup when the first request comes in.
You can change it to warmup cache on startup.
Revincludes with any type
For the sake of performance, Aidbox does not provide revincludes for references of type Reference(Any)
, e.g. for Task.for
.
When this feature is enabled, schema generation will take 2 minutes (approximately), Until the schema is generated GraphQL requests will wait.
You can enable them using the following environment variable:
Enable access control in GraphQL
By default, if the POST /$graphql
request passes request, it can query every resource without access control checks.
To enable access control, set the environmental variable:
Under the hood, GraphQL uses Search API. You can create AccessPolicies for GET requests.
To allow Client my-client
to query the request
the AccessPolicy which allows GET /Patient
is required.
Of course, any AccessPolicy engine can be used. For example, using sql
engine to allow the request if organization_id
in the JWT is the same as Patient.managingOrganization
:
Last updated