Запрос Flask graphql с '&' возвращает 'синтаксическую ошибку GraphQL'

У меня очень простое приложение graphql, и все работает по мере того, как я аспектирую, я могу вызвать его из своего браузера, и оно возвращает заданные данные.

Но если я отправлю строку, содержащую '&', я всегда получаю сообщение "Синтаксическая ошибка GraphQL (1:22) Незавершенная строка \n\n1: (...) \n ^\n"

Браузер разделил данную строку, рассматривая ее как параметр.

Есть ли обходной путь для решения этой проблемы?

#!/usr/bin/env python3
import flask
import flask_graphql
import graphene

app = flask.Flask('graphql-test')

class Query(graphene.ObjectType):
    helloz = graphene.String(text=graphene.String())

    def resolve_helloz(self, info, text):
        return text

@app.route('/')
def index():
    # Create graphql view with the authentication passed as context
    return flask_graphql.GraphQLView.as_view(
            'index', 
            schema=graphene.Schema(query=Query), 
            graphiql=False
        )()

if __name__ == '__main__':
    # Run application
    app.run(host='127.0.0.1', port='8001')

1 ответ

Решение

Если вы отправляете запрос в качестве параметра запроса, вам необходимо экранировать любые символы, которые имеют особое значение, например & а также ?. & используется для разделения отдельных параметров, поэтому, не экранируя его, query параметр интерпретируется как {helloz(text:"test- что не является допустимым синтаксисом GraphQL. Вместо этого вы должны отправить:

127.0.0.1:8001?query={helloz(text:"test%26test")}
Другие вопросы по тегам