
# 使用API购买并查询CFW
#### 应用场景
对于专业人士而言，使用API的效率高于控制台操作，云防火墙提供多个功能的API接口，请参见[API接口](https://support.huaweicloud.com/api-cfw/cfw_02_0012.html)。
本文介绍如何通过API的方式快速购买和查询标准版防火墙实例。
#### 前提条件
使用IAM用户时，已授予该IAM用户BSS Administrator和CFW FullAccess权限，详细操作请参见[创建用户组并授权使用CFW](https://support.huaweicloud.com/usermanual-cfw/cfw_01_0050.html)。
#### 购买并查询标准版防火墙
1. [登录API Explorer控制台](https://console.huaweicloud.com/apiexplorer/#/openapi/overview)。
2. 在左侧导航栏中，单击"所有产品"，选择"安全与合规 \> 云防火墙"。
3. 购买标准版防火墙：选择"创建防火墙"接口，填写关键参数如下，其余参数按需填写： 
   - Region：选择云资产所在的区域。
   
   - project_id：项目ID，自动获取。
   
   - flavor：填写规格信息。
     - version：防火墙版本，本文购买标准版，选择"Standard"， 各版本之间的差异请参见[服务版本差异](https://support.huaweicloud.com/productdesc-cfw/cfw_01_0034.html)。
      
   
   - charge_info：填写计费类型信息。
     - charge_mode：计费模式，本文购买包年/包月，填写"prePaid"。
     
     - is_auto_renew：是否自动续订，本文以购买一个月为例，选择"false"。
     
     - is_auto_pay：支付方式是否选择自动支付，本文选择自动支付，选择"true"。
      
   
   
   
   
4. 查询购买的防火墙：选择"查询防火墙列表"接口，填写关键参数如下，其余参数按需填写： 
   - Region：选择防火墙所在的区域。
   
   - project_id：项目ID，自动获取。
   
   - key_word：填写关键字，例如防火墙的名称。
   
   - limit：每页显示的结果数量，本文查询一个防火墙，此处填"1"。
   
   - offset：偏移量，指定返回记录的开始位置，此处填0。
   
   
   
   
 
#### 代码示例
请准备基础认证信息：
- ak: 华为账号Access Key，获取方式请参见[获取AK/SK](https://support.huaweicloud.com/iam_faq/iam_01_0618.html)。
- sk: 华为账号Secret Access Key，获取方式请参见[获取AK/SK](https://support.huaweicloud.com/iam_faq/iam_01_0618.html)。
- Region：区域ID，例如cn-east-3，获取方式请参见[地区和终端节点](https://developer.huaweicloud.com/endpoint?CFW)。
 
```
import com.huaweicloud.sdk.cfw.v1.CfwClient;
import com.huaweicloud.sdk.cfw.v1.model.*;
import com.huaweicloud.sdk.cfw.v1.region.CfwRegion;
import com.huaweicloud.sdk.core.auth.BasicCredentials;
import com.huaweicloud.sdk.core.exception.ConnectionException;
import com.huaweicloud.sdk.core.exception.RequestTimeoutException;
import com.huaweicloud.sdk.core.exception.ServiceResponseException;
import java.util.ArrayList;
import java.util.List;
public class CreateFirewallSolution {
    public static void main(String[] args) {
        String ak = "xxxx";
        String sk = "xxxx";
        BasicCredentials auth = new BasicCredentials().withAk(ak).withSk(sk);
        CfwClient client = CfwClient.newBuilder()
            .withCredential(auth)
            .withRegion(CfwRegion.valueOf("xxxx"))
            .build();
        //创建创建防火墙请求体
        CreateFirewallRequest request = new CreateFirewallRequest();
        CreateFirewallReq body = new CreateFirewallReq();
        body.setName("cfwtest");
        body.setEnterpriseProjectId("0");
        CreateFirewallReqTags createFirewallReqTags = new CreateFirewallReqTags();
        createFirewallReqTags.setKey("TagKey");
        createFirewallReqTags.setValue("TagValue");
        List<CreateFirewallReqTags> createFirewallReqTagsList = new ArrayList<>();
        createFirewallReqTagsList.add(createFirewallReqTags);
        body.setTags(createFirewallReqTagsList);
        CreateFirewallReqFlavor flavor = new CreateFirewallReqFlavor();
        flavor.setVersion(CreateFirewallReqFlavor.VersionEnum.STANDARD);
        body.setFlavor(flavor);
        CreateFirewallReqChargeInfo createFirewallReqChargeInfo = new CreateFirewallReqChargeInfo();
        createFirewallReqChargeInfo.setChargeMode("prePaid");
        createFirewallReqChargeInfo.setPeriodType("month");
        createFirewallReqChargeInfo.setPeriodNum(1);
        createFirewallReqChargeInfo.setIsAutoPay(true);
        createFirewallReqChargeInfo.setIsAutoRenew(true);
        body.setChargeInfo(createFirewallReqChargeInfo);
        request.setBody(body);
        //创建查询防火墙请求体
        ListFirewallListRequest listFirewallListRequest = new ListFirewallListRequest();
        QueryFireWallInstanceDto queryFireWallInstanceDto = new QueryFireWallInstanceDto();
        queryFireWallInstanceDto.setOffset(0);
        queryFireWallInstanceDto.setLimit(1);
        queryFireWallInstanceDto.setKeyWord("cfwtest");
        listFirewallListRequest.setBody(queryFireWallInstanceDto);
        try {
            //创建防火墙
            CreateFirewallResponse createFirewallResponse = client.createFirewall(request);
            System.out.println(createFirewallResponse.toString());
            //查询防火墙列表
            ListFirewallListResponse listFirewallListResponse = client.listFirewallList(listFirewallListRequest);
            System.out.println(listFirewallListResponse.toString());
        } catch (ConnectionException e) {
            System.out.println(e.getMessage());
        } catch (RequestTimeoutException e) {
            System.out.println(e.getMessage());
        } catch (ServiceResponseException e) {
            System.out.println(e.getHttpStatusCode());
            System.out.println(e.getErrorCode());
            System.out.println(e.getErrorMsg());
        }
    }
}
```
