API
CI やプログラムから、ファイルか ZIP を送って公開し、状態を取れます。送ったあとの流れ(検査、配信先との比較、転送)は、画面から置いたときと同じです。
認証
アカウントの画面の「API クライアントとトークン」でトークンを発行し、すべての要求に Authorization: Bearer <トークン> を付けます。トークンは発行したときに一度だけ表示され、このサービスには SHA-256 だけが残ります。トークンでは、発行したアカウントのサイトにだけ公開できます。
- 応答はすべて JSON です(エラーも)。トークンがない・違う・失効したときは
401、ほかのアカウントのサイトやデプロイは404です。 - 応答には
Cache-Control: private, no-storeとVary: Authorizationが付きます。 - クライアントごとに 1 分あたりの回数の上限があり、超えると
429とRetry-Afterを返します。
サイトの一覧
GET /api/v1/sites
{"data": [{"id": "…", "name": "corporate", "public_url": "https://example.jp/", "destination": {"name": "Example server", "provider": "sftp"}}]}
配信先は名前と種類だけを返します。ホスト・ユーザー・認証情報は返しません。
公開する
POST /api/v1/sites/{site}/deployments
Content-Type: multipart/form-data
| 項目 | 内容 |
|---|---|
file |
必須。1 ファイルか ZIP(100MB まで) |
kind |
file(1 ファイルとして置く)か archive(ZIP を展開する)。省くと、.zip は archive、それ以外は file |
path |
リモートのパス。file はファイルのパス(例:/docs/brochure.pdf。省くとルートに同じ名前)、archive は展開するフォルダ(省くとルート) |
confirm |
1 なら、配信先と比べたあと確認を待たずに公開します。省くと prepared で止まり、/confirm を待ちます |
curl -H "Authorization: Bearer $TOKEN" -H "Accept: application/json" \
-F file=@site.zip -F confirm=1 \
https://publisher.magichtml.dev/api/v1/sites/$SITE/deployments
受け付けると 202 とデプロイを返します。100MB に近いファイルは、アプリに届く前にサーバーが 413 で断ることがあります。転送は裏で進むので、GET /api/v1/deployments/{id} で状態を見てください。検査に通らないときは 422 で、errors.file に問題をすべて並べます。
デプロイの状態
GET /api/v1/deployments/{deployment}
GET /api/v1/sites/{site}/deployments
{"data": {
"id": "…", "site_id": "…", "number": 12, "kind": "archive", "path": "/",
"source": {"name": "site.zip", "size": 1234, "sha256": "…", "kept": true},
"status": "succeeded", "status_label": "公開済み", "automatic": true,
"counts": {"added": 3, "updated": 5, "deleted": 1, "unchanged": 40},
"message": null, "public_url": "https://example.jp/", "rollback_of": null,
"expires_at": null, "created_at": "…", "finished_at": "…",
"log": [{"at": "…", "message": "…"}]
}}
status |
意味 |
|---|---|
building |
受け付けた。比べる順番を待っている |
planning |
配信先の今のファイルと比べている |
prepared |
比べ終わった。/confirm を待っている(30 分で取り消し) |
queued・checking・uploading・writing |
公開している |
removing |
前の ZIP にあって今回はないファイルを削除している |
pending |
Cloudflare Pages が処理している |
succeeded |
公開した |
unknown |
結果を確かめられない。もう一度は送っていない。管理画面で配信先と照合する |
failed・cancelled |
失敗・取り消し。配信先には書き込んでいない(failed の理由は message) |
確認・取り消し
POST /api/v1/deployments/{deployment}/confirm
POST /api/v1/deployments/{deployment}/cancel
confirm は prepared のときだけ、cancel は転送を始める前(building・prepared・queued)だけできます。できないときは 409 です。
Cloudflare Pages
Cloudflare Pages は、デプロイごとにプロジェクト全体を公開します。そのため、ZIP はプロジェクト全体として公開します。1 ファイルを送ると、そのサイトがその配信先に最後に公開したすべてのファイルに、そのファイルを足して(置き換えて)公開します。ほかのファイルは消えません。最初の公開は ZIP で行ってください。