公开基于 GraphQL 的 API
Exposing GraphQL based APIs
我将数据存储在文件系统中(跨多个小文件标准化)并且我已经将 python 函数写入文件系统中的 read/write 数据。读取 API returns 作业类型的对象。写入 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
现在我想通过网络服务器公开这些功能。我更喜欢用 Django 公开 GraphQL APIs。
问题:
- Django/Django REST 框架是否是一个正确的选择?我是新来的
Django 和 GraphQL。
- Django 模型似乎与数据库紧密结合。我是否必须创建另一个 Job 模型 class,并使用 read_jobs 函数返回的 Job 创建它?如果是,我如何从这里创建一个简单的 Web 应用程序?
注:
- Job对象是一个三级嵌套对象,有很多attributes/properties。为了演示的目的,我在这里的问题中只保留了四个attributes/properties。
- 我更喜欢 Django,因为我的应用程序在这个阶段可能看起来有点小,但随着时间的推移它会增长,而且我有很多功能需要添加。我专门寻找基于 django-graphene 的应用程序的解决方案,而不使用 SQLite DB 或不假设数据是从某个数据库中获取的。我想利用我的持久性 API 方法从文件系统查询数据。
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 对您很重要,我向您推荐 Graphene-Python 库。
There is also a project of integration of Graphene with Flask
我将数据存储在文件系统中(跨多个小文件标准化)并且我已经将 python 函数写入文件系统中的 read/write 数据。读取 API returns 作业类型的对象。写入 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
现在我想通过网络服务器公开这些功能。我更喜欢用 Django 公开 GraphQL APIs。
问题:
- Django/Django REST 框架是否是一个正确的选择?我是新来的 Django 和 GraphQL。
- Django 模型似乎与数据库紧密结合。我是否必须创建另一个 Job 模型 class,并使用 read_jobs 函数返回的 Job 创建它?如果是,我如何从这里创建一个简单的 Web 应用程序?
注:
- Job对象是一个三级嵌套对象,有很多attributes/properties。为了演示的目的,我在这里的问题中只保留了四个attributes/properties。
- 我更喜欢 Django,因为我的应用程序在这个阶段可能看起来有点小,但随着时间的推移它会增长,而且我有很多功能需要添加。我专门寻找基于 django-graphene 的应用程序的解决方案,而不使用 SQLite DB 或不假设数据是从某个数据库中获取的。我想利用我的持久性 API 方法从文件系统查询数据。
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 对您很重要,我向您推荐 Graphene-Python 库。
There is also a project of integration of Graphene with Flask