Un débutant Python a essayé d'implémenter l'API REST en un jour

J'ai participé à la Session d'étude Nagoya.Swift + May. Ceci est un résumé de ce que j'ai fait.

Contexte

J'écris habituellement Swift, mais je me suis intéressé à l'apprentissage automatique, etc., alors j'ai décidé de m'habituer à la syntaxe Python pour le moment, j'ai donc implémenté une API REST que j'ai de l'expérience dans l'implémentation dans d'autres langages.

la mise en oeuvre

Implémentation de GET en se référant à [Rapidly implémenter l'API REST avec Python] de @ Morinikki (http://qiita.com/Morinikki/items/c2af4ffa180856d1bf30).

Maintenant que je sais comment créer un point de terminaison, j'utilise également POST, PUT et DELETE en lisant la [Documentation] de peewee (http://docs.peewee-orm.com/en/latest/peewee/querying.html). Je l'ai implémenté.

api.py


# -*- coding: utf-8 -*-
from flask import Flask, jsonify, abort, make_response, request
import peewee as pe
import random
import json

#Chaîne aléatoire
def random_string(length, seq='0123456789abcdefghijklmnopqrstuvwxyz'):
    sr = random.SystemRandom()
    return ''.join([sr.choice(seq) for i in range(length)])


db = pe.SqliteDatabase("datas.db")

#modèle
class User(pe.Model):
    userId = pe.TextField()
    name = pe.TextField()
    caption = pe.TextField()
    old = pe.IntegerField()

    class Meta:
        database = db

api = Flask(__name__)

#Obtenir l'utilisateur
@api.route('/user/<string:userId>', methods=['GET'])
def get_user(userId):
    try:
        user = User.get(User.userId == userId)
    except User.DoesNotExist:
        abort(404)

    result = {
        "result":True,
        "data":{
            "userId":user.userId,
            "name":user.name,
            "caption":user.caption,
            "old":int(user.old)
            }
        }

    return make_response(jsonify(result))

#ajouter à
@api.route('/user', methods=['POST'])
def post_user():
    userId = 'us_'+random_string(6)
    dataDict = json.loads(request.data)
    try:
        q = User.insert(userId=userId, name=dataDict["name"], caption=dataDict["caption"], old=dataDict["old"])
        q.execute()  # perform the insert.
        user = User.get(User.userId == userId)
    except User.DoesNotExist:
        abort(404)

    result = {
        "result":True,
        "data":{
            "userId":user.userId,
            "name":user.name,
            "caption":user.caption,
            "old":int(user.old)
            }
        }

    return make_response(jsonify(result))

#mise à jour
@api.route('/user/<string:userId>', methods=['PUT'])
def put_user(userId):
    dataDict = json.loads(request.data)
    try:
        q = User.update(name=dataDict["name"], caption=dataDict["caption"], old=dataDict["old"]).where(User.userId == userId)
        q.execute()
    except User.DoesNotExist:
        abort(404)

    result = {
        "result":True
        }

    return make_response(jsonify(result))

#Effacer
@api.route('/user/<string:userId>', methods=['DELETE'])
def del_user(userId):
    try:
        q = User.delete().where(User.userId == userId)
        q.execute() 
    except User.DoesNotExist:
        abort(404)

    result = {
        "result":True,
        }

    return make_response(jsonify(result))

#Obtenez tous les utilisateurs
@api.route('/users', methods=['GET'])
def get_users():
    try:
        users = User.select()
    except User.DoesNotExist:
        abort(404)

    arr = []
    for user in users:
        arr.append({
            "userId":user.userId,
            "name":user.name,
            "caption":user.caption,
            "old":int(user.old)
            })

    result = {
        "result":True,
        "data":arr
        }

    return make_response(jsonify(result))

@api.errorhandler(404)
def not_found(error):
    return make_response(jsonify({'error': 'Not found'}), 404)

if __name__ == '__main__':
    api.run(host='0.0.0.0', port=3000)

Impressions

Il a fallu environ 5 heures pour l'implémenter. Je pense que c'était assez réussi pour le premier Python. Cependant, je ne l'ai pas écrit en le comprenant, il est donc nécessaire d'approfondir ma compréhension.

Après cela, c'était bien de pouvoir créer un client iOS (seuls GET et DELETE sont implémentés en raison de contraintes de temps) et de le faire une démonstration pendant le temps libre (je voulais écrire Swift quelque part car il s'agit d'une session d'étude appelée Nagoya.Swift +)

