I have data stored in the file system (normalized across multiple small files) and I have written python functions to read/write data from the file system. Read API returns object of type Job. Write API expects an object of type Job to be passed as an argument.
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
Now I want to expose these functions via a web server. I would prefer exposing GraphQL APIs with Django.
Questions:
Note:
Django could be a (good but heavier) solution, but here is simpler solution using 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))
I used Json here because I'm more confortable with it, but if GraphQL is important for you, I recommend to you the Graphene-Python library.
There is also a project of integration of Graphene with Flask