投稿日:2022/12/08
はじめに
今回、webサーバーを作る勉強として、Flaskを利用したAPIの作成を行いました。
勉強したことを自分用メモとして記事にまとめました。
間違い等、お気づきの場合はご指摘いただけると幸いです。
APIの作成
入力した日付から曜日を取得するAPIを作成していきます。
app.py
from datetime import datetime
from flask import Flask, request
import pytz
# Flaskのインスタンスをappという名前で作成
app = Flask(__name__)
# Flaskでpostを受けとるにはrouteの第二引数に methods=['post'] を指定
# localhost:5000/dateへPOSTメソッドでリクエストを受信したら、関数「week_caluculation」を実行する
@app.route('/date', methods=['POST'])
def week_caluculation():
# 曜日情報のリストを作成
week_list = ['月', '火', '水', '木', '金', '土', '日']
# request.form.get は POST送信 された値を取得するプロパティ
# ('days')は、送信されたデータのキーを指定しており、このキーで送信された値を取得する
input_date = request.form.get('days')
# 受け取った文字を日付に変換する
date = datetime.strptime(input_date, '%Y-%m-%d')
# 日付を曜日に変換する
# date オブジェクトは曜日情報を0から6の整数で保持
week = date.weekday()
return f'{date}は{week_list[week]}曜日です'
if __name__ == "main":
app.run()
Python 曜日情報を取得
# 受け取った文字を日付に変換する
date = datetime.strptime(input_date, '%Y-%m-%d')
strptime(): 文字列から日付、時間への変換
# 日付を曜日に変換する
week = date.weekday()
datetimeモジュールにあるdateオブジェクトのweekdayメソッドを使用
date オブジェクトは曜日情報を0から6の整数で保持。
0なら月曜日、1なら火曜日と順番に並んで最後の6が日曜日になる。
curlコマンドでPOSTする
curlコマンド
サーバーとデータを送受信するコマンド
$ curl -X POST -d 'days=2022-12-08' http://localhost:5000/date
- -X POST : POSTリクエストを送る
-
-d : POSTする際、何らかのパラメータやデータを付与してリクエストする(--dataの省略形)
指定された文字列データをそのまま送信(days=2022-12-08という文字列が渡される)
オプションに渡す値の形としては 変数名=値 の形式で値を指定する。 - http://localhost:5000/date : エンドポイントのURLを指定
ターミナルでサーバーを立ち上げて動作確認
プロジェクトのディレクトリへ移動
virtualenvによるPythonの仮想環境を有効化
$ source env/bin/activate
下記のコマンドでサーバーを立ち上げ
$ flask run
↓サーバーを立ち上げたターミナルとは別に、新しくターミナルを表示
ターミナルからcurlコマンドでリクエストを送信
$ curl -X POST -d 'days=2022-12-08' http://localhost:5000/date
>> 2022-12-08 00:00:00は木曜日です
成功です。
参考文献
以下のサイト、記事を参考にさせていただきました。