https://developers.cloudflare.com/api/operations/zone-purge

どうやら、Free, ProプランからはPurge All Cached ContentPurge Cached Content by URLしか使えないっぽい。 手元では少なくともディレクトリ単位での削除は動作しなかった。

つまり、

{"files": ["http://www.example.com"]}
としたとき、エッジキャッシュから削除されるのはhttp://www.example.comのコンテンツだけであり、http://www.example.com/css/styles.cssは削除されない。

ここでややこしいのが、https://developers.cloudflare.com/cache/how-to/purge-cache/を見るとFree, Pro, Bussinessプランでもprefix削除できそうな気がするが、実際には単一のファイルを指定するか、ゾーン全体を消すしかないようだ。

Webコンソールから見ても、URL: Purges assets in the Cloudflare cache that match the URL(s) exactlyと書いてあるので、完全一致のものしか消せないのだと思う。自分はProプランだがURL以外はグレーアウトしている。

まとめると以下のような対応付けだろうか?(間違っているかもしれない)

https://developers.cloudflare.com/api/operations/zone-purge#purge-all-cached-content https://developers.cloudflare.com/cache/how-to/purge-cache/ Supported Plan
Purge All Cached Content Purge everything Free, Pro, Bussiness
Purge Cached Content by URL Purge by single-file Free, Pro, Bussiness
Purge Cached Content by Tag, Host or Prefix Purge cache by cache-tags Enterprise
Purge Cached Content by Tag, Host or Prefix Purge cache by hostname Enterprise
Purge Cached Content by Tag, Host or Prefix Purge cache by prefix(URL) Enterprise

とりあえず、Purge everythingの例を示す。

環境変数は.envファイルに入れる。

#!/bin/bash
set -euxo pipefail

source .env

curl "https://api.cloudflare.com/client/v4/zones/${ZONE_ID}/purge_cache" \
--header "Authorization: Bearer ${CLOUDFLARE_API_TOKEN}" \
--header "Content-Type: application/json" \
--data '{"purge_everything": true}'

間違っていたら教えてください。