MarkLogic Server 11.0 Product Documentation
GET /v1/rows/graphql

Summary

Execute a GraphQL query in order to retrieve a JSON object with the results. The query parameter of the GET URL should be JSON containing a "query" property.

URL Parameters
query Required. A URI-encoded JSON representation of a GraphQL request including a "query" property with the GraphQL query string. Note that this is inconsistent with the recommended GET request according to the GraphQL documentation.
trace* The name of a trace event to enable during this operation. Trace event output goes into the server log.
output? Specify the form of output. Allowed values: object, explain (return explain output from a plan). Default: object.
timestamp? A timestamp returned in the ML-Effective-Timestamp header of a previous request. Use this parameter to fetch results based on the database contents at a fixed point-in-time. For more details, see Performing Point-in-Time Operations in the REST Application Developer's Guide.
database? Perform this operation on the named content database instead of the default content database associated with the REST API instance. Using an alternative database requires the "eval-in" privilege; for details, see Security Requirements in the REST Application Developer's Guide.
Request Headers
Accept* The expected MIME type of the response. The only permitted value is application/json.
Content-type Required. The MIME type of the request and is always application/graphql.
Response Headers
Content-type The MIME type of the data in the response body. The MIME type corresponds to the type requested by the Accept header. A charset=utf-8 declaration is appended to the response MIME type which is always application/json.
ML-Effective-Timestamp The system timestamp at which this operation was performed. You can use the value in the timestamp parameter of a subsequent request. For more details, see Performing Point-in-Time Operations in the REST Application Developer's Guide.

Response

Upon success, MarkLogic Server returns status 200 (OK) and the response body contains the requested data.

Required Privileges

This operation requires the rest-reader role, or the following privilege:

http://marklogic.com/xdmp/privileges/rest-reader

Using the trace parameter requires the rest-tracer role, or the following privilege:

http://marklogic.com/xdmp/privileges/rest-tracer

Usage Notes

The request URL must contain a query parameter that is the JSON representation of a GraphQL request including a "query" property with the GraphQL query string. For more details, see POST requests in the GraphQL documentation.

The automatically generated implicit GraphQL schemas are based on schemas and views defined within the database. The default name of a query for a view in a schema is schemaName_viewName. So for the "employees" view in the "corporate" schema, the default query name would be "corporate_employees".

When the output parameter value is object, MarkLogic returns a JSON object with result data and/or error information. For more details, see the GraphQL HTTP specification.

Note that, per the GraphQL specification, a GraphQL GET request should simply have the query string as the parameter. However, this endpoint expects a JSON object with the GraphQL request just like a POST request.

See Also

Example

Basic Query Example
Suppose a TDE template defines an "employees" view in the "corporate" schema with the columns "name", "birthdate", and "title" for the Documents database, then a GraphQL query string might be: "query employeesQuery { corporate_employees { employeeNumber name birthdate title } }"
For that query, the JSON body of the request would be:
{
    "query": "query employeesQuery { corporate_employees { employeeNumber name birthdate title } }"
}

The following cURL command would send this request:
curl --anyauth --user user:password \
"http://localhost:8000/v1/rows/graphql?query=%7B%22query%22%20%3A%20%22query%20employees%20%7B%20corporate_employees%20%7B%20employeeNumber%20name%20birthdate%20title%20%7D%20%7D%22%20%7D"

And the response would look something like the following:
{
    "data": {
        "corporate_employees": [
            {
                "employeeNumber": 1
                "name": "Joe Worker",
                "birthdate": "07/04/1995",
                "title": "Senior Widget Maker"
            },{
                "employeeNumber": 2
                "name": "Jane Supervisor",
                "birthdate": "11/02/1999",
                "title": "Chief Widget Officer"
            }
         ]
    }
}
Powered by MarkLogic Server | Terms of Use | Privacy Policy