Recommended Posts

Un débutant Python a essayé d'implémenter l'API REST en un jour
Implémentez rapidement l'API REST en Python
Essayez d'implémenter deux piles en Python sur un seul tableau
[WP REST API v2] Télécharger des images avec Python
Une doublure en Python
API Evernote en Python
API C en Python 3
Les débutants en Python l'ont essayé en 3 jours, de l'installation du système d'exploitation à l'exécution de l'API Twitter
Obtenez des données LEAD à l'aide de l'API REST de Marketo en Python
Hit API de Mastodon en Python
Fizzbuzz en Python (en une ligne)
DMD en Python 1D
Implémentons Yuma dans Python 3
API Blender Python dans Houdini (Python 3)
J'ai essayé de créer une API list.csv avec Python à partir de swagger.yaml
Génération de spécifications et génération de code dans le développement d'API REST (édition Python)
Obtenir l'API arXiv en Python
Frappez l'API Sesami en Python
Un débutant en Python a essayé Hello World en 30 secondes en utilisant le microframework Flask
Créez Gmail en Python sans utiliser l'API
"Le gars qui bloque tous les comptes Twitter dans la base de données" créé par les débutants de la journée d'apprentissage Python
Accédez à l'API Web en Python
Livre de recettes Cloud DevOps, partie 4 - Explorez DevOps DirectMail en Python avec l'API REST
Implémentation d'un algorithme simple en Python 2
Exécutez unittest en Python (pour les débutants)
le codeur Web a essayé d'exceller en Python
Accéder à l'API Twitter avec Python
J'ai essayé la notification de ligne en Python
les débutants en python ont essayé de le découvrir
Développement et déploiement de l'API REST en Python à l'aide de Falcon Web Framework
Gérez plusieurs versions de python en un seul jupyter
J'ai essayé d'implémenter PLSA en Python
Fonctionnement de la souris à l'aide de l'API Windows en Python
CGI Server (1) édition python en une ligne
Essayez d'utiliser l'API Wunderlist en Python
J'ai essayé d'implémenter la permutation en Python
Essayez d'utiliser l'API Kraken avec Python
[Épisode 2] Les débutants ont essayé Numeron AI avec python
[Épisode 3] Les débutants ont essayé Numeron AI avec python
J'ai essayé d'implémenter PLSA dans Python 2
Tweet à l'aide de l'API Twitter en Python
Obtenez les données de l'API Google Fit en Python
J'ai essayé d'utiliser l'optimisation bayésienne de Python
[Python] API REST, résumé de la bibliothèque pratique
Obtenez des données Youtube en Python à l'aide de l'API Youtube Data
J'ai essayé d'utiliser l'API UnityCloudBuild de Python
J'ai essayé d'implémenter ADALINE en Python
[Épisode 0] Un débutant a essayé Numeron AI avec python
[Épisode 1] Un débutant a essayé Numeron AI avec python
Essayez rapidement l'API Face de Microsoft en Python
Un serveur Web de ligne (avec CGI) en python
J'ai essayé d'implémenter PPO en Python
Décomposer les arguments de commande en une seule ligne en Python
[Python] Inversion de valeur booléenne en une ligne
Mettez le taux de change obtenu à partir de l'API REST Oanda en Python dans MongoDB
Python Jour 1
Un débutant en apprentissage automatique a tenté de créer une IA de jugement Sheltie en un jour
Une doublure qui produit quatre-vingt-dix-neuf en Python
3.14 π jour, alors essayez de sortir en Python