Как ответить с помощью расширений, используя graphql-java? - PullRequest
0 голосов
/ 18 января 2019

Мои ответы от GraphQL должны соответствовать определенному формату

{
    data:{}
    errors:[{}]
    extensions:{}
}

Однако я не уверен, как реагировать расширениями из моих методов. Я использую graphql-spring-boot, который загружает graphql-java, graphql-java-tools и graphql-java-servlet.

Я понимаю, что мои результаты метода запроса / мутации будут помещены в объект данных, и, если возникнут какие-либо исключения, они будут включены в ошибки.

Если у меня есть схема GraphQL, определенная как

type Query {
    someQuery(input: String!) : String!
}

и соответствующий метод Java

public String someQuery(String input) {
    return "Hello, world!";
}

Ответ GraphQL будет

{
    data: { "Hello, world!"}
}

Я хотел бы знать, как я могу добавить расширения к моему ответу GraphQL, чтобы вывод был следующим:

{
    data: {"Hello, world!"}
    extensions: { <something>}
}

Ответы [ 2 ]

0 голосов
/ 16 апреля 2019

Лучший способ вернуть extensions - реализовать подкласс SimpleInstrumentation, который переопределяет instrumentExecutionResult (код, частично украденный из TracingInstrumentation в GraphQL-Java):

@Override
public CompletableFuture<ExecutionResult> instrumentExecutionResult(
        ExecutionResult executionResult,
        InstrumentationExecutionParameters parameters) {
    Map<Object, Object> currentExt = executionResult.getExtensions();
    Map<Object, Object> newExtensionMap = new LinkedHashMap<>();
    newExtensionMap.putAll(currentExt == null ? Collections.emptyMap() : currentExt);
    newExtensionMap.put("MyExtensionKey", myExtensionValue);

    return CompletableFuture.completedFuture(
        new ExecutionResultImpl(
            executionResult.getData(), 
            executionResult.getErrors(), 
            newExtensionMap));
}

При настройке экземпляра GraphQL вы передаете экземпляр класса инструментария в:

GraphQL graphQL = GraphQL
        .newGraphQL(schema)
        .instrumentation(new MyInstrumentation())
        .build()

(Не совсем уверен, как это обрабатывается graphql-spring-boot, но мог бы представить, что есть какой-то способ @Autowire или иным образом настроить экземпляр GraphQL? InstrumentationProvider из graphql-java-servlet может быть тем, что вы будете использовать для сделай это)

0 голосов
/ 19 января 2019

вы можете реализовать GraphQLError, где могут быть добавлены дополнительные свойства ошибок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...