サーバーサイドのPythonで、ブラウザ等のクライアントからHTTPリクエストを受けて処理する方法です。
リクエストURLの取得
クライアントからリクエストされたURLは以下のように取得します。
import os
original_url = os.environ['HTTP_X_ORIGINAL_URL'];
リクエストAPIの取得
クライアントからリクエストされたURLの内、どのようなAPIをリクエストされたかを取得します。
例として、ここでは「http://ip:port/api/functions」というURLがリクエストされるとします。
“api”は共通の識別子、”functions”が実行してほしい各種API機能名とします。
import re
request_api_function = re.search(r'/api/[a-zA-Z0-9\/\-]+', original_url)
request_api_function = request_api_function.group()
request_api_function = request_api_function.replace('/api/', '') # functionsを抽出
POST/GET/PUT/DELETEのディスパッチ
クライアントからリクエストされたAPIがPOST/GET/PUT/DELETEの内どれなのかを判断し、ディスパッチします。
リクエストデータは、POST/PUT時はJSON形式、GET/DELETE時はクエリストリングで通知され、内部ではいずれも連想配列形式でハンドリングする例を記載します。
import cgi
import json
import sys
request_method = os.environ['REQUEST_METHOD']
if request_method == 'POST':
content_length = int(os.environ['CONTENT_LENGTH'])
request_body = sys.stdin.read(content_length)
request_data = json.loads(request_body)
# POSTの処理
elif request_method == 'GET':
request_data = cgi.FieldStorage()
# GETの処理
elif request_method == 'PUT':
content_length = int(os.environ['CONTENT_LENGTH'])
request_body = sys.stdin.read(content_length)
request_data = json.loads(request_body)
# PUTの処理
elif request_method == 'DELETE':
request_data = cgi.FieldStorage()
# DELETEの処理
コメント