1. はじめに
こんにちは!株式会社Definerの阪本です!
今回は、PythonとFlaskでRestful APIを開発する方法をご紹介したいと思います。
今回は、PythonとFlaskでRestful APIを開発する方法をご紹介したいと思います。
2. 目的・ユースケース
この記事では、FlaskでRestful APIを作成したいときに、参考になる情報やプラクティスをまとめています。
3. Restful APIとは
まず、Restful APIについておさらいします。
Restful APとは、以下を満たすAPIのことです。
・Client-Server (クライアントとサーバーの分離)
・Stateless (ステートレス性)
・Cache (キャッシュ可能性)
・Uniform Interface (統一されたインターフェース)
・Layered System (階層化されたシステム・アーキテクチャー)
例えば、HTTPベースのREST APIについて実例を見ていきます。
・URIベースのエンドポイントでリソースを決める
例 api/user_listなら、ユーザ一覧が対応
・HTTPメソッドでリソースの操作を決める
例 POSTなら、リソースを追加
HTTPベースのREST APIは、上記の条件を満たします。
Restful APとは、以下を満たすAPIのことです。
・Client-Server (クライアントとサーバーの分離)
・Stateless (ステートレス性)
・Cache (キャッシュ可能性)
・Uniform Interface (統一されたインターフェース)
・Layered System (階層化されたシステム・アーキテクチャー)
例えば、HTTPベースのREST APIについて実例を見ていきます。
・URIベースのエンドポイントでリソースを決める
例 api/user_listなら、ユーザ一覧が対応
・HTTPメソッドでリソースの操作を決める
例 POSTなら、リソースを追加
HTTPベースのREST APIは、上記の条件を満たします。
4. 設定ファイルの準備
まずは、Lambdaのセットアップをしていきます。
Lambda関数の作成に必要な、AWS SAMの設定ファイルを準備します。
①設定ファイルの用意
以下のように、template.yamlとrequirements.txtを用意します。
Lambda関数の作成に必要な、AWS SAMの設定ファイルを準備します。
①設定ファイルの用意
以下のように、template.yamlとrequirements.txtを用意します。
## template.yaml
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Resources:
TestFunction:
Type: AWS::Serverless::Function
Properties:
FunctionName: 'test'
CodeUri: hello_world/
Handler: app.lambda_handler
Runtime: python3.9
Events:
ApiRoot:
Type: Api
Properties:
Path: '/'
Method: ANY
ApiProxy:
Type: Api
Properties:
Path: '/{proxy+}'
Method: ANY
requirements.txtには、以下の三行を追記します。
requests
Flask
aws-wsgi
5. Lambdaの実装
続いて、Lambdaを実装していきます。
①Lambdaサンプルコードの準備
以下のコードをapp.pyにコピペします。
①Lambdaサンプルコードの準備
以下のコードをapp.pyにコピペします。
import awsgi
from flask import Flask, request, render_template
app = Flask(__name__)
@app.route('/hello', methods=['GET'])
def hello_get():
return {'msg': 'hello world'}
def lambda_handler(event, context):
return awsgi.response(app, event, context)
②Lambdaのデプロイ
「sam build」「sam deploy」コマンドで、Lambdaをデプロイします。
③APIのテスト
APIのエンドポイントURLを控え、CurlコマンドでAPIコールします。
想定通りのレスポンスが戻ってきました!
## ビルド
sam build
## デプロイ
sam deploy --guided
## APIのテスト
curl -X GET https:/${APIエンドポイントURL}/${ステージ名}/hello
## テスト結果
{"msg":"hello world"}
6. 引用・参考記事
7. 独自ソリューション「PrismScaler」について
8. お問合せ
本記事では、入門編として有益な情報を無料公開しています。ご相談やお問い合わせは「株式会社Definer」へ。
9. Definerに関して。
・ Definer Incは、ITの上流から下流まで一気通貫のワンストップソリューションをご提供しております。
・ AIやクラウドのITインフラなど、先進的なIT技術のコンサルティングから要件定義 / 設計開発 / 実装、保守運用に至るまでの統合的な支援にコミットしています。
・ DevOpsとCI/CDコンサルティングにより「少ないエンジニアで事業が成長する仕組みづくり」「エンジニアが喜ぶ、採用しやすい環境づくり」「高速なアジャイル開発環境」を実現しています。
・ また、自社プロダクトとしてPrismScalerを展開しております。PrismScalerは、AWS、Azure、GCPなどのマルチクラウド / ITインフラの高品質かつ迅速な、「自動構築」「自動監視」「問題検知」「構成可視化」を実現します。
・ AIやクラウドのITインフラなど、先進的なIT技術のコンサルティングから要件定義 / 設計開発 / 実装、保守運用に至るまでの統合的な支援にコミットしています。
・ DevOpsとCI/CDコンサルティングにより「少ないエンジニアで事業が成長する仕組みづくり」「エンジニアが喜ぶ、採用しやすい環境づくり」「高速なアジャイル開発環境」を実現しています。
・ また、自社プロダクトとしてPrismScalerを展開しております。PrismScalerは、AWS、Azure、GCPなどのマルチクラウド / ITインフラの高品質かつ迅速な、「自動構築」「自動監視」「問題検知」「構成可視化」を実現します。