Beispiele zur Erläuterung der Verwendung von Python und Flask zur Implementierung der RESTful Web API

巴扎黑
Freigeben: 2017-09-20 09:56:50
Original
2684 Leute haben es durchsucht

Der folgende Editor zeigt Ihnen ein Beispiel für die Verwendung von Python und Flask zur Implementierung der RESTful Web API. Der Herausgeber findet es ziemlich gut, deshalb teile ich es jetzt mit Ihnen und gebe es als Referenz. Folgen wir dem Editor, um einen Blick darauf zu werfen

Umgebungsinstallation:

sudo pip install flask

Flask ist ein Python A Microservices-Framework basierend auf Werkzeug, einer WSGI-Klassenbibliothek.

Vorteile von Flask:

In Python geschrieben (das kann von Vorteil sein);
Einfach zu verwenden;
Flexibel;
Mehrere gute Bereitstellungsoptionen;
RESTful Anforderungsversand

RESSOURCEN

Ein API-Dienst, der auf /articles und /articles/:id reagiert:


from flask import Flask, url_for
app = Flask(__name__)

@app.route('/')
def api_root():
 return 'Welcome'

@app.route('/articles')
def api_articles():
 return 'List of ' + url_for('api_articles')

@app.route(&#39;/articles/<articleid>&#39;)
def api_article(articleid):
 return &#39;You are reading &#39; + articleid

if __name__ == &#39;__main__&#39;:
 app.run()
Nach dem Login kopieren

Anfrage:

curl http://127.0.0.1:5000/

Antwort:

GET /
Willkommen

GET /articles
Liste von /articles

GET /articles/123
Sie lesen 123

ANFRAGEN

GET-Parameter


from flask import request

@app.route(&#39;/hello&#39;)
def api_hello():
 if &#39;name&#39; in request.args:
  return &#39;Hello &#39; + request.args[&#39;name&#39;]
 else:
  return &#39;Hello John Doe&#39;
Nach dem Login kopieren

Anfrage:

GET /hello
Hallo John Doe

GET /hello?name=Luis
Hallo Luis

Anfragemethoden (HTTP-Verben)


@app.route(&#39;/echo&#39;, methods = [&#39;GET&#39;, &#39;POST&#39;, &#39;PATCH&#39;, &#39;PUT&#39;, &#39;DELETE&#39;])
def api_echo():
 if request.method == &#39;GET&#39;:
  return "ECHO: GET\n"

 elif request.method == &#39;POST&#39;:
  return "ECHO: POST\n"

 elif request.method == &#39;PATCH&#39;:
  return "ECHO: PACTH\n"

 elif request.method == &#39;PUT&#39;:
  return "ECHO: PUT\n"

 elif request.method == &#39;DELETE&#39;:
  return "ECHO: DELETE"
Nach dem Login kopieren

Anfrage geben Sie den Anfragetyp an:

curl -X PATCH http://127.0.0.1:5000/echo
GET /echo
ECHO: GET

POST /ECHO
ECHO: POST

Daten & Header anfordern


from flask import json

@app.route(&#39;/messages&#39;, methods = [&#39;POST&#39;])
def api_message():

 if request.headers[&#39;Content-Type&#39;] == &#39;text/plain&#39;:
  return "Text Message: " + request.data

 elif request.headers[&#39;Content-Type&#39;] == &#39;application/json&#39;:
  return "JSON Message: " + json.dumps(request.json)

 elif request.headers[&#39;Content-Type&#39;] == &#39;application/octet-stream&#39;:
  f = open(&#39;./binary&#39;, &#39;wb&#39;)
  f.write(request.data)
    f.close()
  return "Binary message written!"

 else:
  return "415 Unsupported Media Type ;)"
Nach dem Login kopieren

Angegebenen Inhaltstyp anfordern:

curl -H "Inhaltstyp: application/json"
-X POST http://127.0 . 0.1:5000/messages -d '{"message":"Hello Data"}'

curl -H "Content-type: application/octet-stream"
-X POST http:// 127.0 .0.1:5000/messages --data-binary @message.bin

ANTWORTEN


from flask import Response

@app.route(&#39;/hello&#39;, methods = [&#39;GET&#39;])
def api_hello():
 data = {
  &#39;hello&#39; : &#39;world&#39;,
  &#39;number&#39; : 3
 }
 js = json.dumps(data)

 resp = Response(js, status=200, mimetype=&#39;application/json&#39;)
 resp.headers[&#39;Link&#39;] = &#39;http://luisrei.com&#39;

 return resp
Nach dem Login kopieren

Antwort-HTTP-Header anzeigen:

curl -i http://127.0.0.1:5000/hello

Code optimieren:

from flask import jsonify

Ersetzen Sie


resp = jsonify(data)
resp.status_code = 200
Nach dem Login kopieren

Statuscodes und Fehler durch

resp = Response(js, status=200, mimetype=&#39;application/json&#39;)
Nach dem Login kopieren


@app.errorhandler(404)
def not_found(error=None):
 message = {
   &#39;status&#39;: 404,
   &#39;message&#39;: &#39;Not Found: &#39; + request.url,
 }
 resp = jsonify(message)
 resp.status_code = 404

 return resp

@app.route(&#39;/users/<userid>&#39;, methods = [&#39;GET&#39;])
def api_users(userid):
 users = {&#39;1&#39;:&#39;john&#39;, &#39;2&#39;:&#39;steve&#39;, &#39;3&#39;:&#39;bill&#39;}
 
 if userid in users:
  return jsonify({userid:users[userid]})
 else:
  return not_found()
Nach dem Login kopieren

Anfrage:

GET /users/2
HTTP/1.0 200 OK
{
"2": "steve"
}

GET /users/4
HTTP/1.0 404 NICHT GEFUNDEN
{
"status": 404,
„Nachricht“: „Nicht gefunden: http://127.0.0.1:5000/users/4“
}

AUTHORIZATION


from functools import wraps

def check_auth(username, password):
 return username == &#39;admin&#39; and password == &#39;secret&#39;

def authenticate():
 message = {&#39;message&#39;: "Authenticate."}
 resp = jsonify(message)

 resp.status_code = 401
 resp.headers[&#39;WWW-Authenticate&#39;] = &#39;Basic realm="Example"&#39;

 return resp

def requires_auth(f):
 @wraps(f)
 def decorated(*args, **kwargs):
  auth = request.authorization
  if not auth: 
   return authenticate()

  elif not check_auth(auth.username, auth.password):
   return authenticate()
  return f(*args, **kwargs)

 return decorated
Nach dem Login kopieren

Ersetzen der check_auth-Funktion und Verwenden des require_auth-Dekorators:

@app.route('/secrets')
@requires_auth
def api_hello( ) :
return „Shhh, das ist streng geheimes Spionagezeug!“
HTTP-Basisauthentifizierung:

curl -v -u "admin:secret" http://127.0.0.1:5000/secrets

EINFACHE DEBUG- UND PROTOKOLLIERUNG

Debug:

app.run(debug=True)
Protokollierung:


import logging
file_handler = logging.FileHandler(&#39;app.log&#39;)
app.logger.addHandler(file_handler)
app.logger.setLevel(logging.INFO)

@app.route(&#39;/hello&#39;, methods = [&#39;GET&#39;])
def api_hello():
 app.logger.info(&#39;informing&#39;)
 app.logger.warning(&#39;warning&#39;)
 app.logger.error(&#39;screaming bloody murder!&#39;)
 
 return "check your logs\n"
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonBeispiele zur Erläuterung der Verwendung von Python und Flask zur Implementierung der RESTful Web API. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage