@resolver
Specifies the name of a Fauna user-defined function to use instead of a default field value resolver.
Arguments
Argument | Type | Required | Default | Description |
---|---|---|---|---|
|
String |
No |
The field’s name. |
The name for the resolver function. |
|
Boolean |
No |
|
When |
Description
The @resolver
directive marks a Query or Mutation that has an
associated user-defined function in the database. Queries to fields
annotated with the @resolver
directive are resolved by calling the
underlying user-defined function, which is a
Fauna Query Language
Lambda
function.
The name of the function is controlled by the name
argument, which
defaults to the name of the field. The paginated
argument controls
pagination support for the values returned by the user-defined function.
When a schema is imported into the GraphQL API, resolvers for your
schemas fields are automatically generated. When you apply the
@resolver
directive to a query field, the named resolver replaces the
automatically-generated resolver for the field.
User-defined functions cannot be created with GraphQL queries; you must
use the Fauna Query Language to call the
CreateFunction
function.
For more information, see User-defined functions.
Example
The following two FQL queries each create a function:
CreateFunction({
name: "say_hello",
body: Query(Lambda([], "hello"))
})
CreateFunction({
name: "function_names",
body: Query(Lambda(["size", "afterCursor", "beforeCursor"],
Map(
Paginate(Functions()),
Lambda("ref",
Select("name", Get(Var("ref")))
)
)
))
})
The first function, called say_hello
, only returns the string hello
.
The second function, called function_names
, returns the list of
functions defined in the database. For a more in-depth example, see
A UDF that returns a database page.
We can use these function in GraphQL queries by using the following schema:
type Query {
sayHello: String! @resolver(name: "say_hello")
functionNames: [String!] @resolver(name: "function_names", paginated: true)
}
With the functions and the schema in place, we can call the first function with this GraphQL query:
{
sayHello
}
which should produce the following response:
{
"data": {
"sayHello": "hello"
}
}
Calling the second function would look like this:
{
functionNames {
data
}
}
And the response would look like:
{
"data": {
"functionNames": {
"data": [
"function_names",
"say_hello"
]
}
}
}
Is this article helpful?
Tell Fauna how the article can be improved:
Visit Fauna's forums
or email docs@fauna.com
Thank you for your feedback!