1
2

Python(Flask)によるAPIの開発の基礎

Last updated at Posted at 2023-11-19

本記事の背景

Flaskでjsonを扱う時によく検索されるが、背景にあるAPI開発に関して網羅的な説明はあまり見かけないため、本記事はFlaskを使い、API開発の基礎に触れつつ、jsonを扱い、実際のAPIテストでよく使うPostmanを紹介しながら、API開発における一連な動きについて解説する

Restful API開発とは

詳細はAWSに任せるとして、要は、HTTPと同じ、GET/POST/PUT/DELETEを使い、データのやり取りする。
メリットとして、上記以外は使わないので、実装しやすい。
デメリットとしては、上記以外で特殊なケースの場合、複数のAPIを叩くことになる場合がある

バックエンド処理

上記のRestful APIのバックエンド側の実装としては、DBとの連携を想定した場合それぞれ以下に示す。

GET:DBからデータを取得する(Select処理)
POST:DBのデータを追加する(Insert処理)
PUT:DBのデータを更新する(Update処理)
DELETE:DBのデータを削除する(Delete処理)

jsonデータによる媒介

上記のAPIとバックエンドの間には、jsonデータを生成することにより、色んなシステムがあっても、ほぼ同じメソッドを実装することでフロントエンドとバックエンドのやり取りができる。
また、ライブラリにはjsonを扱うための標準機能が用意されている。
例えば、jinja2/JavaScript/Python/Flaskはそれぞれjsonを扱える。
また、jsonは基本的に辞書型変数としてPythonで扱えるので、データの堅牢度も高い。
但し、jsonのデメリットは、入れ子構造の辞書型や大規模データを扱う場合は、動きとしては、遅いため、別途検討が必要

POSTMANによるテスト

POSTMANは、APIテスト、Scriptを組んでテスト自動化も可能なテストツールです。無償提供されている。

Flask実装例

from flask import Flask, jsonify, request

app = Flask(__name__)

@app.route('/', methods=['GET','POST'])
def index():
    if (request.method == 'POST'):
        json = request.get_json()
        return jsonify({'you post' : json})
        
    else:
        return jsonify({"about":"hello world!" })

@app.route('/multi/<int:num>', methods=['GET'])
def get_multiply10(num):
    return jsonify({'result': num*10})

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

POSTMANによるGET結果

image.png

POSTMANによるPOST結果

image.png

別のAPIのGET結果

10の10倍の計算結果が得られた。
image.png

バックエンドのデバッグログ

127.0.0.1 - - [19/Nov/2023 12:50:19] "GET / HTTP/1.1" 200 -
127.0.0.1 - - [19/Nov/2023 12:54:33] "POST / HTTP/1.1" 200 -
127.0.0.1 - - [19/Nov/2023 12:56:59] "GET /multi/10 HTTP/1.1" 200 -
1
2
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
1
2