This spring-data-graphql-demo project is intended to provide an easy to understand usage showcase of java-data-graphql.
The java-data-graphql library is a layer above the great graphql-java library. It generates a graphql schema out of a given configuration which grants the possibility to :
- execute CRUD operations on entities (getById, getAll, save, delete).
- deal with persisted entities and embedded data objects.
- handle dynamic attributes on any entity.
- add custom methods (queries or mutations) to enrich your schema.
- deal with paging, sorting, filtering on queries.
- easily create "data fetchers" for linking this library to the persistence layer of your choice.
First, checkout the code from github.
-> From command line
mvn install
# Replace XXX with current version (example : XXX = 1.1-SNAPSHOT)
java -jar target/spring-data-graphql-demo-XXX.jar
-> From your IDE
Run com.daikit.graphql.spring.demo.ApplicationStarter
as a Java application
You are now able to browse your schema with graphiql web user interface available at http://localhost:8080/graphiql/index.html
You can run queries and mutations with variables. See next section for samples.
You can run these sample queries and mutations in graphiql. Variables are to be set in lower left area of the user interface.
# query
query getEntity1($id: ID!) {
getEntity1(id: $id) {
id
intAttr
longAttr
stringAttr
embeddedData1 {
stringAttr
}
}
}
# variables
{
"id":"3"
}
# query retrieving all entities
query getAllEntity5 {
getAllEntity5 {
data {
id
intAttr
stringAttr
}
}
}
# query with paging
query getAllEntity5 {
getAllEntity5(
paging: { limit: 2, offset: 1 }
) {
data {
id
intAttr
stringAttr
}
}
}
# query with ordering
query getAllEntity5 {
getAllEntity5(
orderBy: [
{ field: "intAttr", direction: DESC },
{ field: "stringAttr", direction: DESC }
]
) {
data {
id
intAttr
stringAttr
}
}
}
# query with filtering
# /!\ Filtering only works on int and String types..
# filtering on other types has not been implemented in this demo
query getAllEntity5 {
getAllEntity5(
filter: {
intAttr: { operator: le, value: 5 },
stringAttr: { operator: endsWith, value: "-4" }
}
) {
data {
id
intAttr
stringAttr
}
}
}
# mutation
mutation saveEntity1($id: ID, $intAttr: Int, $embeddedData1: EmbeddedData1InputType) {
saveEntity1(data: { id: $id, intAttr: $intAttr, embeddedData1: $embeddedData1}) {
id
intAttr
embeddedData1 {
stringAttr
}
}
}
# variables
{
"id": "3",
"intAttr": 150,
"embeddedData1": {
"stringAttr": "test data1"
}
}
# mutation
mutation deleteEntity1($id: ID!) {
deleteEntity1(id: $id) {
id
typename
}
}
# variables
{
"id": "2"
}
# mutation
mutation customMethodMutation1($arg1: String) {
customMethodMutation1(arg1: $arg1) {
stringAttr
}
}
# variables
{
"arg1": "This value should be returned"
}
# query
query customMethodQuery1($arg1: String) {
customMethodQuery1(arg1: $arg1) {
intAttr
stringAttr
embeddedData1 {
stringAttr
}
}
}
# variables
{
"arg1": "This string is set in both returned stringAttr"
}
# query
query customMethodQuery2(
$arg1: String,
$arg2: EmbeddedData1InputType
) {
customMethodQuery2(arg1: $arg1, arg2: $arg2) {
intAttr
stringAttr
embeddedData1 {
intAttr
stringAttr
}
}
}
# variables
{
"arg1": "This string is set in returned stringAttr",
"arg2": {
"intAttr": 2,
"stringAttr": "This string is set in returned embeddedData1"
}
}
# query
query customMethodQuery3(
$arg1: Enum1,
$arg2: [String],
$arg3: [Enum1],
$arg4: [EmbeddedData1InputType],
$arg5: String
) {
customMethodQuery3(
arg1: $arg1,
arg2: $arg2,
arg3: $arg3,
arg4: $arg4,
arg5: $arg5
) {
enumAttr
stringList
enumList
embeddedData1s {
stringAttr
}
stringAttr
}
}
# variables
{
"arg1": "VAL2",
"arg2": ["string1", "string2"],
"arg3": ["VAL1", "VAL2"],
"arg4": [{"stringAttr": "data1"}, {"stringAttr": "data2"}],
"arg5": null
}
# TIP : there is a check on arg5:
# -> if null the set "NULLVALUE" otherwise set as null
# query
query getEntity1($id: ID!) {
getEntity1(id: $id) {
id
dynamicAttribute1
}
}
# variables
{
"id": "3"
}
# mutation
mutation saveEntity1($id: ID, $dynamicAttribute2: String) {
saveEntity1(data: { id: $id, dynamicAttribute2: $dynamicAttribute2 }) {
id
stringAttr
}
}
# variables
{
"id": "3",
"dynamicAttribute2": "This string is set in stringAttr"
}
We accept Pull Requests via GitHub. There are some guidelines which will make applying PRs easier for us:
- No spaces :) Please use tabs for indentation.
- Respect the code style.
- Create minimal diffs - disable on save actions like reformat source code or organize imports. If you feel the source code should be reformatted create a separate PR for this change.
This code is under the Apache Licence v2.