PythonでAPIの公開とプライベートエンドポイントの管理

この記事ではPythonを使用してAPIを公開し、プライベートエンドポイントを管理する方法について詳しく解説します。具体的なコード例とその解説、さらには応用例も含めています。プログラミングの経験がある方、特にPythonとAPIの基本的な知識がある方を対象としています。

目次

はじめに

API(Application Programming Interface)はシステムやサービスが外部と通信するためのインターフェースです。一方、エンドポイントはAPIが提供する具体的なURLの一つ一つを指します。この記事ではPythonとFlaskを使ってAPIを設定し、プライベートエンドポイントを如何に管理するかを見ていきます。

基本的なAPIの作成

最初に、基本的なAPIをFlaskを使用して作成します。

必要なパッケージのインストール

Flaskをインストールする必要があります。ターミナルで以下のコマンドを実行してください。

pip install Flask

サンプルコード

以下が基本的なAPIのFlaskコードです。

from flask import Flask
app = Flask(__name__)

@app.route('/public')
def public_endpoint():
  return 'This is a public endpoint.'

@app.route('/private')
def private_endpoint():
  return 'This is a private endpoint.'
  
if __name__ == '__main__':
  app.run()

このコードでは`/public`と`/private`という2つのエンドポイントを設定しています。

プライベートエンドポイントの管理

基本認証を使用した方法

基本認証はHTTPプロトコルで使用される認証の一つです。`Flask-HTTPAuth`というライブラリを使用します。

pip install Flask-HTTPAuth

以下に、基本認証を適用したプライベートエンドポイントのコード例を示します。

from flask import Flask
from flask_httpauth import HTTPBasicAuth

app = Flask(__name__)
auth = HTTPBasicAuth()

@auth.verify_password
def verify_password(username, password):
    if username == 'admin' and password == 'password':
        return True
    return False

@app.route('/public')
def public_endpoint():
    return 'This is a public endpoint.'

@app.route('/private')
@auth.login_required
def private_endpoint():
    return 'This is a private endpoint.'

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

`@auth.login_required`デコレータは、このエンドポイントが認証が必要なものであると示しています。

APIキーを使用した方法

APIキーはクライアントがAPIにアクセスするための秘密鍵です。

from flask import Flask, request

app = Flask(__name__)

API_KEY = '123456'

@app.route('/public')
def public_endpoint():
    return 'This is a public endpoint.'

@app.route('/private')
def private_endpoint():
    if request.args.get('key') == API_KEY:
        return 'This is a private endpoint.'
    else:
        return 'Unauthorized', 401

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

`request.args.get(‘key’)`でクエリパラメータからAPIキーを取得しています。

応用例

IP制限を追加する

特定のIPアドレスからのみアクセスを許可する方法です。

from flask import Flask, request

app = Flask(__name__)

ALLOWED_IP = '192.168.0.1'

@app.route('/private')
def private_endpoint():
    if request.remote_addr == ALLOWED_IP:
        return 'This is a private endpoint.'
    else:
        return 'Unauthorized', 401

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

JWTを使用した認証

JWT(JSON Web Token)を使用した認証も高度なケースとして挙げられます。

from flask import Flask, jsonify, request
import jwt

app = Flask(__name__)

SECRET_KEY = 'my_secret_key'

@app.route('/token')
def get_token():
    encoded_jwt = jwt.encode({'some': 'payload'}, SECRET_KEY, algorithm='HS256')
    return jsonify(token=encoded_jwt)

@app.route('/private')
def private_endpoint():
    token = request.headers.get('Authorization').split(' ')[1]
    decoded_jwt = jwt.decode(token, SECRET_KEY, algorithms=['HS256'])
    if decoded_jwt:
        return 'This is a private endpoint.'
    else:
        return 'Unauthorized', 401

まとめ

この記事では、PythonとFlaskを使用して基本的なAPIとプライベートエンドポイントを設定する方法について解説しました。基本認証やAPIキーでのアクセス制御、さらにはIP制限やJWTによる高度な認証方法まで、多角的に解説を行いました。

コメント

コメントする

目次