华为云用户手册

  • URI POST /v2/{project_id}/apigw/instances/{instance_id}/openapi/async-export 表1 路径参数 参数 是否必选 参数类型 描述 project_id 是 String 项目ID,获取方式请参见获取项目ID。 instance_id 是 String 实例ID,在API网关控制台的“实例信息”中获取。 表2 Query参数 参数 是否必选 参数类型 描述 oas_version 否 String OpenAPI版本 缺省值:2.0 枚举值: 2.0 3.0
  • 响应示例 状态码: 202 Accepted { "task_id" : "d9ce8c9eede54b3f841ec324fe0bfdc2" } 状态码: 400 Bad Request { "error_code" : "APIG.3603", "error_msg" : "The input data is too long" } 状态码: 401 Unauthorized { "error_code" : "APIG.1002", "error_msg" : "Incorrect token or token resolution failed" } 状态码: 403 Forbidden { "error_code" : "APIG.1005", "error_msg" : "No permissions to request this method" } 状态码: 500 Internal Server Error { "error_code" : "APIG.9999", "error_msg" : "System error" }
  • 响应参数 状态码: 202 表4 响应Body参数 参数 参数类型 描述 task_id String 任务id 状态码: 400 表5 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_msg String 错误描述 状态码: 401 表6 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_msg String 错误描述 状态码: 403 表7 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_msg String 错误描述 状态码: 500 表8 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_msg String 错误描述
  • 请求参数 表2 请求Header参数 参数 是否必选 参数类型 描述 X-Auth-Token 是 String 用户Token。通过调用 IAM 服务获取用户Token接口获取(响应消息头中X-Subject-Token的值)。 表3 FormData参数 参数 是否必选 参数类型 描述 is_create_group 否 Boolean 是否创建新分组 缺省值:true group_id 否 String API分组编号,当is_create_group=false时为必填 extend_mode 否 String 扩展信息导入模式 merge:当扩展信息定义冲突时,merge保留原有扩展信息 override:当扩展信息定义冲突时,override会覆盖原有扩展信息 缺省值:merge 枚举值: merge override simple_mode 否 Boolean 是否开启简易导入模式 缺省值:false mock_mode 否 Boolean 是否开启Mock后端 缺省值:false api_mode 否 String 导入模式 merge:当API信息定义冲突时,merge保留原有API信息 override:当API信息定义冲突时,override会覆盖原有API信息 缺省值:merge 枚举值: merge override file_name 是 File 导入Api的请求体,json或yaml格式的文件
  • HTTP状态码 常用状态码表如表1所示。 表1 HTTP请求状态返回码 返回值 说明 200 OK 处理正常。 204 No Content 无返回内容。 400 Bad Request 服务器未能处理请求。可能原因: 语义有误,当前请求无法被服务器解析; 请求参数有误。 401 Unauthorized 当前请求需要用户验证。如需要用户名和密码。 403 Forbidden 对被请求页面的访问被禁止。 404 Not Found 请求失败,在服务器上未找到请求所希望得到的资源。 405 Method Not Allowed 请求行中指定的请求方法不能被用于请求相应的资源。 406 Not Acceptable 服务器生成的响应无法被客户端所接受。 407 Proxy Authentication Required 用户必须首先使用代理服务器进行验证,这样请求才会被处理。 408 Request Timeout 请求超出了服务器的等待时间。 409 Conflict 由于和被请求的资源的当前状态之间存在冲突,请求无法完成。 410 Gone 被请求的资源在服务器上已经不再可用,并且没有任何已知的转发地址。 412 Precondition Failed 服务器在验证在请求的头字段中给出先决条件时,未能满足其中的一个或多个。 500 Internal Server Error 服务器遇到了一个未曾预料的状况,导致无法完成对请求的处理。 501 Not Implemented 请求未完成。服务器不支持所请求的功能。 502 Bad Gateway 请求未完成。服务器从上游服务器收到一个无效的响应。 503 Service Unavailable 由于服务器临时维护或者过载,服务器当前无法处理请求。 504 Gateway Timeout 网关超时。 父主题: 附录
  • 响应示例 状态码: 200 OK { "create_time" : "2020-08-12T06:52:02Z", "update_time" : "2020-08-12T15:22:21.929863859+08:00", "default" : false, "id" : "e839b367e10f4ab19d1c5008e476b83a", "name" : "response_demo", "responses" : { "AC CES S_DENIED" : { "body" : "{\"error_code\":\"$context.error.code\",\"error_msg\":\"$context.error.message\",\"request_id\":\"$context.requestId\"}", "default" : true, "status" : 403 }, "AUTHORIZER_CONF_FAILURE" : { "body" : "{\"error_code\":\"$context.error.code\",\"error_msg\":\"$context.error.message\",\"request_id\":\"$context.requestId\"}", "default" : true, "status" : 500 }, "AUTHORIZER_FAILURE" : { "body" : "{\"error_code\":\"$context.error.code\",\"error_msg\":\"$context.error.message\",\"request_id\":\"$context.requestId\"}", "default" : true, "status" : 500 }, "AUTHORIZER_IDENTITIES_FAILURE" : { "body" : "{\"error_code\":\"$context.error.code\",\"error_msg\":\"$context.error.message\",\"request_id\":\"$context.requestId\"}", "default" : true, "status" : 401 }, "AUTH_FAILURE" : { "body" : "{\"error_code\":\"$context.error.code\",\"error_msg\":\"$context.error.message\",\"request_id\":\"$context.requestId\"}", "default" : true, "status" : 401 }, "AUTH_HEADER_MISSING" : { "body" : "{\"error_code\":\"$context.error.code\",\"error_msg\":\"$context.error.message\",\"request_id\":\"$context.requestId\"}", "default" : true, "status" : 401 }, "BACKEND_TIMEOUT" : { "body" : "{\"error_code\":\"$context.error.code\",\"error_msg\":\"$context.error.message\",\"request_id\":\"$context.requestId\"}", "default" : true, "status" : 504 }, "BACKEND_UNAVAILABLE" : { "body" : "{\"error_code\":\"$context.error.code\",\"error_msg\":\"$context.error.message\",\"request_id\":\"$context.requestId\"}", "default" : true, "status" : 502 }, "DEFAULT_4XX" : { "body" : "{\"error_code\":\"$context.error.code\",\"error_msg\":\"$context.error.message\",\"request_id\":\"$context.requestId\"}", "default" : true }, "DEFAULT_5XX" : { "body" : "{\"error_code\":\"$context.error.code\",\"error_msg\":\"$context.error.message\",\"request_id\":\"$context.requestId\"}", "default" : true }, "NOT_FOUND" : { "body" : "{\"error_code\":\"$context.error.code\",\"error_msg\":\"$context.error.message\",\"request_id\":\"$context.requestId\"}", "default" : true, "status" : 404 }, "REQUEST_PA RAM ETERS_FAILURE" : { "body" : "{\"error_code\":\"$context.error.code\",\"error_msg\":\"$context.error.message\",\"request_id\":\"$context.requestId\"}", "default" : true, "status" : 400 }, "THROTTLED" : { "body" : "{\"error_code\":\"$context.error.code\",\"error_msg\":\"$context.error.message\",\"request_id\":\"$context.requestId\"}", "default" : true, "status" : 429 }, "UNAUTHORIZED" : { "body" : "{\"error_code\":\"$context.error.code\",\"error_msg\":\"$context.error.message\",\"request_id\":\"$context.requestId\"}", "default" : true, "status" : 401 }, "THIRD_AUTH_FAILURE" : { "body" : "{\"error_code\":\"$context.error.code\",\"error_msg\":\"$context.error.message\",\"request_id\":\"$context.requestId\"}", "default" : true, "status" : 401 }, "THIRD_AUTH_IDENTITIES_FAILURE" : { "body" : "{\"error_code\":\"$context.error.code\",\"error_msg\":\"$context.error.message\",\"request_id\":\"$context.requestId\"}", "default" : true, "status" : 401 }, "THIRD_AUTH_CONF_FAILURE" : { "body" : "{\"error_code\":\"$context.error.code\",\"error_msg\":\"$context.error.message\",\"request_id\":\"$context.requestId\"}", "default" : true, "status" : 500 } } } 状态码: 400 Bad Request { "error_code" : "APIG.2011", "error_msg" : "Invalid parameter value,parameterName:name. Please refer to the support documentation" } 状态码: 401 Unauthorized { "error_code" : "APIG.1002", "error_msg" : "Incorrect token or token resolution failed" } 状态码: 403 Forbidden { "error_code" : "APIG.1005", "error_msg" : "No permissions to request this method" } 状态码: 404 Not Found { "error_code" : "APIG.3001", "error_msg" : "API group c77f5e81d9cb4424bf704ef2b0ac7600 does not exist" } 状态码: 500 Internal Server Error { "error_code" : "APIG.9999", "error_msg" : "System error" }
  • URI PUT /v2/{project_id}/apigw/instances/{instance_id}/api-groups/{group_id}/gateway-responses/{response_id} 表1 路径参数 参数 是否必选 参数类型 描述 project_id 是 String 项目ID,获取方式请参见获取项目ID。 instance_id 是 String 实例ID,在API网关控制台的“实例信息”中获取。 group_id 是 String 分组的编号 response_id 是 String 响应编号
  • 响应示例 状态码: 200 OK { "total" : 2, "size" : 2, "responses" : [ { "create_time" : "2020-08-12T06:52:02Z", "default" : false, "id" : "e839b367e10f4ab19d1c5008e476b83a", "name" : "response_demo", "update_time" : "2020-08-12T06:52:02Z" }, { "create_time" : "2020-07-31T11:39:23Z", "default" : true, "id" : "ed8e8c52ab0e4a1c9c809268e5002e64", "name" : "default", "update_time" : "2020-07-31T11:39:23Z" } ] } 状态码: 400 Bad Request { "error_code" : "APIG.2012", "error_msg" : "Invalid parameter value,parameterName:group_id. Please refer to the support documentation" } 状态码: 401 Unauthorized { "error_code" : "APIG.1002", "error_msg" : "Incorrect token or token resolution failed" } 状态码: 403 Forbidden { "error_code" : "APIG.1005", "error_msg" : "No permissions to request this method" } 状态码: 404 Not Found { "error_code" : "APIG.3001", "error_msg" : "API group c77f5e81d9cb4424bf704ef2b0ac7600 does not exist" } 状态码: 500 Internal Server Error { "error_code" : "APIG.9999", "error_msg" : "System error" }
  • URI GET /v2/{project_id}/apigw/instances/{instance_id}/api-groups/{group_id}/gateway-responses 表1 路径参数 参数 是否必选 参数类型 描述 project_id 是 String 项目ID,获取方式请参见获取项目ID。 instance_id 是 String 实例ID,在API网关控制台的“实例信息”中获取。 group_id 是 String 分组的编号 表2 Query参数 参数 是否必选 参数类型 描述 offset 否 Long 偏移量,表示从此偏移量开始查询,偏移量小于0时,自动转换为0 缺省值:0 limit 否 Integer 每页显示的条目数量,条目数量小于等于0时,自动转换为20,条目数量大于500时,自动转换为500 最小值:1 最大值:500 缺省值:20
  • 实例支持的APIG特性 专享版实例支持的APIG特性。 若当前实例中无相关特性,可提交工单申请升级实例解决。 特性名称 特性描述 特性是否可配置 特性配置示例 特性配置参数 参数描述 参数默认值 参数范围 lts 是否支持shubao访问日志上报功能。 是 {"name":"lts","enable":true,"config": "{\"group_id\": ",\"topic_id\":\"\",\"log_group\":\"\",\"log_stream\":\"\"}"} group_id 日志组ID - - topic_id 日志流ID log_group 日志组名称 log_stream 日志流名称 gateway_responses 是否支持网关自定义响应。 否 - - - - - ratelimit 是否支持自定义流控值。 是 {"name":"ratelimit","enable":true,"config": "{\"api_limits\": 500}"} api_limits API全局默认流控值。注意:如果配置过小会导致业务持续被流控,请根据业务谨慎修改。 200 次/秒 1-1000000 次/秒 request_body_size 是否支持设置请求体大小上限。 是 {"name":"request_body_size","enable":true,"config": "104857600"} request_body_size 请求中允许携带的Body大小上限。 12 M 1-9536 M backend_timeout 是否支持配置后端API的最大超时时间。 是 {"name":"backend_timeout","enable":true,"config": "{"max_timeout": 500}"} max_timeout API网关到后端服务的超时时间上限。 60000 ms 1-600000 ms app_token 是否开启app_token认证方式。 是 {"name":"app_token","enable":true,"config": "{\"enable\": \"on\", \"app_token_expire_time\": 3600, \"app_token_uri\": \"/v1/apigw/oauth2/token\", \"refresh_token_expire_time\": 7200}"} enable 是否开启 off on/off app_token_expire_time access token的有效时间 3600s 1-72000s refresh_token_expire_time refresh token的有效时间 7200s 1-72000s app_token_uri 获取token的uri /v1/apigw/oauth2/token - app_token_key token的加密key - - app_api_key 是否开启app_api_key认证方式。 是 {"name":"app_api_key","enable":true,"config": "on"} - - off on/off app_basic 是否开启app_basic认证方式。 是 {"name":"app_basic","enable":true,"config": "on"} - - off on/off app_secret 是否支持app_secret认证方式。 是 {"name":"app_secret","enable":true,"config": "on"} - - off on/off app_jwt 是否支持app_jwt认证方式。 是 {"name":"app_jwt","enable":true,"config": "{\"enable\": \"on\", \"auth_header\": \"Authorization\"}"} enable 是否开启app_jwt认证方式。 off on/off auth_header app_jwt认证头 Authorization - public_key 是否支持public_key类型的后端签名。 是 {"name":"public_key","enable":true,"config": "{\"enable\": \"on\", \"public_key_uri_prefix\": \"/apigw/authadv/v2/public-key/\"}"} enable 是否开启public_key认证方式。 off on/off public_key_uri_prefix 获取public key的uri前缀 /apigw/authadv/v2/public-key/ - backend_token_allow 是否支持普通租户透传token到后端。 是 {"name":"backend_token_allow","enable":true,"config": "{\"backend_token_allow_users\": [\"user_name\"]}"} backend_token_allow_users 透传token到后端普通租户白名单,匹配普通租户domain name正则表达式。 - - sign_basic 签名密钥是否支持basic类型。 否 - - - - - multi_auth API是否支持双重认证方式。 否 - - - - - backend_client_certificate 是否开启后端双向认证。 是 {"name":"backend_client_certificate","enable":true,"config": "{\"enable\": \"on\",\"ca\": \"\",\"content\": \"\",\"key\": \"\"}"} enable 是否开启 off on/off ca 双向认证信任证书 - - content 双向认证证书 - - key 双向认证信任私钥 - - ssl_ciphers 是否支持https加密套件。 是 {"name":"ssl_ciphers","enable":true,"config": "config": "{\"ssl_ciphers\": [\"ECDHE-ECDSA-AES256-GCM-SHA384\"]}"} ssl_ciphers 支持的加解密套件。ssl_ciphers数组中只允许出现默认值中的字符串,且数组不能为空。 - ECDHE-ECDSA-AES256-GCM-SHA384,ECDHE-RSA-AES256-GCM-SHA384,ECDHE-ECDSA-AES128-GCM-SHA256,ECDHE-RSA-AES128-GCM-SHA256,ECDHE-ECDSA-AES256-SHA384,ECDHE-RSA-AES256-SHA384,ECDHE-ECDSA-AES128-SHA256,ECDHE-RSA-AES128-SHA256 route 是否支持自定义路由。 否 - - - - - cors 是否支持API使用插件功能。 否 - - - - - real_ip_from_xff 是否开启使用X-Forwarded-For头中的ip作为ACL、流控的生效依据 是 {"name": "real_ip_from_xff","enable": true,"config": {"enable": "on","xff_index": -1}} enable 是否开启 off on/off xff_index X-Forwarded-For头中IP的排序序号;值允许取正数、负数、0;取0或正数时,获取X-Forwarded-For头中对应索引的IP;取负数时,按倒序方式从X-Forwarded-For头中获取IP。例如到达API网关的X-Forwarded-For头中依次有IP1,IP2,IP3 三个IP地址,xff_index取0时获取IP1,xff_index取1时获取IP2,xff_index取-1时获取IP3 -1 int32有效值 app_route 是否支持ip访问。 是 {"name":"app_route","enable":true,"config": "on"} - - off on/off vpc_name_modifiable 是否支持修改负载通道名称。 是 {"name":"vpc_name_modifiable","enable":true,"config": "on"} - - on on/off default_group_host_trustlist DEFAULT分组是否支持配置非本实例IP访问。 是 {"name":"default_group_host_trustlist","enable": true,"config": "{\"enable\":\"on\",\"hosts\":[\"123.2.2.2\",\"202.2.2.2\"]}"} enable 是否开启 - on/off hosts 非本实例IP列表 - - throttle_strategy 是否启用流控模式。 是 {"name":"throttle_strategy","enable":true,"config": "{\"enable\": \"on\",\"strategy\": \"local\"}"} enable 是否开启 off on/off strategy 流控模式 - cluster/local custom_log 是否支持用户自定义API请求中的HEADER、QUERY、COOKIE参数值打印到日志。 是 {"name":"custom_log","enable":true,"config": "{\"custom_logs\":[{\"location\":\"header\",\"name\":\"a1234\"}]}"} custom_logs 自定义日志 - 数量不超过10个 location 位置 header/query/cookie name 名称 - real_ip_header_getter 是否开启通过用户自定义的Header获取用户源IP地址。 是 {"name":"real_ip_header_getter","enable":true,"config": "{\"enable\": \"on\",\"header_getter\": \"header:testIP\"}"} enable 是否开启 off on/off header_getter 获取用户源IP地址的自定义Header - - policy_cookie_param 是否开启策略后端条件支持cookie类型。 是 {"name":"policy_cookie_param","enable":true,"config": "on"} - - off on/off app_quota 是否支持客户端配额策略。 否 - - - - - app_acl 是否支持流控策略。 否 - - - - - set_resp_headers 是否支持响应header插件。 否 - - - - - vpc_backup 是否支持VPC通道的主备配置。 否 - - - - - sign_aes 签名密钥是否支持AES加密方式。 否 - - - - - kafka_log 是否支持增删改查kafka日志插件。 否 - - - - - backend_retry_count 是否支持API配置重试次数。 否 - - - - - policy_sys_param 策略后端条件来源是否支持系统参数。 否 - - - - - breaker 是否支持断路器。 否 - - - - - content_type_configurable 获取API列表的接口返回信息中是否存在API的请求参数类型信息(Content-Type)。 否 - - - - - rate_limit_plugin 是否支持流控插件。 否 - - - - - breakerv2 是否支持断路器,能够实现过载情况下服务能力降级。 否 - - - - - sm_cipher_type 加密本地敏感数据时,是否支持应用商密加密算法。 否 - - - - - rate_limit_algorithm 是否支持切换流控算法。 否 - - - - - gzip 是否对响应请求使用gzip压缩。 是 { "name" : "gzip", "config" : {\"comp_level\":6}, "enable" : true } comp_level gzip压缩级别或压缩水平。值为介于1到9之间的整数,表示压缩的程度,数字越大表示压缩得越好但耗费的时间也越多。 6 1-9 sse_strategy 是否支持sse传输策略开关。 是 { "name": "sse_strategy", "enable": true, "config": "on" } - - off on/off authorizer_context_support_num_bool 自定认证返回的context里键值对的值是否支持number类型和boolean类型。 否 - - - - - custom_auth_header APP认证和签名密钥策略是否支持认证头域自定义配置。 是 1:{ "name": "custom_auth_header", "enable": true, "config": "{\"app_auth_header\":\"app-header\", \"backend_sign_header\":\"back-header\"}" } app_auth_header 请求头中的APP认证的签名信息的头域可以由此处的配置项承载。 - 支持英文、数字、中划线、下划线,以英文开头,3-64个字符,可以为空,不能以x-apig、x-sdk开头,不区分大小写,不能是x-stage、authorization,不区分大小写。 backend_sign_header 签名密钥策略(BASIC、AUTH和HMAC)传到后端的签名信息的头域可以由此处的配置项承载。 - request_custom_config 支持自定义配置客户端请求相关参数。 是 { "name": "request_custom_config", "enable": true, "config": "{\"http2\":\"on\",\"client_body_timeout\":10}" } http2 HTTP/2协议的开关 on on/off client_body_timeout 客户端请求体超时时间 8s 1-60s gateway_responses_support_header 分组自定义响应支持自定义响应头 否 - - - - - api_uri_no_escape API中请求path的请求参数是否支持不转义 是 {"name":"api_uri_no_escape","enable":true,"config":""} enable 是否开启 false true/false 父主题: 附录
  • URI GET /v2/{project_id}/apigw/instances/{instance_id}/api-groups/{group_id}/gateway-responses/{response_id} 表1 路径参数 参数 是否必选 参数类型 描述 project_id 是 String 项目ID,获取方式请参见获取项目ID。 instance_id 是 String 实例ID,在API网关控制台的“实例信息”中获取。 group_id 是 String 分组的编号 response_id 是 String 响应编号
  • 响应示例 状态码: 200 Created { "create_time" : "2020-08-12T06:52:02Z", "update_time" : "2020-08-12T06:52:02Z", "default" : false, "id" : "e839b367e10f4ab19d1c5008e476b83a", "name" : "response_demo", "responses" : { "ACCESS_DENIED" : { "body" : "{\"error_code\":\"$context.error.code\",\"error_msg\":\"$context.error.message\",\"request_id\":\"$context.requestId\"}", "default" : true, "status" : 403 }, "AUTHORIZER_CONF_FAILURE" : { "body" : "{\"error_code\":\"$context.error.code\",\"error_msg\":\"$context.error.message\",\"request_id\":\"$context.requestId\"}", "default" : true, "status" : 500 }, "AUTHORIZER_FAILURE" : { "body" : "{\"error_code\":\"$context.error.code\",\"error_msg\":\"$context.error.message\",\"request_id\":\"$context.requestId\"}", "default" : true, "status" : 500 }, "AUTHORIZER_IDENTITIES_FAILURE" : { "body" : "{\"error_code\":\"$context.error.code\",\"error_msg\":\"$context.error.message\",\"request_id\":\"$context.requestId\"}", "default" : true, "status" : 401 }, "AUTH_FAILURE" : { "body" : "{\"error_code\":\"$context.error.code\",\"error_msg\":\"$context.error.message\",\"request_id\":\"$context.requestId\"}", "default" : true, "status" : 401 }, "AUTH_HEADER_MISSING" : { "body" : "{\"error_code\":\"$context.error.code\",\"error_msg\":\"$context.error.message\",\"request_id\":\"$context.requestId\"}", "default" : true, "status" : 401 }, "BACKEND_TIMEOUT" : { "body" : "{\"error_code\":\"$context.error.code\",\"error_msg\":\"$context.error.message\",\"request_id\":\"$context.requestId\"}", "default" : true, "status" : 504 }, "BACKEND_UNAVAILABLE" : { "body" : "{\"error_code\":\"$context.error.code\",\"error_msg\":\"$context.error.message\",\"request_id\":\"$context.requestId\"}", "default" : true, "status" : 502 }, "DEFAULT_4XX" : { "body" : "{\"error_code\":\"$context.error.code\",\"error_msg\":\"$context.error.message\",\"request_id\":\"$context.requestId\"}", "default" : true }, "DEFAULT_5XX" : { "body" : "{\"error_code\":\"$context.error.code\",\"error_msg\":\"$context.error.message\",\"request_id\":\"$context.requestId\"}", "default" : true }, "NOT_FOUND" : { "body" : "{\"error_code\":\"$context.error.code\",\"error_msg\":\"$context.error.message\",\"request_id\":\"$context.requestId\"}", "default" : true, "status" : 404 }, "REQUEST_PARAMETERS_FAILURE" : { "body" : "{\"error_code\":\"$context.error.code\",\"error_msg\":\"$context.error.message\",\"request_id\":\"$context.requestId\"}", "default" : true, "status" : 400 }, "THROTTLED" : { "body" : "{\"error_code\":\"$context.error.code\",\"error_msg\":\"$context.error.message\",\"request_id\":\"$context.requestId\"}", "default" : true, "status" : 429 }, "UNAUTHORIZED" : { "body" : "{\"error_code\":\"$context.error.code\",\"error_msg\":\"$context.error.message\",\"request_id\":\"$context.requestId\"}", "default" : true, "status" : 401 }, "THIRD_AUTH_FAILURE" : { "body" : "{\"error_code\":\"$context.error.code\",\"error_msg\":\"$context.error.message\",\"request_id\":\"$context.requestId\"}", "default" : true, "status" : 401 }, "THIRD_AUTH_IDENTITIES_FAILURE" : { "body" : "{\"error_code\":\"$context.error.code\",\"error_msg\":\"$context.error.message\",\"request_id\":\"$context.requestId\"}", "default" : true, "status" : 401 }, "THIRD_AUTH_CONF_FAILURE" : { "body" : "{\"error_code\":\"$context.error.code\",\"error_msg\":\"$context.error.message\",\"request_id\":\"$context.requestId\"}", "default" : true, "status" : 500 } } } 状态码: 400 Bad Request { "error_code" : "APIG.2012", "error_msg" : "Invalid parameter value,parameterName:group_id. Please refer to the support documentation" } 状态码: 401 Unauthorized { "error_code" : "APIG.1002", "error_msg" : "Incorrect token or token resolution failed" } 状态码: 403 Forbidden { "error_code" : "APIG.1005", "error_msg" : "No permissions to request this method" } 状态码: 404 Not Found { "error_code" : "APIG.3001", "error_msg" : "API group c77f5e81d9cb4424bf704ef2b0ac7600 does not exist" } 状态码: 500 Internal Server Error { "error_code" : "APIG.9999", "error_msg" : "System error" }
  • 响应示例 状态码: 201 Created { "create_time" : "2020-08-12T14:52:02.829753306+08:00", "update_time" : "2020-08-12T14:52:02.829753306+08:00", "default" : false, "id" : "e839b367e10f4ab19d1c5008e476b83a", "name" : "response_demo", "responses" : { "ACCESS_DENIED" : { "body" : "{\"error_code\":\"$context.error.code\",\"error_msg\":\"$context.error.message\",\"request_id\":\"$context.requestId\"}", "default" : true, "status" : 403 }, "AUTHORIZER_CONF_FAILURE" : { "body" : "{\"error_code\":\"$context.error.code\",\"error_msg\":\"$context.error.message\",\"request_id\":\"$context.requestId\"}", "default" : true, "status" : 500 }, "AUTHORIZER_FAILURE" : { "body" : "{\"error_code\":\"$context.error.code\",\"error_msg\":\"$context.error.message\",\"request_id\":\"$context.requestId\"}", "default" : true, "status" : 500 }, "AUTHORIZER_IDENTITIES_FAILURE" : { "body" : "{\"error_code\":\"$context.error.code\",\"error_msg\":\"$context.error.message\",\"request_id\":\"$context.requestId\"}", "default" : true, "status" : 401 }, "AUTH_FAILURE" : { "body" : "{\"error_code\":\"$context.error.code\",\"error_msg\":\"$context.error.message\",\"request_id\":\"$context.requestId\"}", "default" : true, "status" : 401 }, "AUTH_HEADER_MISSING" : { "body" : "{\"error_code\":\"$context.error.code\",\"error_msg\":\"$context.error.message\",\"request_id\":\"$context.requestId\"}", "default" : true, "status" : 401 }, "BACKEND_TIMEOUT" : { "body" : "{\"error_code\":\"$context.error.code\",\"error_msg\":\"$context.error.message\",\"request_id\":\"$context.requestId\"}", "default" : true, "status" : 504 }, "BACKEND_UNAVAILABLE" : { "body" : "{\"error_code\":\"$context.error.code\",\"error_msg\":\"$context.error.message\",\"request_id\":\"$context.requestId\"}", "default" : true, "status" : 502 }, "DEFAULT_4XX" : { "body" : "{\"error_code\":\"$context.error.code\",\"error_msg\":\"$context.error.message\",\"request_id\":\"$context.requestId\"}", "default" : true }, "DEFAULT_5XX" : { "body" : "{\"error_code\":\"$context.error.code\",\"error_msg\":\"$context.error.message\",\"request_id\":\"$context.requestId\"}", "default" : true }, "NOT_FOUND" : { "body" : "{\"error_code\":\"$context.error.code\",\"error_msg\":\"$context.error.message\",\"request_id\":\"$context.requestId\"}", "default" : true, "status" : 404 }, "REQUEST_PARAMETERS_FAILURE" : { "body" : "{\"error_code\":\"$context.error.code\",\"error_msg\":\"$context.error.message\",\"request_id\":\"$context.requestId\"}", "default" : true, "status" : 400 }, "THROTTLED" : { "body" : "{\"error_code\":\"$context.error.code\",\"error_msg\":\"$context.error.message\",\"request_id\":\"$context.requestId\"}", "default" : true, "status" : 429 }, "UNAUTHORIZED" : { "body" : "{\"error_code\":\"$context.error.code\",\"error_msg\":\"$context.error.message\",\"request_id\":\"$context.requestId\"}", "default" : true, "status" : 401 }, "THIRD_AUTH_FAILURE" : { "body" : "{\"error_code\":\"$context.error.code\",\"error_msg\":\"$context.error.message\",\"request_id\":\"$context.requestId\"}", "default" : true, "status" : 401 }, "THIRD_AUTH_IDENTITIES_FAILURE" : { "body" : "{\"error_code\":\"$context.error.code\",\"error_msg\":\"$context.error.message\",\"request_id\":\"$context.requestId\"}", "default" : true, "status" : 401 }, "THIRD_AUTH_CONF_FAILURE" : { "body" : "{\"error_code\":\"$context.error.code\",\"error_msg\":\"$context.error.message\",\"request_id\":\"$context.requestId\"}", "default" : true, "status" : 500 } } } 状态码: 400 Bad Request { "error_code" : "APIG.2011", "error_msg" : "Invalid parameter value,parameterName:name. Please refer to the support documentation" } 状态码: 401 Unauthorized { "error_code" : "APIG.1002", "error_msg" : "Incorrect token or token resolution failed" } 状态码: 403 Forbidden { "error_code" : "APIG.1005", "error_msg" : "No permissions to request this method" } 状态码: 404 Not Found { "error_code" : "APIG.3001", "error_msg" : "API group c77f5e81d9cb4424bf704ef2b0ac7600 does not exist" } 状态码: 500 Internal Server Error { "error_code" : "APIG.9999", "error_msg" : "System error" }
  • URI POST /v2/{project_id}/apigw/instances/{instance_id}/api-groups/{group_id}/gateway-responses 表1 路径参数 参数 是否必选 参数类型 描述 project_id 是 String 项目ID,获取方式请参见获取项目ID。 instance_id 是 String 实例ID,在API网关控制台的“实例信息”中获取。 group_id 是 String 分组的编号
  • URI PUT /v2/{project_id}/apigw/instances/{instance_id}/api-groups/{group_id}/gateway-responses/{response_id}/{response_type} 表1 路径参数 参数 是否必选 参数类型 描述 project_id 是 String 项目ID,获取方式请参见获取项目ID。 instance_id 是 String 实例ID,在API网关控制台的“实例信息”中获取。 group_id 是 String 分组的编号 response_id 是 String 响应编号 response_type 是 String 错误类型 AUTH_FAILURE: 认证失败,IAM或APP认证校验失败 AUTH_HEADER_MISSING: 认证身份来源信息缺失 AUTHORIZER_FAILURE: 自定义认证方返回认证失败 AUTHORIZER_CONF_FAILURE:自定义认证方异常,通信失败、返回异常响应等错误 AUTHORIZER_IDENTITIES_FAILURE: 前端自定义认证的身份来源信息缺失或不合法错误 BACKEND_UNAVAILABLE: 后端不可用,网络不可达错误 BACKEND_TIMEOUT: 后端超时,与后端的网络交互超过预配置的时间错误 THROTTLED: API调用次数超出所配置的流量策略阈值 UNAUTHORIZED: 使用的凭据未被授权访问该API ACCESS_DENIED: 拒绝访问,如触发配置的访问控制策略、或异常攻击检测拦截 NOT_FOUND: 未匹配到API错误 REQUEST_PARAMETERS_FAILURE: 请求参数校验失败、不支持的HTTP方法 DEFAULT_4XX: 其它4XX类错误 DEFAULT_5XX: 其它5XX类错误 THIRD_AUTH_FAILURE: 第三方认证方返回认证失败 THIRD_AUTH_IDENTITIES_FAILURE: 第三方认证的身份来源信息缺失或不合法错误 THIRD_AUTH_CONF_FAILURE: 第三方认证方异常,通信失败、返回异常响应等错误 ORCHESTRATION_PARAMETER_NOT_FOUND: 参数编排失败,请求中没有待编排的入参 ORCHESTRATION_FAILURE: 参数编排失败,没有编排规则匹配成功 枚举值: AUTH_FAILURE AUTH_HEADER_MISSING AUTHORIZER_FAILURE AUTHORIZER_CONF_FAILURE AUTHORIZER_IDENTITIES_FAILURE BACKEND_UNAVAILABLE BACKEND_TIMEOUT THROTTLED UNAUTHORIZED ACCESS_DENIED NOT_FOUND REQUEST_PARAMETERS_FAILURE DEFAULT_4XX DEFAULT_5XX THIRD_AUTH_FAILURE THIRD_AUTH_IDENTITIES_FAILURE THIRD_AUTH_CONF_FAILURE ORCHESTRATION_PARAMETER_NOT_FOUND ORCHESTRATION_FAILURE
  • 响应示例 状态码: 200 OK { "ACCESS_DENIED" : { "body" : "{\"error_code\":\"$context.error.code\",\"error_msg\":\"$context.error.message\",\"request_id\":\"$context.requestId\"}", "default" : true, "status" : 403 } } 状态码: 400 Bad Request { "error_code" : "APIG.2012", "error_msg" : "Invalid parameter value,parameterName:group_id. Please refer to the support documentation" } 状态码: 401 Unauthorized { "error_code" : "APIG.1002", "error_msg" : "Incorrect token or token resolution failed" } 状态码: 403 Forbidden { "error_code" : "APIG.1005", "error_msg" : "No permissions to request this method" } 状态码: 404 Not Found { "error_code" : "APIG.3001", "error_msg" : "API group c77f5e81d9cb4424bf704ef2b0ac7600 does not exist" } 状态码: 500 Internal Server Error { "error_code" : "APIG.9999", "error_msg" : "System error" }
  • 请求参数 表2 请求Header参数 参数 是否必选 参数类型 描述 X-Auth-Token 是 String 用户Token。通过调用IAM服务获取用户Token接口获取(响应消息头中X-Subject-Token的值)。 表3 请求Body参数 参数 是否必选 参数类型 描述 status 否 Integer 响应的HTTP状态码。范围为200-599,但不允许为444。 body 否 String 响应的Body模板 headers 否 Array of ResponseInfoHeader objects 自定义的响应头 数组长度:0 - 10 表4 ResponseInfoHeader 参数 是否必选 参数类型 描述 key 否 String 分组自定义响应的响应头的key,支持英文字母、数字和中划线,长度为1到128位 value 否 String 分组自定义响应的响应头的value,为长度为1到1024位的字符串 最小长度:1 最大长度:1024
  • 专享版API概览 API网关专享版接口的分类与说明如表1所示。 表1 专享版API概览 类型 说明 API分组管理 包括API分组的创建、修改、删除、查询详情和列表等接口。 环境管理 包括环境的创建、修改、删除和查询列表等接口。 环境变量管理 包括环境变量的新建、修改、删除、查询详情和列表等接口。 流控策略管理 包括流控策略的创建、修改、删除、查看详情和列表等接口。 API管理 包括API的创建、修改、删除、发布或下线、查询、调试、切换版本、校验API定义等接口。 签名密钥管理 包括签名密钥的创建、修改、删除和查询等接口。 签名密钥绑定关系管理 包括签名密钥的绑定、解绑、查询API绑定的密钥列表、查看密钥绑定/未绑定的API列表。 API绑定流控策略 包括绑定、解绑、批量解绑API与流控策略的关系,查看流程策略绑定/未绑定的API列表,查看API绑定的流控策略列表。 设置特殊流控 包括创建、修改、删除特殊流控策略,查看特殊设置列表。 APP授权管理 包括APP授权、解除授权,查看APP已绑定/未绑定的API列表,查看API已绑定的APP列表。 概要查询 包括查询API概况、API分组概况、APP概况。 域名管理 包括域名的绑定、修改、解绑。域名证书的绑定、删除、查看。 ACL策略管理 包括ACL策略的创建、修改、删除、批量删除,查看ACL策略详情、查询ACL策略列表。 API绑定ACL策略 包括将API与ACL策略绑定、解绑、批量解绑,查看ACL策略绑定/未绑定的API列表,查看API绑定的ACL策略列表。 自定义认证管理 包括自定义认证的创建、修改、删除,查看自定义认证详情,查询自定义认证列表。 OpenAPI接口 包括API的导出、导入。 VPC通道管理 包括: VPC通道的创建、更新、删除、查看,查询VPC通道列表。 后端实例的添加、查看、删除。 后端服务器状态的批量修改。 VPC通过健康检查的修改。 后端服务器组的添加、更新、删除、查看,查询VPC通道后端服务器组列表。 监控信息查询 包括查询最近一段时间的API统计信息,查询最近一小时内的分组统计信息。 分组自定义响应管理 包括分组自定义响应的创建、查询、修改、删除,查询分组自定义响应列表,查看、修改分组下指定错误类型的自定义相应,删除分组指定错误类型的自定义响应配置。 标签管理 包括标签列表的查询。 实例特性管理 包括实例特性的配置,查看实例特性列表。 配置管理 包括查看某实例的租户配置列表,查询租户实例配置列表。 实例管理 包括: 实例的创建、更新、查看、删除,查看实例创建进度,查询实例列表。 EIP的绑定、解绑。 实例公网出口的开启、关闭,更新实例公网出口带宽。 查看可用区信息。 实例的规格变更。 查看实例约束信息。 实例终端节点管理 包括: 查询实例终端节点连接列表。 查询实例终端节点服务的白名单列表。 接受/拒绝终端节点连接。 批量添加/删除实例终端节点白名单。 实例标签管理 包括实例标签的添加、删除和查询。 微服务中心管理 包括导入微服务。 SSL证书管理 包括: 证书的创建、删除、修改、查看,获取SSL证书列表。 域名绑定/解绑SSL证书。 SSL证书绑定/解绑域名 获取SSL证书已绑定的域名列表。 插件管理 包括: 插件的创建、修改、删除、查看,查询插件列表。 插件绑定/解绑API。 API绑定/解绑插件。 查询插件/API下绑定的API/插件。 查询可绑定当前插件的API,查询可绑定当前API的插件。 APP管理 包括: APP的创建、修改、删除、校验,重置密钥,查看APP详情、查询APP列表。 APP Code的创建、自动生成、删除,查看APP Code详情、查询APP Code列表。 查询凭据关联的凭据配额。 设置/删除APP的访问控制,查看APP的访问控制详情。 凭据配额管理 包括: 凭据配额的创建、修改、删除。 获取凭据配额详情和凭据配额列表。 凭据配额绑定/解绑凭据列表 。 查询凭据配额已绑定的凭据和未绑定的凭据。 父主题: API概览
  • 调用API 本章节仅提供请求地址和认证参数的配置指导,客户端的其他参数配置需要用户自行调整,如超时配置、SSL配置等。如果客户端参数配置错误会导致业务受损,建议参考业界标准进行配置。 配置请求地址相关参数。 API调用场景 API请求参数配置 使用域名调用API 使用服务分配的子域名或服务绑定的域名调用API,无需另外配置。 使用IP调用非DEFAULT分组的API 使用IP地址直接调用非DEFAULT分组下的非APP认证的API,需要在请求消息中添加Header参数“host”。 配置认证参数。 API认证方式 API请求参数配置 APP认证(签名认证) 使用获取的SDK对API请求进行签名,具体请参考使用APP认证调用API。 APP认证(简易认证) 在API请求中添加Header参数“X-Apig-AppCode”,参数值为获取API及文档中获取到的AppCode。具体请参考快速入门。 华为IAM认证(Token认证) 先获取云服务平台的认证Token,然后在API请求中携带Token进行认证,具体请参考Token认证。 华为IAM认证(AK/SK认证) 调用API时,使用获取的SDK对API请求进行签名,具体请参考AK/SK认证。 自定义认证 在API请求参数中携带认证信息进行认证。 无认证 无需认证,可直接调用API。
  • API网关运行时可获取变量 表2 网关错误响应消息体支持的变量 运行时变量名称 描述 $context.apiId API的ID $context.appId API调用者的APP对象ID $context.requestId 当次API调用生成请求ID $context.stage API调用的部署环境 $context.sourceIp API调用者的源地址 $context.authorizer.frontend.property 前端自定义认证响应的context映射的指定键值对的字符串值 $context.authorizer.backend.property 后端自定义认证响应的context映射的指定键值对的字符串值 $context.error.message 当前网关错误响应的错误信息 $context.error.code 当前网关错误响应的错误码 $context.error.type 当前网关错误响应的错误类型
  • 操作场景 网关响应,指API网关未能成功处理API请求,从而产生的错误响应。API网关提供默认的网关响应(default),如果您需要自定义响应状态码或网关响应内容,可在API分组管理中新增网关响应,其中响应内容符合JSON格式即可。 例如,“default”网关的响应内容为: {"error_code": "$context.error.code", "error_msg": "$context.error.message", "request_id": "$context.requestId"} 您可以自定义为: {"errorcode": "$context.error.code", "errormsg": "$context.error.message", "requestid": "$context.requestId","apiId":"$context.apiId"} JSON体的内容可以按需定制,包括增减字段内容。 API提供的默认网关响应“default”也可以编辑修改。 您可以新增多个网关响应,支持同一分组下不同API配置不同的网关响应内容。 网关响应所定义的错误类型固定且不可修改,具体见网关错误响应类型说明。 响应内容支持调用API网关运行时变量($context变量),具体见API网关运行时可获取变量。
  • 网关错误响应类型说明 API网关提供的错误响应类型见表1,其中响应状态码可以按实际需要做自定义修改。 表1 API网关的错误响应类型 错误说明 默认的响应状态码 详细说明 拒绝访问 403 拒绝访问,如触发配置的访问控制策略、或异常攻击检测拦截 自定义认证配置错误 500 自定义认证方异常,通信失败、返回异常响应等错误 自定义认证失败 500 自定义认证方返回认证失败 自定义认证身份来源错误 401 前端自定义认证的身份来源信息缺失或不合法错误 认证失败 401 认证失败,IAM或APP认证校验失败 认证身份来源缺失 401 认证身份来源信息缺失 后端超时 504 后端超时,与后端的网络交互超过预配置的时间错误 后端不可用 502 后端不可用,网络不可达错误 默认4XX - 其它4XX类错误 默认5XX - 其它5XX类错误 未找到匹配的API 404 未匹配到API 请求参数错误 400 请求参数校验失败、不支持的HTTP方法 调用次数超出阈值 429 API调用次数超出所配置的流量策略阈值 应用未授权 401 使用的应用未被授权访问该API
  • 操作步骤 进入共享版控制台。 单击“导出API”,进入“导出API”界面。 设置如表1所示参数。 图1 导出API 表1 导出API 参数名称 说明 API分组 选择待导出API所在的API分组。 运行环境 选择待导出API所在的环境。 API 默认导出API分组所在环境的所有的API,如果需要导出个别API,单击“自定义导出API”,勾选需要导出的API名称。 API定义范围 基础定义:包括API前端请求定义和响应定义,不包括后端服务定义。其中API前端请求定义除了Swagger规范定义项外,还包括API网关的一些Swagger扩展字段。 全量定义:包括API前端请求定义、后端服务定义和响应定义。 扩展定义:包括API前端请求定义、后端服务定义和响应定义,还包括API关联的流量控制、访问控制等策略对象的定义。 导出格式 选择JSON或YAML。 自定义版本 为导出的API自定义版本号,如果没有指定版本号,默认使用当前时间。 单击“导出”,右侧显示导出结果。
  • 操作步骤 进入API网关控制台页面。 在左侧导航栏选择“实例管理”。 在已创建的实例上,单击“查看控制台”或实例名称。 单击“终端节点管理”页签,查看终端节点信息,详细信息可参考终端节点管理。 表1 终端节点信息 参数项 说明 服务信息 展示的名称由{region}.{终端节点服务名称}.{终端节点服务ID}组成。您在购买实例时,会同步创建 VPC终端节点 服务,可以设置终端节点服务名称,也可以在此处修改终端节点服务名称。 连接管理 展示连接到网关实例的终端节点信息。如果需要新建终端节点,请单击“创建终端节点”创建。 终端节点ID:终端节点的ID。 报文标识:终端节点ID的标识,用来识别是哪个终端节点。 状态:终端节点的状态。 关于终端节点的各个状态,请查看终端节点服务和终端节点有哪些状态?。 拥有者:终端节点创建者的账号ID。 创建时间:终端节点的创建时间。 操作:终端节点服务对终端节点的连接审批,可选择“接受”或“拒绝”。 须知: 如您仍有业务通过该连接进行访问,拒绝已建立的连接可能导致业务受损,请谨慎操作。 权限管理 权限管理用于控制是否允许跨租户的终端节点进行访问。可以设置允许连接该终端节点服务的授权账号ID,将授权账号ID添加至终端节点服务的白名单中。 单击“添加白名单记录”,填写账号ID。 授权账号ID:连接访问终端节点的授权账号ID。 创建时间:白名单的创建时间。 操作:对连接访问终端节点的授权账号进行操作,支持将授权账号从白名单中删除。
  • 操作场景 使用APP认证的API,需要在API网关中创建一个应用,以生成应用ID和密钥对(AppKey、AppSecret)。将创建的应用绑定API后,才可以使用APP认证调用API。在API调用过程中,把密钥对替换SDK中的密钥对,API网关服务根据密钥对进行身份核对,完成鉴权。关于使用APP认证的方法,具体请参考《API网关开发指南》。 从云商店购买的API,系统自动创建一个应用,无需单独创建应用。 使用无认证/华为IAM认证的API,无需创建应用。 应用配额包括您自行创建的应用和在云商店购买API生成的应用。
  • 操作场景 签名密钥用于后端服务验证API网关的身份,在API网关请求后端服务时,保障后端服务的安全。 签名密钥是由一对Key和Secret组成,签名密钥需要绑定到API才能生效。当签名密钥绑定API后,API网关向后端服务发送此API的请求时,会增加相应的签名信息,此时需要后端服务依照同样方式进行签名,通过比对签名结果和API网关传过来的Authorization头中签名是否一致来校验API的合法性。 同一个环境中一个API只能绑定一个签名密钥,一个签名密钥可以绑定多个API。
  • 使用流程 在控制台创建签名密钥。 将新创建的签名密钥绑定API。 API网关将签名后的请求发送到后端服务,此时Authorization头中包含签名信息。后端服务通过不同的开发语言(例如Java、Go、Python、JavaScript、C#、PHP、C++、C、Android等)进行签名,比对签名结果和API网关传过来的Authorization头中签名是否一致来校验API的合法性。 图1 签名密钥流程
  • 操作场景 VPC通道主要用于将部署在VPC内的服务通过API网关开放给外部访问,它的优势在于使用VPC的内部子网通信,网络时延更低,同时VPC通道具有负载均衡功能,从而实现后端服务的负载均衡。 创建VPC通道后,在创建API,且后端服务类型为HTTP/HTTPS时,后端服务地址可以直接使用已创建的VPC通道。例如,VPC中包含6台E CS ,已创建一条VPC通道,其中ECS 01和ECS 04已添加到VPC通道中,此时API网关通过VPC通道可以直接访问VPC中的ECS 01和ECS 04。 图1 通过API网关访问VPC通道中的ECS
  • 操作场景 流量控制可限制单位时间内API的被调用次数,保护后端服务。 为了提供持续稳定的服务,您可以通过创建流控策略,针对部分API进行流量控制。 流控策略和API本身是相互独立的,只有将流控策略绑定API后,流控策略才对绑定的API生效。 同一个环境中,一个API只能被一个流控策略绑定,但一个流控策略可以绑定多个API。 如果API未绑定流控策略,共享版API网关系统默认流控限制为200次/秒。
  • 绑定API 在“流量控制”页面,通过以下任意一种方法,进入“绑定API”页面。 在待绑定的流量控制策略所在行,单击“绑定API”,进入已绑定API列表页面。单击“绑定API”。 单击策略名称,进入策略详情页面。在“绑定的API列表”页签中单击“绑定API”。 选择“API分组”、“环境”以及“API名称”,筛选所需的API。 勾选API,单击“绑定”,完成API绑定策略。 图1 绑定API 在流控策略绑定API后,如果API不需要调用此策略,单击“解除”,解除绑定。如果需要批量解绑API,则勾选待解绑的API,单击“解除”。最多同时解绑1000个API。
共100000条