Мутация GraphQL с помощью JSON Patch - PullRequest
1 голос
/ 11 апреля 2019

Существуют ли какие-либо типы данных в GraphQL, которые можно использовать для описания операции JSON Patch?

Структура операции JSON Patch выглядит следующим образом.

{ "op": "add|replace|remove", "path": "/hello", "value": ["world"] }

Где value может быть любым допустимым литералом или объектом JSON, например.

"value": { "name": "michael" }
"value": "hello, world"
"value": 42
"value": ["a", "b", "c"]

op и path всегда простые строки, value может быть чем угодно.

1 Ответ

1 голос
/ 11 апреля 2019

Если вам нужно вернуть тип JSON, то в Graphql есть scalar JSON, который возвращает любой тип JSON, где вы хотите его вернуть.

Вот схема

`
 scalar JSON
 type Response {
   status: Boolean
   message: String
   data: JSON
 }
 type Test {
   value: JSON
 }
 type Query {
   getTest: Test
 }
 type Mutation {
   //If you want to mutation then pass data as `JSON.stringify` or json formate
   updateTest(value: JSON): Response
 }
`

В преобразователе вы можетевернуть что-либо в формате json с именем ключа "value"

//Query resolver
getTest: async (_, {}, { context }) => {
    // return { "value": "hello, world" }
    // return { "value": 42 }
    // return { "value": ["a", "b", "c"] }
    // return anything in json or string
    return { "value": { "name": "michael" } }
},
// Mutation resolver
async updateTest(_, { value }, { }) {
    // Pass data in JSON.stringify
    // value : "\"hello, world\""
    // value : "132456"
    // value : "[\"a\", \"b\", \"c\"]"
    // value : "{ \"name\": \"michael\" }"
    console.log( JSON.parse(value) )
    //JSON.parse return formated required data
    return { status: true,
             message: 'Test updated successfully!',
             data: JSON.parse(value) 
    }
},

единственное, что вам нужно, чтобы специально вернуть ключ «значение» для идентификации, чтобы получить в запросе и мутации Query

{
  getTest {
    value
  }
}
// Which return 
{
  "data": {
    "getTest": {
      "value": {
        "name": "michael"
      }
    }
  }
}

Мутация

mutation {
  updateTest(value: "{ \"name\": \"michael\" }") {
    data
    status
    message
  }
}
// Which return 
{
  "data": {
    "updateTest": {
      "data": null,
      "status": true,
      "message": "success"
    }
  }
}
...