はじめに
pythonでHTTPメソッドを扱う方法についてまとめていきます.
FlaskでREST APIを作成する際にはよく使う記述をまとめました.
初学者の方の参考になればと思います!
HTTPメソッドについて
HTTP ver1.1でのメソッド一覧は以下の通りです.
GET
URIで指定した情報を要求する.
URIがファイル名の場合はそのファイルの中身を,プログラム名の場合はプログラムの出力を返す.
HEAD
GETと同様の処理だが,HTTPヘッダのみを返す.
POST
クライアントからデータを(名前と値)のセットで渡す.
使用例:フォームデータを送る時
OPTIONS
通信オプションの通知等.
TRACE
サーバが受け取った要求行とヘッダ行をそのまま送り返す.
DELETE
URIで指定したサーバ上のファイルを削除する.
PUT
URIで指定したサーバ上のファイルを置き換える.
PATCH (Appendix)
PUTと同様の処理だが,差分のみを置き換える
LINK (Appendix)
他の情報との関連付けを行う.
UNLINK (Appendix)
LINKで設定した関連を外す.
仕様がAppendixのものは正式に定義されているものではないです.
今回の記事はGET, POST, PUT, DELETEについて実装をまとめます.
環境構築
まずは,pythonやFlaskを扱う環境を作成します.
HTTPリクエストを受け取るサーバ側でモジュールをインストールします.
sudo apt install python3 python3-pip
pip3 install flask
これだけでflaskの準備はOKです.
Flaskでの扱い方
Flaskの基礎
まずは,Flaskの基本型を作ります.
from flask import Flask
app = Flask(__name__)
@app.route('/', methods=['###'])
def index():
return 'hello world'
if __name__ == '__main__':
app.run(host="0.0.0.0", port=5000, debug=True)
flaskをインポートすることで使用可能です.
app = Flask(__name__)
によってアクセスされたURIによって処理を変更できるようになります.
URIの指定は@app.route()
で行います.
@app.route('\')
であればドメインのみあるいはIPアドレスのみでアクセスされた場合を指します.
引数であるmethods=['']
でHTTPメソッドを指定します.
GETを使ったデータ処理
GETを使った受け取りでは,methodsを'GET'に指定します.
受け取った引数の中身を取り出したい場合は,requestライブラリを使用します.
from flask import Flask, jsonify, request
@app.route('/get', methods=['GET'])
def get_request():
name = request.args['name']
return jsonify(name.upper())
request.args['']
で取り出したい引数のkeyを入れることでvalueを変数に格納できます.
上記の例ではnameというkeyのvalueを取り出しています.
また,JSON形式でレスポンスを返すため,jsonifyライブラリを使用しています.
POSTを使ったデータ処理
POSTを使った受け取りでは,methodsを'POST'に指定します.
受け取った引数の中身を取り出したい場合も,requestライブラリを使用します.
from flask import Flask, jsonify, request
@app.route('/post', methods=['POST'])
def post_request():
post_data = request.get_json(force=True)
name = post_data['name']
return jsonify(name.lower())
request.get_json()
でPOSTで送信したデータを変数に格納することができます.
その後辞書と同様に取り出したい引数のkeyを指定することでvalueを変数に格納できます.
上記の例ではnameというkeyのvalueを取り出しています.
PUTを使ったデータ処理
PUTを使った受け取りでは,methodsを'PUT'に指定します.
これは主にデータの修正に使われます.
from flask import Flask, jsonify, request
@app.route('/put/<id>', methods=['PUT'])
def update_post(id):
data = request.json
db[int(id)] = data
return jsonify(db)
request.json
で送信したデータを受け取っています.
flaskではrouteに/<パラメータ>
と指定することで関数にパラメータを渡すことができます.
配列のid番目をリクエストから受け取った内容で置き換えています.
DELETEを使ったデータ処理
DELETEを使った受け取りでは,methodsを'DELETE'に指定します.
これは主にデータの削除に使われます.
from flask import Flask, jsonify, request
@app.route('/delete/<id>', methods=['DELETE'])
def delete_post(id):
db.pop(int(id))
return jsonify(db)
PUTを使った時とほぼ同様です.
curlコマンドを使ったHTTPリクエスト
curl -X <HTTPメソッド> -H "Content-Type: application/json" -d '{<key>:<value>}' <ホスト名>:5000/
curlコマンドのオプションを使用することでリクエストを送ることができます.
pythonでのHTTPリクエスト
POSTの例を載せます.
import requests
import json
url = '<ホスト名>'
payload = { <key>:<value> }
header = {'Content-Type' : 'application/json'}
response = requests.post(url, data = json.dumps(payload).encode("utf-8"), headers = header)
for res in response:
print(res)
response.close()
おわりに
FlaskでのHTTPメソッドについてまとめてみました.
PythonでAPIを作る際には参考にしてみてください.