Skip to content

Commit 1361ed2

Browse files
committed
Add OpenAPI to get application information (/apps)
1 parent 21e76b3 commit 1361ed2

File tree

5 files changed

+176
-14
lines changed

5 files changed

+176
-14
lines changed

apollo-openapi/src/main/java/com/ctrip/framework/apollo/openapi/client/ApolloOpenApiClient.java

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import com.ctrip.framework.apollo.openapi.client.service.NamespaceOpenApiService;
77
import com.ctrip.framework.apollo.openapi.client.service.ReleaseOpenApiService;
88
import com.ctrip.framework.apollo.openapi.dto.NamespaceReleaseDTO;
9+
import com.ctrip.framework.apollo.openapi.dto.OpenAppDTO;
910
import com.ctrip.framework.apollo.openapi.dto.OpenAppNamespaceDTO;
1011
import com.ctrip.framework.apollo.openapi.dto.OpenEnvClusterDTO;
1112
import com.ctrip.framework.apollo.openapi.dto.OpenItemDTO;
@@ -17,12 +18,13 @@
1718
import com.google.common.collect.Lists;
1819
import com.google.gson.Gson;
1920
import com.google.gson.GsonBuilder;
20-
import java.util.List;
2121
import org.apache.http.client.config.RequestConfig;
2222
import org.apache.http.impl.client.CloseableHttpClient;
2323
import org.apache.http.impl.client.HttpClients;
2424
import org.apache.http.message.BasicHeader;
2525

26+
import java.util.List;
27+
2628
/**
2729
* This class contains collections of methods to access Apollo Open Api.
2830
* <br />
@@ -58,6 +60,20 @@ public List<OpenEnvClusterDTO> getEnvClusterInfo(String appId) {
5860
return appService.getEnvClusterInfo(appId);
5961
}
6062

63+
/**
64+
* Get all App information
65+
*/
66+
public List<OpenAppDTO> getAllApps() {
67+
return appService.getAppsInfo(null);
68+
}
69+
70+
/**
71+
* Get App information by app ids
72+
*/
73+
public List<OpenAppDTO> getAppsByIds(List<String> appIds) {
74+
return appService.getAppsInfo(appIds);
75+
}
76+
6177
/**
6278
* Get the namespaces
6379
*/

apollo-openapi/src/main/java/com/ctrip/framework/apollo/openapi/client/service/AppOpenApiService.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package com.ctrip.framework.apollo.openapi.client.service;
22

