Créez une API simple juste pour entrer et sortir des fichiers JSON ~ Édition Python / Flask ~

(* Depuis la fusion de la demande de modification, le code a considérablement changé. Il n'y a pas de changement dans la fonction.)

Objectif

Créez rapidement une API qui vous permet de lire et d'écrire facilement du JSON à partir du client.

Que faire dans cet article

--Utilisez Python2.7 / Flask. --Générer / lire / écrire un fichier JSON au lieu de DB.

Ce qu'il ne faut pas faire dans cet article

Contexte

Je souhaite modifier l'interface utilisateur en fonction de l'état du contenu, de l'état de l'utilisateur, etc. Je voulais un JSON qui renvoie l'état afin que je puisse ajouter / modifier les états et les paramètres de l'écran lors de la création d'un client (sur le Web), alors j'en ai fait un simple. C'est aussi simple que de l'exécuter dans votre environnement local. (On suppose qu'un serveur d'applications dédié sera utilisé dans l'environnement de production.)

API

C'est une API qui traite JSON comme KVS, avec le nom de fichier JSON comme «clé» et les données à récupérer (JSON) comme «valeur». Utilisez Flask localement pour lancer http: //127.0.0.1: 5000 et interagir avec lui.

Obtenir des valeurs (JSON) en spécifiant la clé

Utilisé pour obtenir <key> .json.

$ curl http://127.0.0.1:5000/api/<key> -X GET
$.ajax({
  type: 'GET'
  url:'http://127.0.0.1:5000/api/<key>'
}).done(function(res){
  //Traitement après GET
});

Ajouter ou mettre à jour des valeurs (JSON) en spécifiant une clé

Utilisé pour enregistrer (ou remplacer), par exemple, {" status ": 0} dans <key> .json.

$ curl http://127.0.0.1:5000/api/<key> -X POST\
  --data '{"status": 0}' -H "Content-type: application/json"
$.ajax({
  type: 'POST',
  url:'http://127.0.0.1:5000/api/<key>',
  data: '{"status": 0}',
  headers: {
    'Content-Type': 'application/json'
  }
}).done(function(res){
  //Traitement après POST
});

Supprimer le paramètre (json_key) dans les valeurs (JSON) associées à la clé

Si <key> .json contient, par exemple,{"<json_key>": <valeur arbitraire>}, supprimez l'élément <json_key> ʻelement from .json`.

$ curl http://127.0.0.1:5000/api/<key>/<json_key> -X DELETE
$.ajax({
  type: 'DELETE',
  url:'http://127.0.0.1:5000/api/<key>/<json_key>'
}).done(function(res){
  //Traitement après DELETE
});

a écrit

Tout d'abord, je l'ai fait aussi petit que possible.

Partie implémentation de l'API

api.py


# -*- coding: utf-8 -*-

import json

from flask import Flask, request, jsonify


app = Flask(__name__)


"""Routing:Appelle le processus en fonction de l'URI et de la méthode de la demande et renvoie le résultat."""
@app.route('/', methods=['GET'])
def hello():
    return 'hello:)'


@app.route('/api/<key>', methods=['GET'])
def get(key):
    model = get_model(key)
    if model is None:
        return "NOT FOUND"
    else:
        return jsonify(model)


@app.route('/api/<key>', methods=['POST'])
def post(key):
    result = set_property(key, json.loads(request.data))
    return jsonify(result)


@app.route('/api/<key>/<property_name>', methods=['DELETE'])
def delete(key, property_name):
    result = delete_property(key, property_name)
    if result is None:
        return "NOT FOUND"
    else:
        return jsonify(result)


"""Opérations sur le modèle"""
def get_model(key):
    return read_model(key)


def set_property(key, properties):
    data = read_model(key)
    if data is None:
        data = {}
    data.update(properties)
    result = write_model(key, data)
    return result


def delete_property(key, property_name):
    data = read_model(key)
    if data is None:
        return None
    if property_name not in data:
        return None
    del data[property_name]
    result = write_model(key, data)
    return result


"""Accès à la couche de persistance"""
def read_model(key):
    file_name = key + '.json'
    try:
        with open(file_name, 'r') as f:
            return json.load(f)
    except IOError as e:
        print e
        return None


def write_model(key, data):
    file_name = key + '.json'
    try:
        with open(file_name, 'w') as f:
            json.dump(data, f, sort_keys=True, indent=4)
            return data
    except IOError as e:
        print e
        return None


if __name__ == '__main__':
    app.run(debug=True)

Comment utiliser

$ python api.py

Le serveur Web démarre, alors accédez et utilisez http: //127.0.0.1: 5000.

Refactorisé et placé sur Github

Pour le moment, j'ai écrit un test dans les requêtes et l'ai mis sur Github.

https://github.com/naoiwata/simple-flask-api

Recommended Posts

Créez une API simple juste pour entrer et sortir des fichiers JSON ~ Édition Python / Flask ~
Comment créer un fichier JSON en Python
entrée et sortie python
[Python] Comment fractionner et modulariser des fichiers (simple, exemple)
Script Python qui crée un fichier JSON à partir d'un fichier CSV
[Python Kivy] Comment créer une simple fenêtre pop-up
Essayez simplement de recevoir un webhook avec ngrok et Python
Rubyist a essayé de créer une API simple avec Python + bouteille + MySQL
[Python / Django] Créer une API Web qui répond au format JSON
Créez un lot planifié simple à l'aide de l'image Python de Docker et de parse-crontab
[Python] Talk en utilisant OpenJTalk et l'API Talk (jusqu'à la sortie vocale)
Exporter et exporter des fichiers en Python
Journalisation Python et vidage vers json
5 façons de créer un chatbot Python
[Python] Créer une API pour envoyer Gmail
Comment saisir une chaîne de caractères en Python et la sortir telle quelle ou dans la direction opposée.
Défi pour créer un rapport de liste de l'axe des temps avec l'API Toggl et Python
[Python] Créez un linebot pour écrire le nom et l'âge sur l'image
[Python / Tkinter] Rechercher Pandas DataFrame → Créer un formulaire de recherche simple à afficher
J'ai créé un exemple pour accéder à Salesforce en utilisant Python et Bottle
Je souhaite créer une application Web en utilisant React et Python flask
Entrée / sortie de données en Python (CSV, JSON)
Créer une application GUI simple en Python
Lire et écrire des fichiers JSON avec Python
Créez une application Web simple avec Flask
Lire et écrire des fichiers JSON avec Python
[Python] Créez rapidement une API avec Flask
[Python] Ajouter un commentaire au fichier d'entrée standard
Créez une application simple qui intègre l'API Fetch pour les requêtes Ajax dans Flask et expliquez-la rapidement.
Créez une API pour convertir des fichiers PDF en images TIF avec FastAPI et Docker
J'ai essayé de créer une classe qui peut facilement sérialiser Json en Python
Créons un système de réception simple avec le framework sans serveur Python Chalice et Twilio
Utilisez libsixel pour générer Sixel en Python et générer le graphe Matplotlib vers le terminal.
[Python] Combiner des listes contenant des nombres en chaînes et les écrire dans un fichier de sortie
Créez une application Web qui convertit le PDF en texte à l'aide de Flask et PyPDF2
Créez un filtre pour obtenir un jeton d'accès avec l'API Graph (Flask)
J'ai essayé de créer une API de reconnaissance d'image simple avec Fast API et Tensorflow
[Python] Comment créer un environnement de serveur Web local avec SimpleHTTPServer et CGIHTTPServer
[Python] Compréhension de liste Différentes façons de créer une liste
Je veux créer une fenêtre avec Python
Comment générer un objet Python à partir de JSON
Créer une carte Web en utilisant Python et GDAL
Étapes pour créer un bot Twitter avec Python
Créer un modèle d'investissement dynamique simple en Python
Comment créer une boîte de saisie Kivy 1 ligne
Conversion par lots de fichiers Excel en JSON [Python]
Comment créer une API Rest dans Django
Créez un bot discord qui notifie unilatéralement avec python (seuls les requêtes et json sont utilisés)
[GCF + Python] Comment importer Excel vers GCS et créer une nouvelle table dans BigQuery
Comment mettre Pyenv sur Amazon Linux et Ubuntu pour créer un environnement Python 3.6.0
Créez rapidement un tableau de bord d'analyse de données Python avec Streamlit et déployez-le sur AWS
[Mac] Un moyen très simple d'exécuter des commandes système en Python et de générer les résultats
Analyser une chaîne JSON écrite dans un fichier en Python
Procédure pour charger MNIST avec python et sortie en png
[API LINE Messaging] Créez un menu riche avec Python