cURLコマンドのガイドライン
明確さのために、APIリファレンスドキュメントのように長いパラメータ名を使用してください:
--header(-Hの代わりに)--request(必要な場合、-Xの代わりに)--data(-dの代わりに)
--urlパラメータは、cURLの主要なパラメータであるため、使用する必要はありません。また、URLは?文字を含む場合を除いて、二重引用符("")で囲む必要はありません(つまり、クエリ文字列を含む場合)。
リクエストまたはレスポンスボディ(リクエスト/レスポンスに含まれる追加データ)をインデントするには、2つのスペースを使用してください。
ボディコンテンツを含むリクエストの場合、ボディ部分に到達したときからインデントを開始します(このページの例では--dataの後の行)。これは、URL、任意のヘッダー、および--dataパラメータを含む行はインデントしないべきであることを意味します。
ボディを含まないリクエストもインデントする必要はなく、ボディを含むリクエストと一貫性を持たせるべきです。
jq ↗は、すべての人がインストールしているわけではない別のツールです。cURLの例には、例の一部としてjqを通じたレスポンスフォーマットを含めるべきではありません。
このツールの使用を提案する必要がある場合は、このツールに言及しているAPI呼び出しを行うページへのリンクを追加できます。cURLの例の近くでjqに関する既存のコンテンツを繰り返さないでください。
- cURLコマンドでタイポグラフィックまたはスマートクォートを使用しないようにしてください。そうしないと、コマンドが失敗します。
- URL内のプレースホルダーは、APIドキュメントと同じ形式に従う必要があります:
{zone_id} - リクエストボディ内のプレースホルダー(つまり、
POST/PUT/PATCHリクエストに含まれるデータ)は、この形式を使用する必要があります:<RULE_ID>
同じプレースホルダー名は同じ値に対応する必要があります。異なるID値には異なるプレースホルダー名を使用してください。リクエストの値と一致する場合、レスポンス内で同じリクエストプレースホルダーを使用できます。
Email + APIキー認証を使用する場合、リクエストに2つの必要なHTTPヘッダーを追加するために、cURLコマンドに次の引数を含めてください:
--header "X-Auth-Email: <EMAIL>" \--header "X-Auth-Key: <API_KEY>" \APIトークン(推奨される認証方法)を使用する場合、リクエストに必要なHTTPヘッダーを追加するために、cURLコマンドに次の引数を含めてください:
--header "Authorization: Bearer <API_TOKEN>" \GETリクエストの場合、リクエストにボディが含まれない場合は、--request GETコマンドライン引数を含めないでください。これはデフォルトであり、GET/POSTリクエストには推奨されません:
curl {full_url_with_placeholders} \--header "Authorization: Bearer <API_TOKEN>"curl https://api.cloudflare.com/client/v4/zones/{zone_id}/firewall/rules \--header "Authorization: Bearer <API_TOKEN>"curl --request DELETE \{full_url_with_placeholders} \--header "Authorization: Bearer <API_TOKEN>"ボディを含まないリクエストには構文ハイライトは必要ありませんが、複数の区切られた文字列を強調表示するためにbash構文ハイライトを使用します。
リクエストにボディが含まれる場合は、Content-Typeヘッダーを含める必要があります。JSONコンテンツを含むリクエストの場合、ヘッダーはContent-Type: application/jsonである必要があります。
このヘッダーは、認証ヘッダーの後に表示されるべきです。
ボディを含むPOSTリクエストの場合、リクエストにボディが含まれるときはデフォルトであるため、--request POSTコマンドライン引数を含めないでください。
curl {full_url_with_placeholders} \--header "Authorization: Bearer <API_TOKEN>" \--header "Content-Type: application/json" \--data '({|[) (...JSONコンテンツ、2スペースのインデントを使用して整形...)(}|])'curl https://api.cloudflare.com/client/v4/zones/{zone_id}/firewall/rules \--header "Authorization: Bearer <API_TOKEN>" \--header "Content-Type: application/json" \--data '[ { "filter": { "id": "<FILTER_ID>" }, "action": "allow", "description": "オフィスからのログインに挑戦しない" }]'curl --request (PUT/PATCH) \{full_url_with_placeholders} \--header "Authorization: Bearer <API_TOKEN>" \--header "Content-Type: application/json" \--data '({|[) (...JSONコンテンツ、2スペースのインデントを使用して整形...)(}|])'JSONペイロード(--dataコマンドライン引数)は、エスケープが少なくて済むため、二重引用符の代わりに単一引用符(')で囲む必要があります。
ボディ内の単一引用符をエスケープする推奨方法は次のとおりです(ユーザーがbashのようなターミナルでコマンドを実行することを前提としています):
- 単一引用符
'を'\''に置き換えます。
これは「文字列を閉じ、エスケープされた単一引用符を追加し、再び文字列を開始する」という意味です。
curl https://api.cloudflare.com/api/v4/zones/{zone_id}/page_shield/policies \--header "Authorization: Bearer <API_TOKEN>" \--header "Content-Type: application/json" \--data '{ "value": "script-src myapp.example.com cdnjs.cloudflare.com https://www.google-analytics.com/analytics.js '\''self'\''"}'ボディなしのPOSTリクエストがある場合、cURLコマンドに--request POST引数を明示的に追加する必要があります。
curl --request POST \{full_url_with_placeholders} \--header "Authorization: Bearer <API_TOKEN>"JSONボディを含む例リクエストのコードブロックは、ボディなしの例リクエストと同様にbash構文を使用する必要があります。
curl https://api.cloudflare.com/api/v4/zones/{zone_id}/page_shield/policies \--header "Authorization: Bearer <API_TOKEN>" \--header "Content-Type: application/json" \--data '{ "description": "ログモードでの最初のポリシー", "action": "log", "expression": "http.host eq myapp.example.com", "enabled": "true", "value": "script-src myapp.example.com cdnjs.cloudflare.com https://www.google-analytics.com/analytics.js '\''self'\''"}'完全なレスポンス(空のエラーおよびメッセージ配列が存在する場合も含む)をjson構文ハイライトを使用して含めてください。
レスポンスは、オブジェクト({ ... })またはリスト([ ... ])で始まります。最初の文字は独自の行に表示されるべきであり、最後の文字も同様です。
({|[) (...JSONコンテンツ、2スペースのインデントを使用して整形...)(}|])- 前のコマンドを使用して取得したIDがある場合、またはその正確な値が現在のコンテキストで重要でない場合は、IDの代わりにプレースホルダー(例えば、
<RULE_ID>)を使用してください。同じプレースホルダー名は同じ値に対応する必要があります。異なるID値には異なるプレースホルダー名を使用してください。 - レスポンスボディの最も関連性の高い部分を含むレスポンスの抜粋やスニペットは、全体のレスポンスに対応しないことを明記する必要があります。
{ "result": { "id": "<RULE_ID>", "paused": false, "description": "オフィスからのログインに挑戦しない", "action": "allow", "priority": null, "filter": { "id": "<FILTER_ID>", "expression": "ip.src in {2400:cb00::/32 2803:f800::/32 2c0f:f248::/32 2a06:98c0::/29} and (http.request.uri.path ~ \"^.*/wp-login.php$\" or http.request.uri.path ~ \"^.*/xmlrpc.php$\")", "paused": false, "description": "オフィスからのログイン" } }, "success": true, "errors": [], "messages": []}