↓ メインコンテンツへスキップ
  1. 補講/
  2. 補講02講 Webアプリケーション(Docker)/

補講02講 週次課題

補講02-1 平方根 REST API
#

難易度 ⭐

パスパラメータで数値を受け取り、その平方根を返す REST API を作成してください。 /sqrt/<num> で num の平方根(math.sqrtで求められます)を返します。 num は float 型で受け取ってください。 もし、numが負の数の場合は、400 のステータスコードを返してください。

sqrt_rest.py というファイル名で保存してください。

from flask import Flask
import math

app = Flask(__name__)

# ここに REST API を作成する。

app.run(port = 5001, debug = True, host = "0.0.0.0")

このスクリプトを実行したあと、ブラウザで http://localhost:5001/sqrt/2 にアクセスすると、1.41421356... というメッセージが表示されることを確認してください。

発展課題(任意) 立方根

この課題は任意です。提出は必須ではなく、取り組まなくても不利にはなりません。余裕があれば挑戦してください。

先ほどの sqrt_rest.py に /cbrt/<num> で num の立方根を返す REST API を追記してください。 立方根は math.cbrt で求められます。 立方根の場合は、負数でも問題ありません。

なお、math.cbrt は Python 3.11 で追加された関数です。 それ以前のバージョンの Python を利用している場合は、num ** (1/3) で立方根を計算してください。

補講02-2 四則演算 REST API
#

難易度 ⭐⭐

以下の特徴を持つ四則演算 REST API を作成してください。 クエリパラメータで、v1、v2、op を受け取り、v1 と v2 の四則演算結果を返します。 v1、v2 は int 型で受け取り、op は add(足し算)、sub(引き算)、mul(掛け算)、div(割り算) のいずれかです。 op が上記以外の場合は、404 のステータスコードを返してください。 v1、v2 が int でない場合(not v1.isdigit() で調べられます)は、 400 のステータスコードを返してください。

calc_rest.py というファイル名で保存してください。

from flask import Flask, request

app = Flask(__name__)

@app.route("/calc", methods = ["GET"])
def calc():
    v1 = # クエリパラメータから v1 を取得する。
    v2 = # クエリパラメータから v2 を取得する。
    op = # クエリパラメータから op を取得する。
    if # v1, v2, op のどれかが与えられなかった場合
        return "Error: Invalid parameters", 400

    i1 = int(v1)
    i2 = int(v2)

    if op == "add":
        result = i1 + i2
    elif op == "sub":
        result = i1 - i2
    elif op == "mul":
        result = i1 * i2
    elif op == "div":
        if i2 == 0:
            return "Error: Division by zero", 400
        result = i1 / i2
    else:
        return "Error: Invalid operator", 400
    return f'{{"operation":"{i1} {op} {i2}","result":{result}}}', 200

app.run(port = 5001, debug = True, host = "0.0.0.0")

このスクリプトを実行したあと、ブラウザで http://localhost:5001/calc?v1=1&v2=2&op=add にアクセスすると、{"operation":"1 add 2","result":3} というメッセージが表示されることを確認してください。