3+
import com.ctrip.framework.apollo.openapi.dto.OpenAppDTO;
34
import com.ctrip.framework.apollo.openapi.dto.OpenEnvClusterDTO;
5+
import com.google.common.base.Joiner;
46
import com.google.gson.Gson;
57
import com.google.gson.reflect.TypeToken;
68
import java.lang.reflect.Type;
@@ -12,6 +14,8 @@
1214
public class AppOpenApiService extends AbstractOpenApiService {
1315
private static final Type OPEN_ENV_CLUSTER_DTO_LIST_TYPE = new TypeToken<List<OpenEnvClusterDTO>>() {
1416
}.getType();
17+
private static final Type OPEN_APP_DTO_LIST_TYPE = new TypeToken<List<OpenAppDTO>>() {
18+
}.getType();
1519

1620
public AppOpenApiService(CloseableHttpClient client, String baseUrl, Gson gson) {
1721
super(client, baseUrl, gson);
@@ -28,4 +32,19 @@ public List<OpenEnvClusterDTO> getEnvClusterInfo(String appId) {
2832
throw new RuntimeException(String.format("Load env cluster information for appId: %s failed", appId), ex);
2933
}
3034
}
35+
36+
public List<OpenAppDTO> getAppsInfo(List<String> appIds) {
37+
String path = "apps";
38+
39+
if (appIds != null && !appIds.isEmpty()) {
40+
String param = Joiner.on(",").join(appIds);
41+
path = String.format("apps?appIds=%s", escapeParam(param));
42+
}
43+
44+
try (CloseableHttpResponse response = get(path)) {
45+
return gson.fromJson(EntityUtils.toString(response.getEntity()), OPEN_APP_DTO_LIST_TYPE);
46+
} catch (Throwable ex) {
47+
throw new RuntimeException(String.format("Load app information for appIds: %s failed", appIds), ex);
48+
}
49+
}
3150
}
Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
package com.ctrip.framework.apollo.openapi.dto;
2+
3+
public class OpenAppDTO extends BaseDTO {
4+
5+
private String name;
6+
7+
private String appId;
8+
9+
private String orgId;
10+
11+
private String orgName;
12+
13+
private String ownerName;
14+
15+
private String ownerEmail;
16+
17+
public String getAppId() {
18+
return appId;
19+
}
20+
21+
public String getName() {
22+
return name;
23+
}
24+
25+
public String getOrgId() {
26+
return orgId;
27+
}
28+
29+
public String getOrgName() {
30+
return orgName;
31+
}
32+
33+
public String getOwnerEmail() {
34+
return ownerEmail;
35+
}
36+
37+
public String getOwnerName() {
38+
return ownerName;
39+
}
40+
41+
public void setAppId(String appId) {
42+
this.appId = appId;
43+
}
44+
45+
public void setName(String name) {
46+
this.name = name;
47+
}
48+
49+
public void setOrgId(String orgId) {
50+
this.orgId = orgId;
51+
}
52+
53+
public void setOrgName(String orgName) {
54+
this.orgName = orgName;
55+
}
56+
57+
public void setOwnerEmail(String ownerEmail) {
58+
this.ownerEmail = ownerEmail;
59+
}
60+
61+
public void setOwnerName(String ownerName) {
62+
this.ownerName = ownerName;
63+
}
64+
65+
@Override
66+
public String toString() {
67+
final StringBuilder sb = new StringBuilder("OpenAppDTO{");
68+
sb.append("name='").append(name).append('\'');
69+
sb.append(", appId='").append(appId).append('\'');
70+
sb.append(", orgId='").append(orgId).append('\'');
71+
sb.append(", orgName='").append(orgName).append('\'');
72+
sb.append(", ownerName='").append(ownerName).append('\'');
73+
sb.append(", ownerEmail='").append(ownerEmail).append('\'');
74+
sb.append(", dataChangeCreatedBy='").append(dataChangeCreatedBy).append('\'');
75+
sb.append(", dataChangeLastModifiedBy='").append(dataChangeLastModifiedBy).append('\'');
76+
sb.append(", dataChangeCreatedTime=").append(dataChangeCreatedTime);
77+
sb.append(", dataChangeLastModifiedTime=").append(dataChangeLastModifiedTime);
78+
sb.append('}');
79+
return sb.toString();
80+
}
81+
}

apollo-portal/src/main/java/com/ctrip/framework/apollo/openapi/util/OpenApiBeanUtils.java

Lines changed: 36 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,34 @@
11
package com.ctrip.framework.apollo.openapi.util;
22

3-
import com.ctrip.framework.apollo.common.dto.*;
4-
import com.ctrip.framework.apollo.openapi.dto.*;
5-
import com.google.common.base.Preconditions;
6-
import com.google.common.reflect.TypeToken;
7-
import com.google.gson.Gson;
8-
3+
import com.ctrip.framework.apollo.common.dto.GrayReleaseRuleDTO;
4+
import com.ctrip.framework.apollo.common.dto.GrayReleaseRuleItemDTO;
5+
import com.ctrip.framework.apollo.common.dto.ItemDTO;
6+
import com.ctrip.framework.apollo.common.dto.NamespaceLockDTO;
7+
import com.ctrip.framework.apollo.common.dto.ReleaseDTO;
8+
import com.ctrip.framework.apollo.common.entity.App;
99
import com.ctrip.framework.apollo.common.entity.AppNamespace;
1010
import com.ctrip.framework.apollo.common.utils.BeanUtils;
11+
import com.ctrip.framework.apollo.openapi.dto.OpenAppDTO;
12+
import com.ctrip.framework.apollo.openapi.dto.OpenAppNamespaceDTO;
13+
import com.ctrip.framework.apollo.openapi.dto.OpenGrayReleaseRuleDTO;
14+
import com.ctrip.framework.apollo.openapi.dto.OpenGrayReleaseRuleItemDTO;
15+
import com.ctrip.framework.apollo.openapi.dto.OpenItemDTO;
16+
import com.ctrip.framework.apollo.openapi.dto.OpenNamespaceDTO;
17+
import com.ctrip.framework.apollo.openapi.dto.OpenNamespaceLockDTO;
18+
import com.ctrip.framework.apollo.openapi.dto.OpenReleaseDTO;
1119
import com.ctrip.framework.apollo.portal.entity.bo.ItemBO;
1220
import com.ctrip.framework.apollo.portal.entity.bo.NamespaceBO;
13-
21+
import com.google.common.base.Preconditions;
22+
import com.google.common.reflect.TypeToken;
23+
import com.google.gson.Gson;
1424
import org.springframework.util.CollectionUtils;
1525

