Python 公开基于GraphQL的API

Python 公开基于GraphQL的API,python,django,graphql,graphene-python,graphene-django,Python,Django,Graphql,Graphene Python,Graphene Django,我将数据存储在文件系统中(跨多个小文件进行规范化),并编写了python函数来读取/写入文件系统中的数据。读取API返回Job类型的对象。Write API要求将Job类型的对象作为参数传递 def get_jobs(starttime, endtime): ''' Reads and returns jobs that ran between starttime and endtime interval ''' def put_job(job): ''' Persists Job

我将数据存储在文件系统中(跨多个小文件进行规范化),并编写了python函数来读取/写入文件系统中的数据。读取API返回Job类型的对象。Write 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
现在我想通过web服务器公开这些函数。我更喜欢用Django公开GraphQLAPI

问题:

  • Django/Django REST框架是正确的选择吗?我是新手 Django和GraphQL
  • Django模型似乎与数据库紧密耦合。我是否必须创建另一个作业模型类,并使用read_jobs函数返回的作业创建它?如果是,如何从这里创建简单的web应用程序
注:

  • 作业对象是三级嵌套对象,具有许多属性。出于演示目的,我在问题中只保留了四个属性/属性
  • 我更喜欢Django,因为我的应用程序在这个阶段可能看起来有点小,但随着时间的推移,它会增长,我需要添加很多功能。我特别寻找基于django graphene的应用程序的解决方案,而不使用SQLite DB,也不假设数据是从某个数据库获取的。我想利用持久性API方法从文件系统查询数据
Django可能是一种(好的但较重的)解决方案,但这里有一种更简单的解决方案,使用:

我在这里使用Json是因为我更熟悉它,但是如果GraphQL对您很重要,我建议您使用这个库

还有一个


谢谢你的帮助。我仍然更喜欢Django,因为我的应用程序在这个阶段可能看起来有点小,但随着时间的推移,它会增长,我需要添加很多功能。我特别寻找的解决方案是创建一个基于django graphene的应用程序,而不使用SQLite DB,也不假设数据是从某个数据库获取的。我想利用我的持久性API方法从文件系统查询数据。如下所示:。使用Django,您将不会避免使用数据库,至少对于用户和组来说是如此。。。但是,没有什么可以阻止您在不使用此数据库的情况下编写视图和处理请求。
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))