自動化 API
実行中の仮想マシンを、HTTP と WebSocket を使ってスクリプトから操作します。このページでは、API の有効化、認証、最初の呼び出しまでを説明します。すべてのルートとメソッドは API の完全なリファレンスに記載されています。
有効にする
仮想マシンの起動時に --api-listen を追加します。
仮想マシンが起動すると、vphone-vm がアドレスとトークンを表示します。
--api-listenを指定しないと、ホスト側でリッスンするものはありません。- ポート
0を指定すると、macOS に空いているポートを割り当てさせます。実際のアドレスは仮想マシンの起動後に表示されます。 --api-listenは--dfuと併用できません。
vphoned は root として動作し、API はゲストの任意のファイルの読み書き、キーチェーンの一覧表示、launch daemon の読み込みができます。ローカルだけで使う場合は、127.0.0.1 または [::1] でリッスンしてください。それ以外のアドレスでは警告が表示されます。そのアドレスに到達できるマシンはトークンさえあれば操作でき、トークンは平文の HTTP でそのまま送られるため、信頼できるネットワークでのみ使用してください。
トークン
トークンは起動のたびに新しく生成されます(32 バイトの乱数を 16 進数で表したもの)。トークンを固定するには、起動前に VPHONE_API_TOKEN を設定します。vphone-cli vm launch は自身の環境変数を vphone-vm に引き継ぎます。値は A-Z a-z 0-9 - . _ ~ からなる 16〜256 文字である必要があります。それ以外の空でない値を設定すると、起動は中止されます。
トークンは次のどの形式でも送れます。
トークンがない、または間違っている場合は 401 Unauthorized が返され、ゲストに何かが届く前に接続が閉じられます。
呼び出しの例
自作のクライアントでつまずきやすい規則:
- すべての
POSTでContent-Type: application/jsonを送る必要があります。送らないと415が返されます。 Originヘッダのあるリクエスト、またはHostがvphoned、localhost、127.0.0.1、::1以外のリクエストには403が返されます。これにより、ブラウザのページから API にアクセスできないようにしています。GETのルートは読み取りだけを行います。設定を変更するにはPUTまたはPOSTを使います。たとえばPUT /v1/low-power-modeに{"enabled": true}を送ります。
Swift のアプリでは、VPhoneExternalAccessKit ライブラリの VPhoneAPIClient を使えます。トークンは自動で送られます。例はリファレンスをご覧ください。
ネットワークでリッスンせずに使う
仮想マシンの制御ソケットは、API のリスナーがなくても同じメソッドを受け付けます。{"t":"rpc","method":"<method>","params":{}} を 1 行の JSON として送ってください。仮想マシンの作成と実行の「制御ソケット」をご覧ください。