J'ai participé à la Session d'étude Nagoya.Swift + May. Ceci est un résumé de ce que j'ai fait.
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.
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)
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 +)