開発中の機能
公開API
公開APIとは

公開APIとは

⚠️

この機能は現在開発中であり、まだ公開されていません。記載内容は今後変更される可能性があります。

公開APIは、ベースマキナのリソースを外部システムから操作するためのREST APIです。アクションの一覧取得・詳細取得・実行を、HTTPリクエストで行なえます。

主なユースケースは以下の通りです。

  • 外部システムからベースマキナのアクションを実行する
  • CI/CDのジョブからアクションを呼び出して定型作業を自動化する
  • 自社のスクリプトやツールに、ベースマキナのアクションを組み込む

ベースURL

https://platform.basemachina.com/public/v1

すべてのエンドポイントはこのベースURLからの相対パスで指定します。

利用できるエンドポイント

エンドポイント説明
GET /projects/{project_id}/environments/{environment_id}/actionsアクションの一覧を取得する
GET /projects/{project_id}/environments/{environment_id}/actions/{action_id}アクションの詳細(引数スキーマなど)を取得する
POST /projects/{project_id}/environments/{environment_id}/actions/{action_id}/executionsアクションを同期実行して結果を取得する

現時点で利用できるのは上記3つのアクション系エンドポイントのみです。対応リソースは今後のアップデートで順次追加予定です。

認証

公開APIはBearerトークン認証で保護されています。すべてのリクエストにAuthorizationヘッダーを付与してください。

Authorization: Bearer <token>

利用できるトークンは以下の2種類です。

トークンの種類取得方法主な用途
bm loginで取得したJWTbm loginで発行され、~/.basemachina/credentials.jsonに保存されるローカル端末からの呼び出し、開発時の検証
外部OIDC ID TokenGitHub Actionsなど、ベースマキナのOIDC信頼ポリシーで受け入れ設定済みの発行元から取得CI/CDからの呼び出し

外部OIDC ID TokenをそのままAuthorization: Bearerに指定すると、公開APIが内部でサービスアカウントのJWTに交換します。事前にOIDC信頼ポリシーの設定が必要です。

Authorizationヘッダーが欠けている場合や、トークンが期限切れ・改ざんなどで検証できない場合は、401 unauthorizedが返ります。

ヘッダー

リクエストには以下のヘッダーを設定してください。

ヘッダー必須説明
Authorization必須Bearer <token>形式の認証ヘッダー
Content-TypePOST時のみ必須application/jsonを指定する。異なる値の場合は415 unsupported_media_typeを返す

プロジェクトと環境の指定

操作対象のプロジェクトと環境は、URLパスのproject_idenvironment_idで指定します。

/projects/{project_id}/environments/{environment_id}

アクションの識別子

公開APIではアクションをIDで参照します。IDは管理画面で表示される識別子、またはコード管理でのdefineAction({ id: ... })で指定した文字列と同じです。アクション一覧・詳細のレスポンスに含まれるidを、そのまま実行時のaction_idに指定してください。

ページネーション

アクション一覧エンドポイント(GET /projects/{project_id}/environments/{environment_id}/actions)はカーソル形式のページネーションに対応しています。

パラメータ種別説明
limitクエリ1ページあたりの取得件数。1100の整数で、デフォルトは20
cursorクエリ前ページのレスポンスのnext_cursorを不透明な値としてそのまま指定する

レスポンスは以下のenvelope形式で返ります。次ページの取得情報はレスポンスボディのnext_cursorに含まれ、専用のヘッダーは付与されません。

{
  "data": [
    /* リソース配列 */
  ],
  "has_more": true,
  "next_cursor": "..."
}

has_morefalseの場合は次ページがなく、next_cursorは省略されます。

エラーレスポンス

エラー時のレスポンスはRFC 9457 Problem Details (opens in a new tab)形式(Content-Type: application/problem+json)で返ります。

{
  "type": "https://docs.basemachina.com/preview/public_api/#argument_invalid",
  "title": "Argument Invalid",
  "status": 422,
  "detail": "user_id は必須項目です",
  "instance": "/public/v1/projects/csi2hcc0iaejrqgivkfg/environments/9m4e2mr0ui3e8a215n4g/actions/send_email/executions",
  "code": "argument_invalid",
  "violations": [{ "field": "arguments.user_id", "reason": "required" }]
}

主なフィールドは以下の通りです。

フィールド説明
typeエラー種別を表すURI。エラーコードごとに固定
titleエラー種別の人間可読な短いタイトル
statusHTTPステータスコード
detailエラーの詳細メッセージ(API利用者向けの自然文)
instanceエラーが発生したリクエストのパス
codeエラー分類コード。詳細は下表「エラーコード一覧」を参照
violations引数バリデーション違反の詳細。fieldreasonの組で複数返る(codeargument_invalidの場合のみ)
datasourceデータソースの応答情報(HTTPステータス・本文の冒頭)。codedatasource_error、かつHTTP系上流のステータスを取得できた場合のみ
action_idエラーに関係するアクションのID。実行系エンドポイントで返ることがある
statementsSQL系アクションのステートメントごとの実行結果。SQL実行時のdatasource_errorで返ることがある

エラーコード一覧

codeはHTTPステータスごとに以下のいずれかが返ります。

ステータスcode主な発生条件
400bad_requestURLパスやリクエストの文法レベルの不正
401unauthorizedBearerトークン欠落・期限切れ・検証失敗
403forbidden対象プロジェクトやアクションへの権限不足、サービスアカウントから実行できない操作の呼び出しなど
404not_foundアクション・環境などのリソースが存在しない、または無効化されている
405method_not_allowed許可されていないHTTPメソッドの利用
409state_conflictアクションの状態不整合
413payload_too_largeリクエストボディのサイズ超過
415unsupported_media_typeContent-Typeapplication/json以外
422argument_invalid引数・クエリパラメーターのバリデーション違反、または公開APIから実行できないアクション種別(旧JavaScriptアクション・fileパラメーターを含む)
422javascript_action_errorJavaScriptサーバーアクションのコードが投げた業務エラー
422datasource_errorデータソースなど接続先のエラー。接続先のHTTPステータスを取得できた場合はdatasource.statusに格納される
500internal_errorgateway内部の不具合
503service_unavailableベースマキナ側の一時障害。Retry-Afterヘッダーに従ってリトライ可能

利用までの流れ

  1. ベースマキナの管理画面で、必要ならOIDC信頼ポリシーを設定する
  2. ローカルからはbm login、CI/CDからは外部OIDC ID Tokenを取得する
  3. プロジェクトIDと環境IDを確認し、URLパスのproject_idenvironment_idに指定する
  4. アクション一覧でアクションのIDを確認する
  5. アクション詳細で引数スキーマを取得し、必要な値を組み立てる
  6. アクション実行でアクションを呼び出す