LoginSignup
0
0

単純なバックエンドAPIのサンプル

Last updated at Posted at 2024-05-10

色々テストするのに短くて簡単なAPIをメモっておこうと思ってこのページを作りました。
まだAPIとか作ったことがないという方が手始めに動かしてみるのにもちょうどいいかなと思います。

金額をリクエストとして送ると税込みの金額を返すAPIを作りました。エラー処理とかはそこまで厳密にやっていません。

tax.py
from flask import Flask, request, jsonify

app = Flask(__name__)

def tax(amount int, taxRate int):
    return amount*(100+taxRate)/100

@app.route('/calc',methods=['POST'])
def main():
    data = request.get_json()
    try:
        amount = int(data['amount'])
        result = tax(amount,10)
        return jsonify({'result':amount})
    except (KeyError,ValueError,TypeError) as e:
        return jsonify({'error':str(e)}),400

if __name__ == '__main__':
    app.run(debug=True)

このままでも動きますが、コンテナを立てて動かしたいと思います。

まず、imageを保存するためにdocker desktopをダウンロードして起動します。

次に以下のファイルを用意します。

Dockerfile:

FROM python:3.9-slim

WORKDIR /app

copy . /app

RUN pip install --no-cache-dir flask gunicon

EXPOSE 5000

ENV NAME 10

CMD ['gunicon','--bind','0.0.0.0:5000','tax:app']
docker-compose.yaml
version: '3'
services:
    image: ./
    ports:
        - '5000:5000'
    enironment:
        - NUMBER=10

ファイル構成はこんな感じになります。

*
|- tax.py
|- Dockerfile
|- docker-compose.yaml

では、コンテナを立ててみましょう。

docker compose up

curlコマンドで試しにリクエストを送ってみます。

curl -X POST -H 'Content-Type: application/json' -d '{"amount":100}' http://localhost:5000/calc

すると、{result:110}と税込みの金額が返ってくると思います。

最後にコンテナを止めてお片付けをします。

docker compose down
0
0
0

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
0
0