1626
import java.lang.reflect.Type;
17-
import java.util.*;
27+
import java.util.Collections;
28+
import java.util.LinkedList;
29+
import java.util.List;
30+
import java.util.Map;
31+
import java.util.Set;
1832
import java.util.stream.Collectors;
1933

2034
public class OpenApiBeanUtils {
@@ -134,4 +148,18 @@ public static GrayReleaseRuleDTO transformToGrayReleaseRuleDTO(OpenGrayReleaseRu
134148
return grayReleaseRuleDTO;
135149
}
136150

151+
public static List<OpenAppDTO> transformFromApps(final List<App> apps) {
152+
if (CollectionUtils.isEmpty(apps)) {
153+
return Collections.emptyList();
154+
}
155+
return apps.stream()
156+
.map(OpenApiBeanUtils::transformFromApp)
157+
.collect(Collectors.toList());
158+
}
159+
160+
public static OpenAppDTO transformFromApp(final App app) {
161+
Preconditions.checkArgument(app != null);
162+
163+
return BeanUtils.transform(OpenAppDTO.class, app);
164+
}
137165
}

apollo-portal/src/main/java/com/ctrip/framework/apollo/openapi/v1/controller/AppController.java

Lines changed: 23 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,20 @@
11
package com.ctrip.framework.apollo.openapi.v1.controller;
22

33
import com.ctrip.framework.apollo.common.dto.ClusterDTO;
4+
import com.ctrip.framework.apollo.common.entity.App;
45
import com.ctrip.framework.apollo.common.utils.BeanUtils;
56
import com.ctrip.framework.apollo.core.enums.Env;
7+
import com.ctrip.framework.apollo.openapi.dto.OpenAppDTO;
68
import com.ctrip.framework.apollo.openapi.dto.OpenEnvClusterDTO;
9+
import com.ctrip.framework.apollo.openapi.util.OpenApiBeanUtils;
710
import com.ctrip.framework.apollo.portal.component.PortalSettings;
11+
import com.ctrip.framework.apollo.portal.service.AppService;
812
import com.ctrip.framework.apollo.portal.service.ClusterService;
9-
import org.springframework.web.bind.annotation.GetMapping;
10-
import org.springframework.web.bind.annotation.PathVariable;
11-
import org.springframework.web.bind.annotation.RequestMapping;
12-
import org.springframework.web.bind.annotation.RestController;
13+
import com.google.common.collect.Sets;
14+
import org.springframework.util.StringUtils;
15+
import org.springframework.web.bind.annotation.*;
1316

17+
import java.util.ArrayList;
1418
import java.util.LinkedList;
1519
import java.util.List;
1620

@@ -20,10 +24,14 @@ public class AppController {
2024

2125
private final PortalSettings portalSettings;
2226
private final ClusterService clusterService;
27+
private final AppService appService;
2328

24-
public AppController(final PortalSettings portalSettings, final ClusterService clusterService) {
29+
public AppController(final PortalSettings portalSettings,
30+
final ClusterService clusterService,
31+
final AppService appService) {
2532
this.portalSettings = portalSettings;
2633
this.clusterService = clusterService;
34+
this.appService = appService;
2735
}
2836

2937
@GetMapping(value = "/apps/{appId}/envclusters")
@@ -46,4 +54,14 @@ public List<OpenEnvClusterDTO> loadEnvClusterInfo(@PathVariable String appId){
4654

4755
}
4856

57+
@GetMapping("/apps")
58+
public List<OpenAppDTO> findApps(@RequestParam(value = "appIds", required = false) String appIds) {
59+
final List<App> apps = new ArrayList<>();
60+
if (StringUtils.isEmpty(appIds)) {
61+
apps.addAll(appService.findAll());
62+
} else {
63+
apps.addAll(appService.findByAppIds(Sets.newHashSet(appIds.split(","))));
64+
}
65+
return OpenApiBeanUtils.transformFromApps(apps);
66+
}
4967
}

0 commit comments

Comments
 (0)