使用负载通道开放后端服务并注册API
引导式阅读
Java
使用负载通道开放后端服务并注册API
作者
C***
上架时间
2023-11-16 06:46:28

ROMA-Connect API网关负载通道能力开放后端服务代码示例(Java版本)

0. 版本说明

本示例基于华为云SDK V3.0版本开发。

1. 简介

基于华为云 Java SDK使用API网关负载通道能力开放后端服务代码示例。其中包括:创建API分组,创建VPC通道,绑定独立域名,创建API和发布API。

2. 开发前准备

  • 注册 华为云,并完成 实名认证
  • 已具备开发环境 ,支持Java JDK 1.8及其以上版本。
  • 已获取华为云账号对应的Access Key(AK)和Secret Access Key(SK)。请在华为云控制台“我的凭证 > 访问密钥”页面上创建和查看您的AK/SK。具体请参见 访问密钥
  • 已获取对应区域的项目ID,请在华为云控制台“我的凭证 > API凭证”页面上查看项目ID。具体请参见 API凭证

3. 安装SDK

您可以通过Maven方式获取和安装SDK,首先需要在您的操作系统中下载并安装Maven ,安装完成后您只需要在Java项目的pom.xml文件中加入相应的依赖项即可。

使用服务端SDK前,您需要安装“huaweicloud-sdk-core”和“huaweicloud-sdk-roma”,具体的SDK版本号请参见 SDK开发中心

<dependency> <groupId>com.huaweicloud.sdk</groupId> <artifactId>huaweicloud-sdk-core</artifactId> <version>3.0.73</version> </dependency>
<dependency> <groupId>com.huaweicloud.sdk</groupId> <artifactId>huaweicloud-sdk-roma</artifactId> <version>3.0.73</version> </dependency>
<dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.5</version> </dependency>
<dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.2.3</version> </dependency>
<dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-core</artifactId> <version>1.2.3</version> </dependency>

4. 开始使用

4.1 导入依赖模块

// 用户身份认证 import com.huaweicloud.sdk.core.auth.BasicCredentials; // 请求异常类 import com.huaweicloud.sdk.core.exception.ClientRequestException; import com.huaweicloud.sdk.core.exception.ServerResponseException; // 导入roma的客户端 import com.huaweicloud.sdk.roma.v2.RomaClient; // 导入创建API分组的请求和响应类 import com.huaweicloud.sdk.roma.v2.model.ApiGroupCreate; import com.huaweicloud.sdk.roma.v2.model.CreateApiGroupV2Request; import com.huaweicloud.sdk.roma.v2.model.CreateApiGroupV2Response; //导入创建API的请求和响应类 import com.huaweicloud.sdk.roma.v2.model.ApiCreate; import com.huaweicloud.sdk.roma.v2.model.BackendApiCreate; import com.huaweicloud.sdk.roma.v2.model.CreateApiV2Request; import com.huaweicloud.sdk.roma.v2.model.CreateApiV2Response; //导入发布API的请求和响应类 import com.huaweicloud.sdk.roma.v2.model.ApiActionInfo; import com.huaweicloud.sdk.roma.v2.model.CreateOrDeletePublishRecordForApiV2Request; import com.huaweicloud.sdk.roma.v2.model.CreateOrDeletePublishRecordForApiV2Response; //导入绑定独立域名的请求和响应类 import com.huaweicloud.sdk.roma.v2.model.AssociateDomainV2Request; import com.huaweicloud.sdk.roma.v2.model.AssociateDomainV2Response; import com.huaweicloud.sdk.roma.v2.model.UrlDomainCreate; // 日志打印 import org.slf4j.Logger; import org.slf4j.LoggerFactory;

4.2 测试案例

