Ana içeriğe geç

Update Client Route

Endpoint

PATCH /apiops/projects/{projectName}/apiProxies/{apiProxyName}/settings/client-route/

Authentication

Requires a Personal API Access Token.

Authorization: Bearer YOUR_TOKEN

Request

Headers

HeaderValueRequired
AuthorizationBearer {token}Yes
Content-Typeapplication/jsonYes

Path Parameters

ParameterTypeRequiredDescription
projectNamestringYesProject name
apiProxyNamestringYesAPI Proxy name

Request Body

Full JSON Body Example - Path-Based Routing

{
"clientRoute": {
"relativePathList": [
"/api/v1/users",
"/api/v1/products"
],
"methodList": ["GET", "POST", "PUT", "DELETE"],
"hostList": null,
"headerList": null,
"bufferRequest": true,
"bufferResponse": true
},
"deploy": false,
"deployTargetEnvironmentNameList": []
}

Full JSON Body Example - Host-Based Routing

{
"clientRoute": {
"relativePathList": null,
"methodList": ["GET", "POST"],
"hostList": [
"api.example.com",
"api-staging.example.com"
],
"headerList": null,
"bufferRequest": true,
"bufferResponse": true
},
"deploy": false,
"deployTargetEnvironmentNameList": []
}

Full JSON Body Example - Header-Based Routing

{
"clientRoute": {
"relativePathList": null,
"methodList": ["GET", "POST"],
"hostList": null,
"headerList": [
{
"name": "X-API-Version",
"value": "v1"
},
{
"name": "X-Client-Type",
"value": "mobile"
}
],
"bufferRequest": true,
"bufferResponse": true
},
"deploy": false,
"deployTargetEnvironmentNameList": []
}

Full JSON Body Example - Combined Routing

{
"clientRoute": {
"relativePathList": [
"/api/v1/users",
"/api/v1/products"
],
"methodList": ["GET", "POST", "PUT"],
"hostList": [
"api.example.com"
],
"headerList": [
{
"name": "X-API-Version",
"value": "v1"
}
],
"bufferRequest": true,
"bufferResponse": true
},
"deploy": false,
"deployTargetEnvironmentNameList": []
}

Request Body Fields

FieldTypeRequiredDefaultDescription
clientRouteobjectYes-Client route configuration object (see fields below)
deploybooleanNofalseIf true, deploy the API proxy after saving changes
deployTargetEnvironmentNameListarray[string]No-List of environment names to deploy to (required when deploy=true)

clientRoute Fields

FieldTypeRequiredDefaultDescription
relativePathListarray[string]NonullList of relative paths to match. Paths must be at least 2 characters long
methodListarray[string]NonullList of HTTP methods to match. See EnumHttpRequestMethod
hostListarray[string]NonullList of host names to match
headerListarray[object]NonullList of headers to match. See Header Object
bufferRequestbooleanNotrueBuffer request body (enables request body access in policies)
bufferResponsebooleanNotrueBuffer response body (enables response body access in policies)

EnumHttpRequestMethod (methodList)

  • GET - HTTP GET method
  • POST - HTTP POST method
  • PUT - HTTP PUT method
  • HEAD - HTTP HEAD method
  • OPTIONS - HTTP OPTIONS method
  • DELETE - HTTP DELETE method
  • PATCH - HTTP PATCH method
  • TRACE - HTTP TRACE method
  • ALL - All HTTP methods

Header Object (headerList)

FieldTypeRequiredDescription
namestringYesHeader name (case-insensitive)
valuestringYesHeader value to match

Notes

  • At least one of relativePathList, methodList, hostList, or headerList must be provided
  • If relativePathList is provided, all paths must be at least 2 characters long
  • Route matching is done using AND logic: all specified conditions must match
  • bufferRequest and bufferResponse control whether request/response bodies are buffered in memory
  • Buffering enables policies to access and modify request/response bodies
  • Disabling buffering improves performance but limits policy capabilities

Response

Success Response (200 OK)

{
"success": true
}

When deploy=true is specified:

{
"success": true,
"deploymentResult": {
"deployed": true,
"deployedEnvironments": ["Production", "Staging"],
"failedEnvironments": []
}
}

Response Fields

FieldTypeDescription
successbooleanIndicates if the request was successful
deploymentResultobjectDeployment result (only present when deploy=true)
deploymentResult.deployedbooleanWhether deployment was successful
deploymentResult.deployedEnvironmentsarray[string]List of environments where deployment succeeded
deploymentResult.failedEnvironmentsarray[string]List of environments where deployment failed

