Графен / Flask / SQLAlchemy. Какой метод рекомендуется использовать для извлечения данных из точки входа в маршрут? - PullRequest
0 голосов
/ 28 сентября 2019

Учитывая базовую структуру проекта следующим образом:

/
 app.py     <-- Flask app startup and basic routing
 models.py 
 schema.py  <-- Contains Graphene/SQLAlchemy schema definitions for queries/mutations

Скажите, по моему app.py У меня есть несколько основных настроек маршрута, например, так:

@app.route('/members/list', methods=['GET'])
def members():
    # What should I do here?

Что такое "правильный"способ получения данных?Я вижу несколько разных подходов, но я не уверен, есть ли рекомендуемый способ, и я не могу найти простой ответ.Например:

  1. return jsonify(session.query(MembersModel).all()) Я чувствую, что это, вероятно, правильный путь, но мне кажется странным, что это происходит прямо на маршруте (кажется, что мне не хватает некоторой архитектуры уровня обслуживания)) или что я не правильно использую schema.py.Если бы я должен был пойти этим методом, это сидит в моем schema.py?Или я должен был создать другой файл для сервисного поиска в другом месте?

  2. Выполнение запроса GraphQL самостоятельно, как schema.execute('{ allMembers { ... } }') через Графен (как видно здесь ) изатем анализ моего результата обратно в ответ.Это кажется ... неправильным, имея жестко закодированный GraphQL в моем коде, когда есть лучшая альтернатива в # 1.

У меня есть предыдущий опыт работы со Spring, и я всегда делал это с MVC в стиле controller <-> service <-> dao, но я не уверен, что эквивалент Flask / Graphene / SQLAlchemy / GraphQL / SQLite,У меня есть это ноющее чувство, что я здесь упускаю очевидный ответ, поэтому, если кто-нибудь сможет направить меня к некоторым ресурсам или помочь, я буду признателен.

Спасибо!

1 Ответ

0 голосов
/ 29 сентября 2019

Хорошо, после нескольких часов чтения я наконец понял: я не должен играть между REST web api и GraphQL, как это (без учета устаревших систем / миграций / и т.д.).В сущности, GraphQL слабо конкурирует с REST в духе того, как JSON конкурирует с XML.

У меня сложилось впечатление, что GraphQL сопоставим с SQL более высокого уровня, где GraphQL находится над моим уровнем SQLite и абстрагируется.Откажитесь от традиционного SQL с немного измененной терминологией и абстракциями, такими как relays и connections.Вместо этого GraphQL конкурирует на еще более высоком уровне, как упомянуто ранее.

Итак, при работе с Flask, GraphQL и Graphene самое большее, что я должен делать, - это выполнять запросы через интерфейс GraphiQL или POST'em на моем сервере.напрямую - и не делает что-то вроде GET /my-path/some-resource только для того, чтобы вручную выполнить запрос GraphQL где-нибудь в бэкэнде.

Конечно, если я что-то неверно истолковал, пожалуйста, дайте мне знать!

...