public class CreateAndOpenApiWithVpcBackendDemo { private static final Logger logger = LoggerFactory.getLogger(CreateAndOpenApiWithVpcBackendDemo.class.getName()); public static void main(String[] args) { /* * 初始化认证信息,相关参数说明如下所示: * - ak:华为云账号Access Key。 * - sk:华为云账号Secret Access Key 。 */ // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全; // 本示例以ak和sk保存在环境变量中来实现身份认证为例,运行示例前请先在本地环境中设置环境变量HUAWEICLOUD_SDK_AK和HUAWEICLOUD_SDK_SK。 String ak = System.getenv("HUAWEICLOUD_SDK_AK"); String sk = System.getenv("HUAWEICLOUD_SDK_SK"); String projectId = "<YOUR PROJECT ID>"; String romaEndpoint = "<ROMA ENDPOINT>"; String instanceId = "<YOUR INSTANCE ID>"; String groupName = "<YOUR API GROUP NAME>"; String apiName = "<YOUR API NAME>"; String romaAppId = "<YOU ROMA APP ID>"; // 初始化认证信息 BasicCredentials auth = new BasicCredentials() .withAk(ak) .withSk(sk) .withProjectId(projectId); // 初始化RomaClient客户端 RomaClient romaClient = RomaClient.newBuilder() .withCredential(auth) .withEndpoint(romaEndpoint) .build(); // 创建API分组 String groupId = null; try { // 构造请求参数 CreateApiGroupV2Request apiGroupRequest = new CreateApiGroupV2Request(); apiGroupRequest.setInstanceId(instanceId); ApiGroupCreate apiGroupBody = new ApiGroupCreate(); apiGroupBody.setName(groupName); apiGroupBody.setRomaAppId(romaAppId); apiGroupRequest.setBody(apiGroupBody); // 接收响应参数 CreateApiGroupV2Response apiGroupResponse = romaClient.createApiGroupV2(apiGroupRequest); groupId = apiGroupResponse.getId(); logger.info(groupId); } catch (ClientRequestException e) { logger.error(String.valueOf(e.getHttpStatusCode())); logger.error(e.toString()); } catch (ServerResponseException e) { logger.error(String.valueOf(e.getHttpStatusCode())); logger.error(e.getMessage()); } // 创建VPC通道 String vpcChannelId = null; try { // 构造请求参数 CreateVpcChannelV2Request request = new CreateVpcChannelV2Request(); request.setInstanceId(instanceId); VpcCreate body = new VpcCreate(); body.setName("<YOUR VPC CHANNEL NAME>"); body.setPort(80); request.setBody(body); // 接收响应参数 CreateVpcChannelV2Response response = romaClient.createVpcChannelV2(request); vpcChannelId = response.getId(); logger.info(vpcChannelId); } catch (ClientRequestException e) { logger.error(String.valueOf(e.getHttpStatusCode())); logger.error(e.toString()); } catch (ServerResponseException e) { logger.error(String.valueOf(e.getHttpStatusCode())); logger.error(e.getMessage()); } // 绑定域名 try { // 构造请求参数 AssociateDomainV2Request associateDomainRequest = new AssociateDomainV2Request(); associateDomainRequest.setInstanceId(instanceId); associateDomainRequest.setGroupId(groupId); UrlDomainCreate associateDomainBody = new UrlDomainCreate(); associateDomainBody.setUrlDomain("<YOUR URL DOMAIN>"); associateDomainRequest.setBody(associateDomainBody); // 接收响应参数 AssociateDomainV2Response associateDomainResponse = romaClient.associateDomainV2(associateDomainRequest); logger.info(associateDomainResponse.toString()); } catch (ClientRequestException e) { logger.error(String.valueOf(e.getHttpStatusCode())); logger.error(e.toString()); } catch (ServerResponseException e) { logger.error(String.valueOf(e.getHttpStatusCode())); logger.error(e.getMessage()); } // 创建API String apiId = null; try { // 构造请求参数 CreateApiV2Request apiRequest = new CreateApiV2Request(); apiRequest.setInstanceId(instanceId); ApiCreate apiBody = new ApiCreate(); apiBody.setName(apiName); apiBody.setGroupId(groupId); apiBody.setType(ApiCreate.TypeEnum.NUMBER_1); apiBody.setAuthType(ApiCreate.AuthTypeEnum.APP); apiBody.setReqMethod(ApiCreate.ReqMethodEnum.GET); apiBody.setReqProtocol(ApiCreate.ReqProtocolEnum.HTTPS); apiBody.setReqUri("<YOUR REQUEST URI>"); apiBody.setBackendType(ApiCreate.BackendTypeEnum.HTTP); BackendApiCreate backendApiCreate = new BackendApiCreate(); backendApiCreate.setReqMethod(BackendApiCreate.ReqMethodEnum.GET); backendApiCreate.setReqProtocol(BackendApiCreate.ReqProtocolEnum.HTTPS); backendApiCreate.setReqUri("<YOUR BACKEND REQUEST URI>"); backendApiCreate.setVpcChannelStatus(BackendApiCreate.VpcChannelStatusEnum.NUMBER_1); backendApiCreate.setTimeout(30); VpcInfo vpcInfo = new VpcInfo(); vpcInfo.setVpcChannelId(vpcChannelId); backendApiCreate.setVpcChannelInfo(vpcInfo); apiBody.setBackendApi(backendApiCreate); apiRequest.setBody(apiBody); // 接收响应参数 CreateApiV2Response apiResponse = romaClient.createApiV2(apiRequest); apiId = apiResponse.getId(); logger.info(apiId); } catch (ClientRequestException e) { logger.error(String.valueOf(e.getHttpStatusCode())); logger.error(e.toString()); } catch (ServerResponseException e) { logger.error(String.valueOf(e.getHttpStatusCode())); logger.error(e.getMessage()); } // 发布API try { // 构造请求参数 CreateOrDeletePublishRecordForApiV2Request publishApiRequest = new CreateOrDeletePublishRecordForApiV2Request(); publishApiRequest.setInstanceId(instanceId); ApiActionInfo publishApiBody = new ApiActionInfo(); publishApiBody.setApiId(apiId); publishApiBody.setAction(ApiActionInfo.ActionEnum.ONLINE); publishApiBody.setEnvId("DEFAULT_ENVIRONMENT_RELEASE_ID"); publishApiRequest.setBody(publishApiBody); // 接收响应参数 CreateOrDeletePublishRecordForApiV2Response publishApiResponse = romaClient.createOrDeletePublishRecordForApiV2(publishApiRequest); logger.info(publishApiResponse.toString()); } catch (ClientRequestException e) { logger.error(String.valueOf(e.getHttpStatusCode())); logger.error(e.toString()); } catch (ServerResponseException e) { logger.error(String.valueOf(e.getHttpStatusCode())); logger.error(e.getMessage()); } } }

5. FAQ

暂无

6. 参考

更多信息请参考 ROMA-Connect网关服务文档

7. 修订记录

发布日期 文档版本 修订说明
2021-12-30 1.0 文档首次发布