本文为您介绍如何在App Studio中查看用户有权限调用的数据服务,并通过App Studio生成快速访问数据服务API的代码片。

如果您想要获取更多数据服务API的申请、SDK以及调用方法,请参见数据服务

准备工作

开始操作前,您需要准备以下内容:
  • 确认在数据服务中有相关工作空间的权限和API。
    由于本文内容适用于有权限的数据服务API, 所以请首先进入数据服务页面,查看是否有DataWorks工作空间,并查看相应工作空间下是否存在有权限的API。
  • 在App Studio页面准备一个Java项目。

    以springboot类型的项目为例,为您介绍代码片生成的功能。

    1. 进入App Studio页面,单击工作空间页面的新建代码工程
    2. 填写新建项目对话框中的工程名工程描述选择运行环境springbootspringboot
    3. 配置完成后,单击提交
    项目创建完成后,请确保pom.xml中有数据服务的依赖。
    <dependency>
      <groupId>com.aliyun.dataworks</groupId>
      <artifactId>aliyun-dataworks-dataservice-java-sdk</artifactId>
      <version>0.0.1-aliyun</version>
    </dependency>

在App Studio中使用数据服务

您可以直接在代码中使用数据服务,也可以在可视化搭建中使用数据服务。

  • 直接在代码中使用数据服务。

    此步骤将为您介绍如何在App Studio中方便地根据关键字、项目和业务分组查看可用的数据服务,同时利用生成代码片的功能快速生成,并调用某个数据服务API的代码。

    1. 查看数据服务API列表。
      单击App Studio页面右侧的Data,为您展示数据服务API列表。支持根据API名称、工作空间和服务分组进行筛选。API列表
    2. 数据服务页面新增API。

      单击右上角的前往DataService新增API,跳转至数据服务页面新增API,以满足调用API的需求。

    3. 查看数据服务API详情。
      单击相应数据服务API右侧的详情,即可跳转至数据服务页面查看API详情。
    4. 快速生成访问代码。

      App Studio支持一键生成访问代码的方式, 自动填充appkey、appsecret,生成样例代码,方便您直接插入项目。

      单击相应数据服务API右侧的选用,即可打开包含样例访问代码的详情页。选用
      完整的controller示例如下所示,仅供参考。在生成的InvokeApi2252方法中,您访问这个数据服务需要的path、host、key和secret都会被自动填充,ApiRequest2252DTO则包含了访问该服务的所有参数。
      package com.alibaba.dataworks.dataservice;
      import com.aliyun.dataworks.dataservice.model.api.protocol.ApiProtocol;
      import com.aliyun.dataworks.dataservice.sdk.facade.DataApiClient;
      import com.aliyun.dataworks.dataservice.sdk.loader.http.Request;
      import org.slf4j.Logger;
      import org.slf4j.LoggerFactory;
      import org.springframework.beans.factory.annotation.Autowired;
      import org.springframework.web.bind.annotation.RequestBody;
      import org.springframework.web.bind.annotation.RequestMapping;
      import org.springframework.web.bind.annotation.RequestMethod;
      import org.springframework.web.bind.annotation.RestController;
      import java.lang.reflect.Field;
      import java.util.HashMap;
      /**
       * @author ****
       * @date 2019-03-21T17:23:17.040
       * - 使用前,请确保pom.xml包含最新的data-service-client依赖。
       *     <dependency>
       *         <groupId>com.alibaba.dataworks</groupId>
       *         <artifactId>data-service-client</artifactId>
       *         <version>${latest-data-service-version}</version>
       *     </dependency>
       *  - 使用前,确保配置spring config类,需要单独配置,不可与其他config合并。
       *     @Configuration
       *     @ComponentScan(basePackageClasses = { DsClientConfig.class })
       *     public class DsClientConfig {
       *         @Bean
       *         public BeanRegistryProcessor beanRegistryProcessor(){
       *             return new BeanRegistryProcessor();
       *         }
       *     }
       */
      @RestController
      public class Test2252Controller {
          private Logger logger = LoggerFactory.getLogger(Test2252Controller.class);
          @Autowired
          private DataApiClient dataApiClient;
          /**
           * Sample Result:
           * {
           *     "data": {
           *         "totalNum": 1000,
           *         "pageSize": 100,
           *         "rows": [
           *             {
           *                 "pageNum": "...", // 分页默认参数:页编号,Integer类型。
           *                 "pageSize": "...", // 分页默认参数:页大小,Integer类型。
           *                 "totalNum": "...", // 分页默认参数:总记录数,Integer类型。 
           *                 "id": "...", // Integer类型。
           *                 "name": "...", // String类型。
           *                 "sex": "...", // String类型。
           *                 "age": "...", // Integer类型。
           *             }
           *             ......
           *         ],
           *         "pageNum": 1
           *     },
           *     "errCode": 0,
           *     "requestId": "478cae2f-0***-42fb-a439-c0***e6f",
           *     "errMsg": "success"
           * }
           */
          private HashMap InvokeApi2252(ApiRequest2252DTO dto) throws Exception {
              Request request = new Request();
              request.setMethod("GET");
              request.setAppKey("15810204");
              request.setAppSecret("*******************************");
              request.setHost("http://0e5e6cd70******5e64****hai.a***pi.com");
              request.setPath("/test");
              for (Field f : dto.getClass().getDeclaredFields()) {
                  try{
                      if(f.get(dto)!= null) {
                          request.getBodys().put(f.getName(), f.get(dto).toString());
                      }
                  }catch(Exception e){}
              }
              request.setApiProtocol(ApiProtocol.HTTP);
              return dataApiClient.dataLoad(request);
          }
          /**
           * Response:
           */
          @RequestMapping(value = "/sample/test2252", method = RequestMethod.POST)
          public HashMap testApi(@RequestBody ApiRequest2252DTO dto) throws Exception {
              return InvokeApi2252(dto);
          }
      }
      /**
       * Request
       */
      class ApiRequest2252DTO {
          public Integer pageNum;
          public Integer pageSize;
          public Integer id;
          public String name;
          public String sex;
          public Integer age;
      }
      说明 您可以参考生成的代码样例,也可以直接单击保存,将代码添加到当前代码目录的dataservice包中。
  • 在可视化搭建中使用数据服务。

    可视化搭建的组件和数据服务接口进行了深度的融合,数据服务返回数据的默认格式,即为可视化组件接收数据的格式。可以实现即配即用,详情请参见可视化搭建