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('/articles/<articleid>') def api_article(articleid): return 'You are reading ' + articleid if __name__ == '__main__': app.run()
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('/hello') def api_hello(): if 'name' in request.args: return 'Hello ' + request.args['name'] else: return 'Hello John Doe'
Anfrage:
GET /hello
Hallo John Doe
GET /hello?name=Luis
Hallo Luis
Anfragemethoden (HTTP-Verben)
@app.route('/echo', methods = ['GET', 'POST', 'PATCH', 'PUT', 'DELETE']) def api_echo(): if request.method == 'GET': return "ECHO: GET\n" elif request.method == 'POST': return "ECHO: POST\n" elif request.method == 'PATCH': return "ECHO: PACTH\n" elif request.method == 'PUT': return "ECHO: PUT\n" elif request.method == 'DELETE': return "ECHO: DELETE"
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('/messages', methods = ['POST']) def api_message(): if request.headers['Content-Type'] == 'text/plain': return "Text Message: " + request.data elif request.headers['Content-Type'] == 'application/json': return "JSON Message: " + json.dumps(request.json) elif request.headers['Content-Type'] == 'application/octet-stream': f = open('./binary', 'wb') f.write(request.data) f.close() return "Binary message written!" else: return "415 Unsupported Media Type ;)"
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('/hello', methods = ['GET']) def api_hello(): data = { 'hello' : 'world', 'number' : 3 } js = json.dumps(data) resp = Response(js, status=200, mimetype='application/json') resp.headers['Link'] = 'http://luisrei.com' return resp
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
Statuscodes und Fehler durch
resp = Response(js, status=200, mimetype='application/json')
@app.errorhandler(404) def not_found(error=None): message = { 'status': 404, 'message': 'Not Found: ' + request.url, } resp = jsonify(message) resp.status_code = 404 return resp @app.route('/users/<userid>', methods = ['GET']) def api_users(userid): users = {'1':'john', '2':'steve', '3':'bill'} if userid in users: return jsonify({userid:users[userid]}) else: return not_found()
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 == 'admin' and password == 'secret' def authenticate(): message = {'message': "Authenticate."} resp = jsonify(message) resp.status_code = 401 resp.headers['WWW-Authenticate'] = 'Basic realm="Example"' 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
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('app.log') app.logger.addHandler(file_handler) app.logger.setLevel(logging.INFO) @app.route('/hello', methods = ['GET']) def api_hello(): app.logger.info('informing') app.logger.warning('warning') app.logger.error('screaming bloody murder!') return "check your logs\n"
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!