Erstellen Sie schnell einen API-Server mit Python + Falcon

Ich denke, Sie verwenden häufig ein Webanwendungsframework, um einen API-Server zu erstellen, aber Sie brauchen nicht etwas so Vielseitiges, nicht wahr? Dieser Falke kann in einem solchen Fall verwendet werden. Falcon Sie benötigen mindestens eine Datei. Fühlen Sie sich frei, um loszulegen.

Installation

Verwenden Sie pip. Einfach. Wenn es nicht funktioniert, versuchen Sie, "sudo" hinzuzufügen.

$ pip install falcon

Versuchen Sie es mit

Sie benötigen lediglich eine Datei. Sagen wir "sample.py".

Ressourcen schreiben

Eine Ressource ist eine Klasse, die Anforderungen verarbeitet. Wenn Sie "on_get" oder "on_post" schreiben, wird die Anforderung der entsprechenden Methode verarbeitet.

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

Schreibrouting

Verbinden Sie mit add_route den Pfad mit der Klasse, die die Anforderung verarbeitet.

sample.py


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

anfangen

Bitte ändern Sie die Adresse und den Port entsprechend. Dieser Teil ist bei Verwendung von "Gunicorn" usw. nicht erforderlich.

sample.py


...
if __name__ == "__main__":
    from wsgiref import simple_server

    httpd = simple_server.make_server("127.0.0.1", 8000, app)
    httpd.serve_forever()
...

Prüfung

Es funktioniert normalerweise mit "Python".

$ python sample.py

Wenn ich versuche, darauf zuzugreifen, scheint es zu funktionieren. http://localhost:8000/sample

{"body": {"a": "hoge", "b": "fuga"}, "header": "Hello!"}

Verwenden Sie etwas mehr

Verwenden Sie "Gunicorn"

Installieren Sie mit pip.

$ pip install gunicorn

Standardmäßig werden 8000 Ports verwendet.

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

Verwenden Sie -b, um den Port (die Adresse) zu ändern.

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

Anforderungsparameter abrufen

Es steht in der req im Argument wie 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"}

Ich hab es geschafft. Es ist eine gute Idee, die Anfrage und Antwort hier zu lesen. req/resp

Greifen Sie auf die Datenbank zu

Der Standard enthält keine spezifischen Mittel. Ich werde es selbst vorbereiten. Ich verwende MySQL in meiner Umgebung, daher werde ich versuchen, darauf zuzugreifen. Installieren Sie zuerst "MySQL-Python". Vorstellung des bekannten pip.

$ pip install MySQL-Python

Und schreibe. Bitte ändern Sie die DB-Informationen entsprechend.

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

Ich hab es geschafft.

{"term": "Hoge", "meening": "Fuga", "example": "Stichprobe", "id": 1}

Diesmal vollständiger Code

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

abschließend

Es war sehr einfach zu machen und es fühlte sich gut an. Es ist schnell zu schreiben und zu beginnen, also ist es schnell. Ich möchte es einmal zum Testen oder mit einer geeigneten und guten Anwendung verwenden, die nicht so viele Benutzer hat.

Recommended Posts

Erstellen Sie schnell einen API-Server mit Python + Falcon
Erstellen Sie schnell eine Excel-Datei mit Python #python
Erstellen Sie eine API mit Django
Web-API mit Python + Falcon
Erstellen Sie mit Python + Flask einen animierten lokalen GIF-Server
Erstellen Sie Awaitable mit der Python / C-API
Erstellen Sie mit AWS SAM schnell eine API mit Python, Lambda und API Gateway
Erstellen Sie eine englische Wort-App mit Python
Erstellen Sie eine App, die Schüler mit Python errät
Erstellen Sie ein Bild mit Zeichen mit Python (Japanisch)
Lokaler Server mit Python
Erstellen Sie mit Quarry einen gefälschten Minecraft-Server in Python
[Vagrant] Richten Sie einen einfachen API-Server mit Python ein
[LINE Messaging API] Erstellen Sie einen Papageienrückgabe-BOT mit Python
Verwenden Sie die Trello-API mit Python
Erstellen Sie eine Umgebung mit virtualenv
Verwenden Sie die Twitter-API mit Python
Erstellen Sie ein 3D-GIF mit Python3
Ein Ei mit Python erstellen
Einfacher HTTP-Server mit Python
Rufen Sie die API mit python3 auf.
Verwenden Sie die Unterschall-API mit Python3
Versuchen Sie, mit Python schnell und einfach auf die Twitter-API zuzugreifen
Nehmen Sie schnell eine Abfragezeichenfolge mit API Gateway-> Lambda (Python)
Erstellen Sie mit Falcon einen Light-Speed-Web-API-Server
[Python Kivy] So erstellen Sie mit pyinstaller eine exe-Datei
Schneiden Sie ein Bild mit Python aus
[AWS] API mit API Gateway + Lambda erstellen
Schreiben Sie einen HTTP / 2-Server in Python
Behalten Sie den Flask API-Server für immer bei
Quine Post mit Qiita API (Python)
Erstellen Sie eine virtuelle Umgebung mit Python!
Ich habe eine SMS mit Python gesendet
Erstellen Sie Google Mail in Python ohne Verwendung der API
Erstellen Sie eine API mit hug mit mod_wsgi
Erstellen Sie eine Altersgruppe mit Pandas
Implementieren Sie die REST-API schnell in Python
Zeichnen Sie eine Illustration mit Python + OpenCV
[Python] Mail mit Outlook senden
[Python] API zum Senden von Google Mail erstellen
Erstellen Sie mit der AWS-API einen Alias für Route53 zu CloudFront
[LINE Messaging API] Erstellen Sie einen BOT, der eine Verbindung zu jemandem mit Python herstellt
[Für Python] Erstellen Sie schnell eine Upload-Datei in AWS Lambda Layer
Erstellen Sie eine Anwendung, die nur mit der Google Custom Search-API mit Python 3.3.1 in Bottle sucht
Sammeln von Informationen von Twitter mit Python (Twitter API)
Erstellen Sie eine Anwendung, indem Sie mit Pygame klassifizieren
[Python] Erstellen einer Umgebung mit Anaconda [Mac]
Erstellen Sie mit Class einen Python-Funktionsdekorator
Erstellen Sie mit python3 eine Wortwolke aus Ihrem Tweet
[In-Database Python Analysis Tutorial mit SQL Server 2017]
Herausforderung beim Erstellen eines Zeitachsenlistenberichts mit der Toggl-API und Python
Erstellen Sie mit PySimpleGUI einen Bildverarbeitungs-Viewer
Erstellen Sie mit Python + PIL ein Dummy-Image.
Holen Sie sich Lebensmitteldaten mit Amazon API (Python)
Erstellen Sie mit Twisted Ihren eigenen DNS-Server
[Python] Erstellen Sie mit Anaconda eine virtuelle Umgebung