极简接口録画ツール#
1 日で、非常にシンプルなインターフェース録画ツールを完成させました。主な機能は次のとおりです:
- API リクエストをデータベースに録画することができます。SQLite または PostgreSQL を使用できます。
- API の手動録画時には、ブラウザプロキシを手動で設定し、コマンドラインまたは UI の方法でワンクリックで完了します。
録画された API リクエストの主な目的は、API テストコードの生成を容易にすることです。テストと開発の両方で使用できます。必要な API をデータベースに保存し、後で続けて使用できるようにします。
このツールの利点は、非常に低コストであることです。最も必要な機能を実装するのに 1 日しかかかりませんでした。
コマンドラインツールの機能#
- mitmproxy と独自のプラグインを起動して API リクエストを録画します。
poetry run qacli capture start --name="scenario_name"
- どのウェブサイトのリクエストを録画するかは、configs/settings.toml で設定できます。
mitm = { recorded_url = "https://www.baidu.com,https://www.bing.com" }
上記の例では、すべての baidu と bing のアドレスのリクエストがキャプチャされてデータベースに保存されます。
- データベースのテーブル構造:
class ApiMonitorRecord(SQLModel, table=True):
__tablename__ = "api_monitor_record"
id: Optional[int] = Field(default=None, primary_key=True)
app: Optional[str] = None
service: Optional[str] = None
api: Optional[str] = None
path: Optional[str] = None
request_url: Optional[str] = None
method: Optional[str] = None
request_headers: Optional[str] = None
request_body: Optional[str] = None
response_headers: Optional[str] = None
status_code: int
response_body: Optional[str] = None
scenario_name: Optional[str] = None
- MAC でプロキシをオン / オフにする:ブラウザでの操作は不要で、コマンドラインで完了します。
poetry run qacli mac-proxy --help
Usage: qacli mac-proxy [OPTIONS] COMMAND [ARGS]...
╭─ Options ─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --help Show this message and exit. │
╰───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Commands ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ off disable api capture proxy │
│ on enable api capture proxy
UI 機能#
UI を実行するには:
poetry run qaui
UI の操作:
- 録画するシナリオ名を入力します。任意の名前を使用できます。
- 関連するページや API インターフェースを操作します。これらはすべて録画されます。
- データベースをクエリし、指定したシナリオ名のすべての API リクエストが記録されます。
select * from api_monitor_record where scenario_name=<your_record_name>
- 保存されたデータを一括で自動化テストやデータ準備ツールに変換できます。
このツールは非常にシンプルでありながら、十分に使いやすく、コード量も少なく、記録され、他のツールと組み合わせることで、日常的な API アクセスコードの生成とデータ準備のニーズを満たすことができます。
Python 関連の使用#
主に以下のものを使用しています:
- typer:コマンドラインビルドツール
- gradio:UI ビルドツール
- データベース操作:以前から使用している SQLModel ベースのアクセスツール
- poetry:Python プロジェクトの管理、パッケージング / 依存関係管理