华为云用户手册

  • 响应参数 状态码: 202 表5 响应Body参数 参数 参数类型 描述 task_id String 任务id 状态码: 400 表6 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_msg String 错误描述 状态码: 401 表7 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_msg String 错误描述 状态码: 403 表8 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_msg String 错误描述 状态码: 500 表9 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_msg String 错误描述
  • 响应示例 状态码: 202 Accepted { "task_id" : "d9ce8c9eede54b3f841ec324fe0bfdc2" } 状态码: 400 Bad Request { "error_code" : "APIG.2001", "error_msg" : "The request parameters must be specified,parameterName:env_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" } 状态码: 500 Internal Server Error { "error_code" : "APIG.9999", "error_msg" : "System error" }
  • 请求参数 表3 请求Header参数 参数 是否必选 参数类型 描述 X-Auth-Token 是 String 用户Token。通过调用IAM服务获取用户Token接口获取(响应消息头中X-Subject-Token的值)。 表4 请求Body参数 参数 是否必选 参数类型 描述 env_id 是 String API分组发布的环境ID group_id 是 String API分组ID define 否 String 导出API的定义范围: spec:基础定义,只包括api前端定义 proxy:全量定义,包括api前后端定义 all:扩展定义,包括api前后端定义以及流控、访问控制、自定义认证等扩展定义 dev:开发定义,包括未发布的api的前后端定义 缺省值:spec 枚举值: spec proxy all dev type 否 String 导出的API定义的格式 缺省值:json 枚举值: json yaml yml version 否 String 导出的API定义版本,默认为当前时间 apis 否 Array of strings 导出的API ID列表
  • 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" : { "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 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
  • 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台ECS,已创建一条VPC通道,其中ECS 01和ECS 04已添加到VPC通道中,此时API网关通过VPC通道可以直接访问VPC中的ECS 01和ECS 04。 图1 通过API网关访问VPC通道中的ECS
共100000条