Предоставление API на основе GraphQL

У меня есть данные, хранящиеся в файловой системе (нормализованные для нескольких небольших файлов), и я написал функции Python для чтения / записи данных из файловой системы. Read API возвращает объект типа Job. API записи ожидает, что объект типа Job будет передан в качестве аргумента.

def get_jobs(starttime, endtime):
  ''' Reads and returns jobs that ran between starttime and endtime interval '''


def put_job(job):
  ''' Persists Job object to a file system '''


class Job:
    def __init__(self, name, key, starttime, endtime):
        self.name = name 
        self.key = key
        self.starttime = starttime
        self.endtime = endtime

Теперь я хочу выставить эти функции через веб-сервер. Я бы предпочел выставлять API-интерфейсы GraphQL с помощью Django.

Вопросов:

  • Является ли Django/Django REST framework правильным выбором для этого? Я новичок в Django и GraphQL.
  • Модели Django, похоже, тесно связаны с базами данных. Придется ли мне создавать другой класс модели Job и создавать его с помощью Job, возвращаемого функцией read_jobs? Если да, как я могу создать простое веб-приложение отсюда?

Примечание:

  • Объект задания - это трехуровневый вложенный объект, имеющий множество атрибутов / свойств. Для демонстрации я оставил здесь только четыре атрибута / свойства.
  • Я бы предпочел Django, потому что мое приложение на этом этапе может выглядеть немного маленьким, но со временем оно будет расти, и у меня будет множество функций, которые мне нужно добавить. Я специально ищу решения для приложений на основе django-графена, не используя БД SQLite или не предполагая, что данные извлекаются из какой-то базы данных. Я хочу использовать свои методы API постоянства для запроса данных из файловой системы.

1 ответ

Решение

Django может быть (хорошим, но более тяжелым) решением, но вот более простое решение с использованием Flask:

from flask import Flask, jsonify

app = Flask(__name__)

class Job:
    def __init__(self, name, key, starttime, endtime):
        self.name = name 
        self.key = key
        self.starttime = starttime
        self.endtime = endtime

@app.route("/get", methods=['GET'])
def get_jobs(starttime, endtime):
    ''' Reads and returns jobs that ran between starttime and endtime interval '''
    jobs = read_data(starttime, endtime) # your read_data() method
    return jsonify({'jobs': jobs})

@app.route("/put", methods=['POST'])   # or methods=['PUT']
def put_job(request):

    # access your data trough the request object:
    job_name = request.args.get('name', '')
    job_key = request.args.get('key', '')

    # or get it in json
    job_data = request.json

    write_data(Job.from_json(job_data))

Я использовал Json здесь, потому что мне удобнее с ним, но если GraphQL важен для вас, я рекомендую вам библиотеку https://graphene-python.org/.

Также есть проект интеграции графена с колбой

Другие вопросы по тегам