Je pense que vous utilisez souvent un framework d'application Web pour créer un serveur API, mais vous n'avez pas besoin de quelque chose d'aussi polyvalent, n'est-ce pas? Ce Falcon peut être utilisé dans un tel cas. Falcon Au minimum, vous n'avez besoin que d'un seul fichier. N'hésitez pas à vous lancer.
Utilisez pip
. Facile.
Si cela ne fonctionne pas, essayez d'ajouter sudo
.
$ pip install falcon
Tout ce dont vous avez besoin est un fichier. Disons sample.py
.
Une ressource est une classe qui gère les demandes. Si vous écrivez ʻon_get ou ʻon_post
, il traitera la requête de la méthode correspondante.
sample.py
...
class SampleResource:
def on_get(self, req, resp):
obj = {
"header": "Hello!",
"body": {
"a": "hoge",
"b": "fuga",
}
}
resp.body = json.dumps(obj, ensure_ascii=False)
...
ʻAdd_route` connecte le chemin avec la classe qui gère la demande.
sample.py
...
app = falcon.API()
app.add_route('/sample', SampleResource())
...
Veuillez modifier l'adresse et le port le cas échéant.
Cette partie n'est pas nécessaire lors de l'utilisation de gunicorn
etc.
sample.py
...
if __name__ == "__main__":
from wsgiref import simple_server
httpd = simple_server.make_server("127.0.0.1", 8000, app)
httpd.serve_forever()
...
Cela fonctionne normalement avec python
.
$ python sample.py
Lorsque j'essaye d'y accéder, cela semble fonctionner. http://localhost:8000/sample
{"body": {"a": "hoge", "b": "fuga"}, "header": "Hello!"}
gunicorn
Installez avec pip
.
$ pip install gunicorn
Il semble utiliser 8000 ports par défaut.
$ gunicorn sample:app
[2016-12-15 20:37:20 +0900] [34136] [INFO] Starting gunicorn 19.6.0
[2016-12-15 20:37:20 +0900] [34136] [INFO] Listening at: http://127.0.0.1:8000 (34136)
...
Utilisez -b
pour changer le port (adresse).
$ gunicorn -b 127.0.0.1:8888 sample:app
[2016-12-15 20:41:29 +0900] [34225] [INFO] Starting gunicorn 19.6.0
[2016-12-15 20:41:29 +0900] [34225] [INFO] Listening at: http://127.0.0.1:8888 (34225)
...
C'est dans le req
dans l'argument tel que ʻon_get`.
sample.py
class ParamsResource:
def on_get(self, req, resp):
params = req.params
resp.body = json.dumps(params, ensure_ascii=False)
app = falcon.API()
app.add_route('/params', ParamsResource())
/params
=> {}
/params?a=hoge&b=fuga
=> {"a": "hoge", "b": "fuga"}
J? ai compris. C'est une bonne idée de lire la demande et la réponse ici. req/resp
Il n'y a pas de moyen spécifique dans la norme. Je vais le préparer moi-même.
J'utilise MySQL dans mon environnement, je vais donc essayer d'y accéder.
Tout d'abord, installez MySQL-Python
. Présentation du familier pip
.
$ pip install MySQL-Python
Et écris. Veuillez modifier les informations de la base de données le cas échéant.
sample.py
...
class BusinnesTermResource:
def on_get(self, req, resp):
connection = MySQLdb.connect(
host='localhost',
port=3306,
user='root',
passwd='password',
db='sample',
charset='utf8',
cursorclass=MySQLdb.cursors.DictCursor
)
cursor = connection.cursor()
sql = "select * from business_term"
cursor.execute(sql)
term = cursor.fetchone()
cursor.close()
connection.close()
resp.body = json.dumps(term, ensure_ascii=False)
app = falcon.API()
app.add_route('/businnes_term', BusinnesTermResource())
...
J? ai compris.
{"term": "Hoge", "meening": "Fuga", "example": "échantillon", "id": 1}
sample.py
# -*- coding: utf-8 -*-
# sample.py
import falcon
import json
import MySQLdb
from MySQLdb.cursors import DictCursor
class BusinnesTermResource:
def on_get(self, req, resp):
connection = MySQLdb.connect(
host='localhost',
port=3306,
user='root',
passwd='password',
db='sample',
charset='utf8',
cursorclass=MySQLdb.cursors.DictCursor
)
cursor = connection.cursor()
sql = "select * from business_term"
cursor.execute(sql)
term = cursor.fetchone()
cursor.close()
connection.close()
resp.body = json.dumps(term, ensure_ascii=False)
class SampleResource:
def on_get(self, req, resp):
obj = {
"header": "Hello!",
"body": {
"a": "hoge",
"b": "fuga",
}
}
resp.body = json.dumps(obj, ensure_ascii=False)
class ParamsResource:
def on_get(self, req, resp):
params = req.params
resp.body = json.dumps(params, ensure_ascii=False)
app = falcon.API()
app.add_route('/businnes_term', BusinnesTermResource())
app.add_route('/sample', SampleResource())
app.add_route('/params', ParamsResource())
if __name__ == "__main__":
from wsgiref import simple_server
httpd = simple_server.make_server("127.0.0.1", 8000, app)
httpd.serve_forever()
C'était très facile à faire et ça faisait du bien. C'est rapide à écrire et à démarrer, donc c'est rapide. Je voudrais l'utiliser pour tester une fois, ou avec une application appropriée et bonne qui n'a pas un si grand nombre d'utilisateurs.
Recommended Posts