Compare commits

...

13 Commits

14 changed files with 996 additions and 4 deletions

View File

@ -0,0 +1,81 @@
# .gitea/workflows/class-txt-check.yml
name: Docs Precheck - CLASS.TXT.json Check
on:
pull_request:
types: [opened, reopened, synchronize, edited]
permissions:
contents: read
pull-requests: write
jobs:
class-txt-check:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Setup Python
uses: actions/setup-python@v5
with:
python-version: '3.12'
- name: Get changed CLASS.TXT.json files
id: changed-files
run: |
BASE_SHA="${{ gitea.event.pull_request.base.sha }}"
changed=$(git diff --name-only ${BASE_SHA}...HEAD | grep -E 'CLASS\.TXT\.json$' | tr '\n' ' ' || true)
echo "files=$changed" >> $GITHUB_OUTPUT
echo "CHANGED_FILES=$changed" >> $GITHUB_ENV
echo "Changed CLASS.TXT.json files: $changed"
- name: Run duplicate title check
id: class-check
run: |
python3 .gitea/workflows/helpers/class-txt-check.py
- name: Comment on PR with violations
if: failure() && steps.class-check.outcome == 'failure'
env:
GITEA_SERVER_URL: ${{ gitea.server_url }}
REPO: ${{ gitea.repository }}
PR_NUMBER: ${{ gitea.event.pull_request.number }}
TOKEN: ${{ gitea.token }}
run: |
set -euo pipefail
# Ensure URL starts with http
if [[ ! "${GITEA_SERVER_URL}" =~ ^https?:// ]]; then
GITEA_SERVER_URL="http://${GITEA_SERVER_URL}"
echo "Added http:// prefix to URL"
fi
# Generate comment message
MSG=$(python3 .gitea/workflows/helpers/class-comment.py)
echo "$MSG"
# Extract body from JSON
BODY=$(echo "$MSG" | python3 -c "import sys, json; print(json.load(sys.stdin)['body'])")
# Build the full URL
FULL_URL="${GITEA_SERVER_URL}/api/v1/repos/${REPO}/issues/${PR_NUMBER}/comments"
echo "Posting comment to: ${FULL_URL}"
# Comment on PR
curl -sS -X POST \
-H "Authorization: token ${TOKEN}" \
-H "Content-Type: application/json" \
"${FULL_URL}" \
-d "$(echo "$BODY" | python3 -c "import sys, json; print(json.dumps({'body': sys.stdin.read()}))")"
- name: Final status
if: always()
run: |
if [ -f violations.json ]; then
echo "::error::CLASS.TXT.json check failed. See previous step for details."
exit 1
fi

View File

@ -0,0 +1,84 @@
# .gitea/workflows/docs-precheck.yml
name: Docs Precheck - Underscore Check
on:
pull_request:
types: [opened, reopened, synchronize, edited]
permissions:
contents: read
pull-requests: write
jobs:
docs-precheck:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Setup Python
uses: actions/setup-python@v5
with:
python-version: '3.12'
- name: Install dependencies
run: pip install beautifulsoup4 lxml
- name: Get changed HTML files
id: changed-files
run: |
BASE_SHA="${{ gitea.event.pull_request.base.sha }}"
changed=$(git diff --name-only ${BASE_SHA}...HEAD | grep -E '\.(html|htm)$' | tr '\n' ' ' || true)
echo "files=$changed" >> $GITHUB_OUTPUT
echo "CHANGED_FILES=$changed" >> $GITHUB_ENV
echo "Changed HTML files: $changed"
- name: Run underscore check
id: underscore-check
run: |
python3 .gitea/workflows/helpers/underscore-check.py
- name: Comment on PR with violations
if: failure() && steps.underscore-check.outcome == 'failure'
env:
GITEA_SERVER_URL: ${{ gitea.server_url }}
REPO: ${{ gitea.repository }}
PR_NUMBER: ${{ gitea.event.pull_request.number }}
TOKEN: ${{ gitea.token }}
run: |
set -euo pipefail
# Ensure URL starts with http
if [[ ! "${GITEA_SERVER_URL}" =~ ^https?:// ]]; then
GITEA_SERVER_URL="http://${GITEA_SERVER_URL}"
echo "Added http:// prefix to URL"
fi
# Generate comment message
MSG=$(python3 .gitea/workflows/helpers/underscore-comment.py)
echo "$MSG"
# Extract body from JSON
BODY=$(echo "$MSG" | python3 -c "import sys, json; print(json.load(sys.stdin)['body'])")
# Build the full URL
FULL_URL="${GITEA_SERVER_URL}/api/v1/repos/${REPO}/issues/${PR_NUMBER}/comments"
echo "Posting comment to: ${FULL_URL}"
# Comment on PR
curl -sS -X POST \
-H "Authorization: token ${TOKEN}" \
-H "Content-Type: application/json" \
"${FULL_URL}" \
-d "$(echo "$BODY" | python3 -c "import sys, json; print(json.dumps({'body': sys.stdin.read()}))")"
- name: Final status
if: always()
run: |
if [ -f violations.json ]; then
echo "::error::Underscore check failed. See previous step for details."
exit 1
fi

View File

@ -0,0 +1,71 @@
#!/usr/bin/env python3
"""
Generate PR comment for CLASS.TXT.json duplicate title violations.
This script reads violations.json (created by class-txt-check.py) and generates
a formatted markdown comment to be posted on the PR. The comment includes:
- File path where violations were found
- Parent document title and code
- The duplicate title
- Document codes that share the duplicate title
Usage:
Run after class-txt-check.py fails. Reads violations.json and outputs JSON
with 'body' field containing the markdown comment text.
"""
import json
import sys
def main():
try:
with open("violations.json", "r") as f:
violations = json.load(f)
except Exception:
violations = []
if not violations:
print(json.dumps({"body": "No violations to report"}))
sys.exit(0)
# Group violations by file
by_file = {}
for v in violations:
key = v["file"]
if key not in by_file:
by_file[key] = []
by_file[key].append(v)
# Build message
lines = [
"❌ **Duplicate title detected in CLASS.TXT.json**",
"",
"Found child documents with duplicate titles under the same parent:",
"",
]
for filepath, file_violations in by_file.items():
lines.append(f"**{filepath}:**")
for v in file_violations:
parent_code = v["parent_code"]
parent_title = v["parent_title"]
duplicate_title = v["duplicate_title"]
codes = v["codes"]
lines.append(f" - Parent: `{parent_title}` (code: `{parent_code}`)")
lines.append(f" Duplicate title: `{duplicate_title}`")
for code in codes:
lines.append(f" - Document code: `{code}`")
lines.append("")
lines.append(
"**Please ensure all child documents under the same parent have unique titles.**"
)
message = "\n".join(lines)
print(json.dumps({"body": message}))
if __name__ == "__main__":
main()

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,63 @@
#!/usr/bin/env python3
"""
Generate PR comment for metadata registration check violations.
This script reads violations.json (created by metadata-check.py) and generates
a formatted markdown comment to be posted on the PR. The comment includes:
- HTML file path that was added but not registered
- Which metadata files it's missing from (CLASS.TXT.json, ALL_META.TXT.json)
- Whether the metadata files don't exist or the file is simply missing from them
Usage:
Run after metadata-check.py fails. Reads violations.json and outputs JSON
with 'body' field containing the markdown comment text.
"""
import json
import sys
def main():
try:
with open("violations.json", "r") as f:
violations = json.load(f)
except Exception:
violations = []
if not violations:
print(json.dumps({"body": "No violations to report"}))
sys.exit(0)
# Build message
lines = [
"❌ **HTML file not registered in metadata**",
"",
"The following HTML files were added but are not properly registered in the metadata files:",
"",
]
for v in violations:
html_file = v["file"]
missing_from = v["missing_from"]
lines.append(f"**{html_file}**")
for missing in missing_from:
# Check if it's a "file not found" case
if "(file not found)" in missing:
lines.append(
f" ❌ Missing from: `{missing.split(' (')[0]}` (metadata file does not exist)"
)
else:
lines.append(f" ❌ Missing from: `{missing}`")
lines.append("")
lines.append(
"**Please add the new HTML files to both `CLASS.TXT.json` and `ALL_META.TXT.json` in the same directory.**"
)
message = "\n".join(lines)
print(json.dumps({"body": message}))
if __name__ == "__main__":
main()

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,68 @@
#!/usr/bin/env python3
"""
Generate PR comment for underscore check violations.
This script reads violations.json (created by underscore-check.py) and generates
a formatted markdown comment to be posted on the PR. The comment includes:
- File path where violations were found
- Line number of each violation
- The offending word (ending with underscore)
- Context showing where the violation appears in the HTML
Usage:
Run after underscore-check.py fails. Reads violations.json and outputs JSON
with 'body' field containing the markdown comment text.
"""
import json
import sys
def main():
try:
with open("violations.json", "r") as f:
violations = json.load(f)
except Exception:
violations = []
if not violations:
print(json.dumps({"body": "No violations to report"}))
sys.exit(0)
# Group violations by file
by_file = {}
for v in violations:
key = v["file"]
if key not in by_file:
by_file[key] = []
by_file[key].append(v)
# Build message
lines = [
"❌ **Underscore check failed**",
"",
"Found words ending with underscore (not followed by alphanumeric characters):",
"",
]
for filepath, file_violations in by_file.items():
lines.append(f"**{filepath}:**")
for v in file_violations:
word = v["word"]
line_num = v["line"]
context = v["context"]
# Escape markdown special chars in context
context = context.replace("`", "\\`")
lines.append(f" - Line {line_num}: `{word}` in context: `{context}`")
lines.append("")
lines.append(
"**Please fix these issues as soon as possible.** Words should not end with an underscore unless followed by alphanumeric characters (A-Za-z0-9)."
)
message = "\n".join(lines)
print(json.dumps({"body": message}))
if __name__ == "__main__":
main()

View File

@ -0,0 +1,81 @@
# .gitea/workflows/metadata-check.yml
name: Docs Precheck - Metadata Registration Check
on:
pull_request:
types: [opened, reopened, synchronize, edited]
permissions:
contents: read
pull-requests: write
jobs:
metadata-check:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Setup Python
uses: actions/setup-python@v5
with:
python-version: '3.12'
- name: Get added HTML files
id: added-files
run: |
BASE_SHA="${{ gitea.event.pull_request.base.sha }}"
added=$(git diff --name-status ${BASE_SHA}...HEAD | grep "^A" | awk '{print $2}' | grep -E '\.html$' | tr '\n' ' ' || true)
echo "files=$added" >> $GITHUB_OUTPUT
echo "ADDED_FILES=$added" >> $GITHUB_ENV
echo "Added HTML files: $added"
- name: Run metadata registration check
id: metadata-check
run: |
python3 .gitea/workflows/helpers/metadata-check.py
- name: Comment on PR with violations
if: failure() && steps.metadata-check.outcome == 'failure'
env:
GITEA_SERVER_URL: ${{ gitea.server_url }}
REPO: ${{ gitea.repository }}
PR_NUMBER: ${{ gitea.event.pull_request.number }}
TOKEN: ${{ gitea.token }}
run: |
set -euo pipefail
# Ensure URL starts with http
if [[ ! "${GITEA_SERVER_URL}" =~ ^https?:// ]]; then
GITEA_SERVER_URL="http://${GITEA_SERVER_URL}"
echo "Added http:// prefix to URL"
fi
# Generate comment message
MSG=$(python3 .gitea/workflows/helpers/metadata-comment.py)
echo "$MSG"
# Extract body from JSON
BODY=$(echo "$MSG" | python3 -c "import sys, json; print(json.load(sys.stdin)['body'])")
# Build the full URL
FULL_URL="${GITEA_SERVER_URL}/api/v1/repos/${REPO}/issues/${PR_NUMBER}/comments"
echo "Posting comment to: ${FULL_URL}"
# Comment on PR
curl -sS -X POST \
-H "Authorization: token ${TOKEN}" \
-H "Content-Type: application/json" \
"${FULL_URL}" \
-d "$(echo "$BODY" | python3 -c "import sys, json; print(json.dumps({'body': sys.stdin.read()}))")"
- name: Final status
if: always()
run: |
if [ -f violations.json ]; then
echo "::error::Metadata registration check failed. See previous step for details."
exit 1
fi

View File

@ -515,7 +515,7 @@
{ {
"desc":"Meaning: Request throttling policy.Scope of effect: Operation Object (2.0)/Operation Object (3.0)Example:", "desc":"Meaning: Request throttling policy.Scope of effect: Operation Object (2.0)/Operation Object (3.0)Example:",
"product_code":"apig", "product_code":"apig",
"title":"x-apigateway-ratelimit", "title":"x-apigateway-ratelimits",
"uri":"apig_03_0098.html", "uri":"apig_03_0098.html",
"doc_type":"usermanual", "doc_type":"usermanual",
"p_code":"43", "p_code":"43",

View File

@ -0,0 +1,20 @@
<a name="apig_02_0001"></a><a name="apig_02_0001"></a>
<h1 class="topictitle1">Process Flow</h1>
<div id="body8662426"><p id="apig_02_0001__en-us_topic_0000001128377382_en-us_topic_0080101676_p8060118">The following figure shows the process of exposing an API.</p>
<p id="apig_02_0001__en-us_topic_0000001128377382_p18543548134311"><span><img id="apig_02_0001__en-us_topic_0000001128377382_image14730133294617" src="en-us_image_0000001829896089.png"></span></p>
<ol id="apig_02_0001__en-us_topic_0000001128377382_en-us_topic_0080101676_ol134712352910"><li id="apig_02_0001__en-us_topic_0000001128377382_li035223651911">Creating a Gateway<p id="apig_02_0001__en-us_topic_0000001128377382_p08351451237"><a name="apig_02_0001__en-us_topic_0000001128377382_li035223651911"></a><a name="en-us_topic_0000001128377382_li035223651911"></a><a href="apig_03_0037.html">Create a dedicated gateway.</a></p>
</li><li id="apig_02_0001__en-us_topic_0000001128377382_en-us_topic_0080101676_li1934718315294"><a href="apig-ug-180307003.html">Creating an API Group</a><p id="apig_02_0001__en-us_topic_0000001128377382_en-us_topic_0080101676_p52731551293">An API group facilitates management of APIs used for the same service. Create an API group and then create APIs.</p>
</li><li id="apig_02_0001__en-us_topic_0000001128377382_en-us_topic_0080101676_li1239042116208"><a href="apig-ug-190419107.html">Binding a Domain Name</a><p id="apig_02_0001__en-us_topic_0000001128377382_en-us_topic_0080101676_p1939022115203">Before making the API available for users to access, bind an independent domain name (custom domain name) to the group to which the API belongs. Then API callers can use these domain names to call the API.</p>
</li><li id="apig_02_0001__en-us_topic_0000001128377382_en-us_topic_0080101676_li034715392911"><a href="apig_0080101678.html">Creating an API</a><p id="apig_02_0001__en-us_topic_0000001128377382_en-us_topic_0080101676_p1396201052917">When creating an API, configure the frontend and backend request paths, parameters, and protocols.</p>
</li><li id="apig_02_0001__en-us_topic_0000001128377382_en-us_topic_0080101676_li1447643191811"><a href="apig-ug-190419108.html">Debugging an API</a><p id="apig_02_0001__en-us_topic_0000001128377382_en-us_topic_0080101676_p18728145518188">Debug the API to check whether it works normally.</p>
</li><li id="apig_02_0001__en-us_topic_0000001128377382_en-us_topic_0080101676_li23471332910"><a href="apig-ug-180307004.html">(Optional) Creating an Environment</a><p id="apig_02_0001__en-us_topic_0000001128377382_en-us_topic_0080101676_p10254142615218">An API can be called in different scenarios, such as the production environment (RELEASE) or other custom environments. RELEASE is the default environment defined in APIG.</p>
</li><li id="apig_02_0001__en-us_topic_0000001128377382_en-us_topic_0080101676_li134733102913"><a href="apig-ug-180307005.html">Publishing an API</a><p id="apig_02_0001__en-us_topic_0000001128377382_en-us_topic_0080101676_p780511012155">Publish the API so that it can be called.</p>
</li></ol>
</div>
<div>
<div class="familylinks">
<div class="parentlink"><strong>Parent topic:</strong> <a href="apig-ug-180307001.html">Opening APIs</a></div>
</div>
</div>

View File

@ -41,7 +41,7 @@
</table> </table>
</div> </div>
</p></li><li id="apig_03_0006__en-us_topic_0000001221574215_en-us_topic_0103545823_li369614061512"><span>Click <strong id="apig_03_0006__en-us_topic_0000001221574215_en-us_topic_0103545823_b1151018810305">OK</strong>.</span><p><p id="apig_03_0006__en-us_topic_0000001221574215_en-us_topic_0103545823_p643617378212">If the domain name is no longer needed, click <strong id="apig_03_0006__en-us_topic_0000001221574215_en-us_topic_0103545823_b791211518302">Unbind Domain Name</strong> to unbind it from the API group.</p> </p></li><li id="apig_03_0006__en-us_topic_0000001221574215_en-us_topic_0103545823_li369614061512"><span>Click <strong id="apig_03_0006__en-us_topic_0000001221574215_en-us_topic_0103545823_b1151018810305">OK</strong>.</span><p><p id="apig_03_0006__en-us_topic_0000001221574215_en-us_topic_0103545823_p643617378212">If the domain name is no longer needed, click <strong id="apig_03_0006__en-us_topic_0000001221574215_en-us_topic_0103545823_b791211518302">Unbind Domain Name</strong> to unbind it from the API group.</p>
</p></li><li id="apig_03_0006__en-us_topic_0000001221574215_en-us_topic_0103545823_li93451675213"><span>(Optional) If the API group contains HTTPS APIs, bind an SSL certificate to the independent domain name.</span><p><ol type="a" id="apig_03_0006__en-us_topic_0000001221574215_ol1799111542324"><li id="apig_03_0006__en-us_topic_0000001221574215_li13991165415321">In the row that contains the domain name, click <strong id="apig_03_0006__en-us_topic_0000001221574215_b854515393379">Select SSL Certificate</strong>.</li></ol><ol type="a" start="2" id="apig_03_0006__en-us_topic_0000001221574215_ol2992145419328"><li id="apig_03_0006__en-us_topic_0000001221574215_li2992135493218">Select an SSL certificate and click <strong id="apig_03_0006__en-us_topic_0000001221574215_b13711142203720">OK</strong>.<ul id="apig_03_0006__en-us_topic_0000001221574215_ul867615616168"><li id="apig_03_0006__en-us_topic_0000001221574215_li20676175641611">If a CA certificate has been uploaded for the SSL certificate, you can enable client authentication (HTTPS two-way authentication). <strong id="apig_03_0006__en-us_topic_0000001221574215_b28742914013">Enabling or disabling client authentication will affect the existing services. Exercise caution when performing this operation.</strong></li><li id="apig_03_0006__en-us_topic_0000001221574215_li14676105617167">If no SSL certificate is available, click <strong id="apig_03_0006__en-us_topic_0000001221574215_b11101651114714">Create SSL Certificate</strong> to create one. For details, see <a href="apig_03_0055.html#apig_03_0055">SSL Certificates</a>.</li></ul> </p></li><li id="apig_03_0006__en-us_topic_0000001221574215_en-us_topic_0103545823_li93451675213"><span>(Optional) If the API group contains HTTPS APIs, bind an SSL certificate to the independent domain name test_.</span><p><ol type="a" id="apig_03_0006__en-us_topic_0000001221574215_ol1799111542324"><li id="apig_03_0006__en-us_topic_0000001221574215_li13991165415321">In the row that contains the domain name, click <strong id="apig_03_0006__en-us_topic_0000001221574215_b854515393379">Select SSL Certificate</strong>.</li></ol><ol type="a" start="2" id="apig_03_0006__en-us_topic_0000001221574215_ol2992145419328"><li id="apig_03_0006__en-us_topic_0000001221574215_li2992135493218">Select an SSL certificate and click <strong id="apig_03_0006__en-us_topic_0000001221574215_b13711142203720">OK</strong>.<ul id="apig_03_0006__en-us_topic_0000001221574215_ul867615616168"><li id="apig_03_0006__en-us_topic_0000001221574215_li20676175641611">If a CA certificate has been uploaded for the SSL certificate, you can enable client authentication (HTTPS two-way authentication). <strong id="apig_03_0006__en-us_topic_0000001221574215_b28742914013">Enabling or disabling client authentication will affect the existing services. Exercise caution when performing this operation.</strong></li><li id="apig_03_0006__en-us_topic_0000001221574215_li14676105617167">If no SSL certificate is available, click <strong id="apig_03_0006__en-us_topic_0000001221574215_b11101651114714">Create SSL Certificate</strong> to create one. For details, see <a href="apig_03_0055.html#apig_03_0055">SSL Certificates</a>.</li></ul>
</li></ol> </li></ol>
</p></li></ol> </p></li></ol>
</div> </div>

View File

@ -28,7 +28,7 @@
</li> </li>
<li class="ulchildlink"><strong><a href="apig_03_0055.html">SSL Certificates</a></strong><br> <li class="ulchildlink"><strong><a href="apig_03_0055.html">SSL Certificates</a></strong><br>
</li> </li>
<li class="ulchildlink"><strong><a href="apig_03_0040.html">Load Balance Channels</a></strong><br> <li class="ulchildlink test_policy test_"><strong><a href="apig_03_0040.html">Load Balance Channels</a></strong><br>
</li> </li>
<li class="ulchildlink"><strong><a href="apig_03_0041.html">Managing Environments</a></strong><br> <li class="ulchildlink"><strong><a href="apig_03_0041.html">Managing Environments</a></strong><br>
</li> </li>

View File

@ -47,7 +47,7 @@
</li></ul> </li></ul>
</p></li><li id="apig_03_0019__en-us_topic_0000001221774151_en-us_topic_0000001151883501_li19109142924410"><span>Click <strong id="apig_03_0019__en-us_topic_0000001221774151_b1275410503448">OK</strong>.</span><p><ul id="apig_03_0019__en-us_topic_0000001221774151_ul18334414115613"><li id="apig_03_0019__en-us_topic_0000001221774151_li133351014125618">To clone this policy, click <strong id="apig_03_0019__en-us_topic_0000001221774151_b995111582546">Clone</strong> in the <strong id="apig_03_0019__en-us_topic_0000001221774151_b204471192551">Operation</strong> column.<div class="note" id="apig_03_0019__en-us_topic_0000001221774151_note165441445125319"><img src="public_sys-resources/note_3.0-en-us.png"><span class="notetitle"> </span><div class="notebody"><ul id="apig_03_0019__en-us_topic_0000001221774151_ul133541495612"><li id="apig_03_0019__en-us_topic_0000001221774151_li2335181412567">The name of a cloned policy cannot be the same as that of any existing policy.</li><li id="apig_03_0019__en-us_topic_0000001221774151_li1533581455617"><strong id="apig_03_0019__en-us_topic_0000001221774151_b033415153572">Request throttling</strong> and <strong id="apig_03_0019__en-us_topic_0000001221774151_b391031715576">signature key</strong> policies cannot be cloned.</li></ul> </p></li><li id="apig_03_0019__en-us_topic_0000001221774151_en-us_topic_0000001151883501_li19109142924410"><span>Click <strong id="apig_03_0019__en-us_topic_0000001221774151_b1275410503448">OK</strong>.</span><p><ul id="apig_03_0019__en-us_topic_0000001221774151_ul18334414115613"><li id="apig_03_0019__en-us_topic_0000001221774151_li133351014125618">To clone this policy, click <strong id="apig_03_0019__en-us_topic_0000001221774151_b995111582546">Clone</strong> in the <strong id="apig_03_0019__en-us_topic_0000001221774151_b204471192551">Operation</strong> column.<div class="note" id="apig_03_0019__en-us_topic_0000001221774151_note165441445125319"><img src="public_sys-resources/note_3.0-en-us.png"><span class="notetitle"> </span><div class="notebody"><ul id="apig_03_0019__en-us_topic_0000001221774151_ul133541495612"><li id="apig_03_0019__en-us_topic_0000001221774151_li2335181412567">The name of a cloned policy cannot be the same as that of any existing policy.</li><li id="apig_03_0019__en-us_topic_0000001221774151_li1533581455617"><strong id="apig_03_0019__en-us_topic_0000001221774151_b033415153572">Request throttling</strong> and <strong id="apig_03_0019__en-us_topic_0000001221774151_b391031715576">signature key</strong> policies cannot be cloned.</li></ul>
</div></div> </div></div>
</li><li id="apig_03_0019__en-us_topic_0000001221774151_li933561485617">After the policy is created, perform the operations described in <a href="#apig_03_0019__en-us_topic_0000001221774151_en-us_topic_0000001151883501_section020918935713">Binding the Policy to APIs</a> for the policy to take effect for the API.</li></ul> </li><li id="apig_03_0019__en-us_topic_0000001221774151_li933561485617">After the policy is created, perform the operations described in test_policy <a href="#apig_03_0019__en-us_topic_0000001221774151_en-us_topic_0000001151883501_section020918935713">Binding the Policy to APIs</a> for the policy to take effect for the API.</li></ul>
</p></li></ol> </p></li></ol>
</div> </div>
<div class="section" id="apig_03_0019__en-us_topic_0000001221774151_en-us_topic_0000001151883501_section020918935713"><a name="apig_03_0019__en-us_topic_0000001221774151_en-us_topic_0000001151883501_section020918935713"></a><a name="en-us_topic_0000001221774151_en-us_topic_0000001151883501_section020918935713"></a><h4 class="sectiontitle">Binding the Policy to APIs</h4><ol id="apig_03_0019__en-us_topic_0000001221774151_en-us_topic_0000001151883501_ol1356962619589"><li id="apig_03_0019__en-us_topic_0000001221774151_li53566433142"><span>Click a policy name to go to the policy details page.</span></li><li id="apig_03_0019__en-us_topic_0000001221774151_li1350414233155"><span>In the <strong id="apig_03_0019__en-us_topic_0000001221774151_b253612484616">APIs</strong> area, select an environment and click <strong id="apig_03_0019__en-us_topic_0000001221774151_b17559174011464">Select APIs</strong>.</span></li><li id="apig_03_0019__en-us_topic_0000001221774151_li1218216522159"><span>Select the API group, environment, and required APIs.</span></li><li id="apig_03_0019__en-us_topic_0000001221774151_li131891433203"><span>Click <strong id="apig_03_0019__en-us_topic_0000001221774151_b914315914475">OK</strong>.</span><p><ul id="apig_03_0019__en-us_topic_0000001221774151_ul514320193525"><li id="apig_03_0019__en-us_topic_0000001221774151_li16143111911526">If an API no longer needs this policy, click <strong id="apig_03_0019__en-us_topic_0000001221774151_b4321503488">Unbind</strong> in the row that contains the API.</li><li id="apig_03_0019__en-us_topic_0000001221774151_li191431319145211">If there are multiple APIs that no longer need this policy, select these APIs, and click <strong id="apig_03_0019__en-us_topic_0000001221774151_b11659101474819">Unbind</strong> above the API list. You can unbind a policy from a maximum of 1000 APIs at a time.</li></ul> <div class="section" id="apig_03_0019__en-us_topic_0000001221774151_en-us_topic_0000001151883501_section020918935713"><a name="apig_03_0019__en-us_topic_0000001221774151_en-us_topic_0000001151883501_section020918935713"></a><a name="en-us_topic_0000001221774151_en-us_topic_0000001151883501_section020918935713"></a><h4 class="sectiontitle">Binding the Policy to APIs</h4><ol id="apig_03_0019__en-us_topic_0000001221774151_en-us_topic_0000001151883501_ol1356962619589"><li id="apig_03_0019__en-us_topic_0000001221774151_li53566433142"><span>Click a policy name to go to the policy details page.</span></li><li id="apig_03_0019__en-us_topic_0000001221774151_li1350414233155"><span>In the <strong id="apig_03_0019__en-us_topic_0000001221774151_b253612484616">APIs</strong> area, select an environment and click <strong id="apig_03_0019__en-us_topic_0000001221774151_b17559174011464">Select APIs</strong>.</span></li><li id="apig_03_0019__en-us_topic_0000001221774151_li1218216522159"><span>Select the API group, environment, and required APIs.</span></li><li id="apig_03_0019__en-us_topic_0000001221774151_li131891433203"><span>Click <strong id="apig_03_0019__en-us_topic_0000001221774151_b914315914475">OK</strong>.</span><p><ul id="apig_03_0019__en-us_topic_0000001221774151_ul514320193525"><li id="apig_03_0019__en-us_topic_0000001221774151_li16143111911526">If an API no longer needs this policy, click <strong id="apig_03_0019__en-us_topic_0000001221774151_b4321503488">Unbind</strong> in the row that contains the API.</li><li id="apig_03_0019__en-us_topic_0000001221774151_li191431319145211">If there are multiple APIs that no longer need this policy, select these APIs, and click <strong id="apig_03_0019__en-us_topic_0000001221774151_b11659101474819">Unbind</strong> above the API list. You can unbind a policy from a maximum of 1000 APIs at a time.</li></ul>