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

第10講 週次課題

週次課題 Flask Docker
目次

課題10-1 平方根 REST API
#

難易度 ⭐

パスパラメータで数値を受け取り,その平方根を返す REST API を作成してください. /sqrt/<num>num の平方根(math.sqrtで求められます)を返します. numfloat 型で受け取ってください. もし,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) で立方根を計算してください.

課題10-2 四則演算 REST API
#

難易度 ⭐⭐

以下の特徴を持つ四則演算 REST API を作成してください. クエリパラメータで,v1v2op を受け取り,v1v2 の四則演算結果を返します. v1v2int 型で受け取り,opadd(足し算),sub(引き算),mul(掛け算),div(割り算) のいずれかです. op が上記以外の場合は,404 のステータスコードを返してください. v1v2int でない場合(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} というメッセージが表示されることを確認してください.