LoginSignup
1

More than 1 year has passed since last update.

【Python】Flask HTTPメソッド4種

Last updated at Posted at 2022-07-09

はじめに

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を作る際には参考にしてみてください.

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1