Error Response (400 Bad Request)

{
"error": "bad_request",
"error_description": "Client route must have at least one valid route configuration"
}

Common Causes

  • All route lists are empty or null
  • Relative paths are less than 2 characters
  • Invalid HTTP method values
  • Invalid header format

Error Response (401 Unauthorized)

{
"error": "unauthorized_client",
"error_description": "Invalid token"
}

Error Response (404 Not Found)

{
"error": "not_found",
"error_description": "ApiProxy (name: MyAPI) was not found!"
}

cURL Example

Example 1: Path-Based Routing

curl -X PATCH \
"https://demo.apinizer.com/apiops/projects/MyProject/apiProxies/MyAPI/settings/client-route/" \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"clientRoute": {
"relativePathList": [
"/api/v1/users",
"/api/v1/products"
],
"methodList": ["GET", "POST", "PUT", "DELETE"],
"bufferRequest": true,
"bufferResponse": true
},
"deploy": false,
"deployTargetEnvironmentNameList": []
}'

Example 2: Host-Based Routing

curl -X PATCH \
"https://demo.apinizer.com/apiops/projects/MyProject/apiProxies/MyAPI/settings/client-route/" \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"clientRoute": {
"hostList": [
"api.example.com",
"api-staging.example.com"
],
"methodList": ["GET", "POST"],
"bufferRequest": true,
"bufferResponse": true
},
"deploy": false,
"deployTargetEnvironmentNameList": []
}'

Example 3: Header-Based Routing

curl -X PATCH \
"https://demo.apinizer.com/apiops/projects/MyProject/apiProxies/MyAPI/settings/client-route/" \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"clientRoute": {
"headerList": [
{
"name": "X-API-Version",
"value": "v1"
},
{
"name": "X-Client-Type",
"value": "mobile"
}
],
"methodList": ["GET", "POST"],
"bufferRequest": true,
"bufferResponse": true
},
"deploy": false,
"deployTargetEnvironmentNameList": []
}'

Example 4: Combined Routing

curl -X PATCH \
"https://demo.apinizer.com/apiops/projects/MyProject/apiProxies/MyAPI/settings/client-route/" \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"clientRoute": {
"relativePathList": [
"/api/v1/users"
],
"methodList": ["GET", "POST"],
"hostList": [
"api.example.com"
],
"headerList": [
{
"name": "X-API-Version",
"value": "v1"
}
],
"bufferRequest": true,
"bufferResponse": true
},
"deploy": false,
"deployTargetEnvironmentNameList": []
}'

Example 5: Save and Deploy

curl -X PATCH \
"https://demo.apinizer.com/apiops/projects/MyProject/apiProxies/MyAPI/settings/client-route/" \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"clientRoute": {
"relativePathList": [
"/api/v1/users"
],
"methodList": ["GET", "POST"],
"bufferRequest": true,
"bufferResponse": true
},
"deploy": true,
"deployTargetEnvironmentNameList": ["Production", "Staging"]
}'

Notes and Warnings

  • Route Matching:
    • Route matching uses AND logic: all specified conditions must match
    • If multiple lists are provided, the request must match all of them
  • Relative Paths:
    • Paths must be at least 2 characters long
    • Paths are matched against the request URI path
    • Path matching is case-sensitive
  • HTTP Methods:
    • Use ALL to match all HTTP methods
    • Method matching is case-insensitive
  • Host Matching:
    • Host names are matched against the Host header
    • Host matching is case-insensitive
  • Header Matching:
    • Header names are case-insensitive
    • Header values are matched exactly (case-sensitive)
    • All specified headers must be present in the request
  • Buffering:
    • bufferRequest: true - Enables request body access in policies (required for request transformation)
    • bufferResponse: true - Enables response body access in policies (required for response transformation)
    • Disabling buffering improves performance but limits policy capabilities
  • At Least One Route:
    • At least one of relativePathList, methodList, hostList, or headerList must be provided
    • Empty lists are treated as null
  • Deploy:
    • When deploy is set to true, the API proxy will be deployed to the specified environments after saving changes
    • deployTargetEnvironmentNameList is required when deploy=true
    • If deployment fails for some environments, successfully deployed environments are still reported in the response

Permissions

User must have API_MANAGEMENT + MANAGE permission in the project.

  • Deployment:
    • Changes take effect after deployment
    • Undeployed changes do not affect routing