Créez rapidement un serveur API avec Python + Falcon

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.

Installation

Utilisez pip. Facile. Si cela ne fonctionne pas, essayez d'ajouter sudo.

$ pip install falcon

Essayez d'utiliser

Tout ce dont vous avez besoin est un fichier. Disons sample.py.

Rédiger des ressources

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)
...

Ecrire le routage

ʻAdd_route` connecte le chemin avec la classe qui gère la demande.

sample.py


...
app = falcon.API()
app.add_route('/sample', SampleResource())
...

commencer

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()
...

tester

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!"}

Utilisez un peu plus

Utilisez 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)
...

Obtenir les paramètres de la demande

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

Accéder à la base de données

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}

Code complet cette fois

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()

en conclusion

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

Créez rapidement un serveur API avec Python + Falcon
Créez rapidement un fichier Excel avec Python #python
Créer une API avec Django
API Web avec Python + Falcon
Créer un serveur local GIF animé avec Python + Flask
Créer Awaitable avec l'API Python / C
Créez rapidement une API avec Python, lambda et API Gateway à l'aide d'AWS SAM
Créez une application de mots anglais avec python
Créez une application qui devine les étudiants avec Python
Créer une image avec des caractères avec python (japonais)
Serveur local avec python
Créez un faux serveur Minecraft en Python avec Quarry
[Vagrant] Configurer un serveur API simple avec python
[LINE Messaging API] Créer un BOT de retour de perroquet avec Python
Utiliser l'API Trello avec python
Créer un environnement avec virtualenv
Utiliser l'API Twitter avec Python
Créer un gif 3D avec python3
Créer un œuf avec python
Serveur HTTP facile avec Python
Appelez l'API avec python3.
Utiliser l'API subsonique avec python3
Essayez d'utiliser l'API Twitter rapidement et facilement avec Python
Prenez rapidement une chaîne de requête avec API Gateway-> Lambda (Python)
Créez un serveur API Web ultra-rapide avec Falcon
[Python Kivy] Comment créer un fichier exe avec pyinstaller
Découpez une image avec python
[AWS] Créer une API avec API Gateway + Lambda
Ecrire un serveur HTTP / 2 en Python
Persistez le serveur d'API Flask avec Forever
Quine Post avec l'API Qiita (Python)
Créez un environnement virtuel avec Python!
J'ai envoyé un SMS avec Python
Créez Gmail en Python sans utiliser l'API
Créez une API en utilisant hug avec mod_wsgi
Créez une tranche d'âge avec les pandas
Implémentez rapidement l'API REST en Python
Dessinez une illustration avec Python + OpenCV
[Python] Envoyez des e-mails avec Outlook
[Python] Créer une API pour envoyer Gmail
Créez un alias pour Route53 vers CloudFront avec l'API AWS
[LINE Messaging API] Créez un BOT qui se connecte à quelqu'un avec Python
[Pour Python] Créez rapidement un fichier de téléchargement vers AWS Lambda Layer
Créez une application qui recherche uniquement à l'aide de l'API de recherche personnalisée Google avec Python 3.3.1 dans Bottle
Collecter des informations sur Twitter avec Python (API Twitter)
Créer une application en classifiant avec Pygame
[Python] Création d'un environnement avec Anaconda [Mac]
Créer un décorateur de fonction Python avec Class
Créez wordcloud à partir de votre tweet avec python3
[Didacticiel d'analyse Python en base de données avec SQL Server 2017]
Défi pour créer un rapport de liste de l'axe des temps avec l'API Toggl et Python
Créer une visionneuse de traitement d'image avec PySimpleGUI
Créez une image factice avec Python + PIL.
Obtenez des données alimentaires avec l'API Amazon (Python)
Créez votre propre serveur DNS avec Twisted
[Python] Créez un environnement virtuel avec Anaconda