参考官网:https://www.apolloconfig.com/#/zh/usage/apollo-open-api-platform
公共接口访问密钥配置(开发平台授权管理)
Apollo管理员在 http://{portal_address}/open/manage.html 页面给token赋权。赋权之后,第三方应用就可以通过Apollo提供的Http REST接口来管理已授权的Namespace的配置了。
对应数据库表:consumer*
token: f74469cfc811af4d66f43b4d5a230a04b195ddeb
普通http访问rest,设置 header
任何语言的第三方应用都可以调用Apollo的Open API,在调用接口时,需要设置注意以下两点:
- Http Header中增加一个Authorization字段,字段值为申请的token
- Http Header的Content-Type字段需要设置成application/json;charset=UTF-8
公共接口调用client 端
引入apollo-openapi依赖:
点击复制错误复制成功<dependency>
<groupId>com.ctrip.framework.apollo</groupId>
<artifactId>apollo-openapi</artifactId>
<version>1.7.0</version>
</dependency>
在程序中构造ApolloOpenApiClient:String portalUrl = "http://localhost:8070"; // portal url
String token = "e16e5cd903fd0c97a116c873b448544b9d086de9"; // 申请的token
ApolloOpenApiClient client = ApolloOpenApiClient.newBuilder()
.withPortalUrl(portalUrl)
.withToken(token)
.build();
公共接口
参数说明
参数名 | 参数说明 | 参数名 |
---|---|---|
env | 所管理的配置环境 | env |
appId | 所管理的配置AppId | appId |
clusterName | 所管理的配置集群名, 一般情况下传入 default 即可。如果是特殊集群,传入相应集群的名称即可 | clusterName |
namespaceName | 所管理的Namespace的名称,如果是非properties格式,需要加上后缀名,如sample.yml | namespaceName |
客户端 apiclient 使用小例
package com.hbte.sharp.demo.apollo;
import com.ctrip.framework.apollo.openapi.client.ApolloOpenApiClient;
import com.ctrip.framework.apollo.openapi.dto.OpenItemDTO;
/**
* 测试api
*
* @author Bruce
* @date 2021/5/27 17:30
*/
public class TestClientApi {
public static void main(String[] args) {
setConfig();
}
public static void setConfig() {
String portalUrl = "http://localhost:8070"; // portal url
String token = "f74469cfc811af4d66f43b4d5a230a04b195ddeb"; // 申请的token
ApolloOpenApiClient client = ApolloOpenApiClient.newBuilder()
.withPortalUrl(portalUrl)
.withToken(token)
.build();
OpenItemDTO itemDto = new OpenItemDTO();
itemDto.setComment("后端api发布");
itemDto.setKey("content");
itemDto.setValue("spring:\n" +
" application:\n" +
" name: apollo-adminservice\n" +
" profiles:\n" +
" active: ${apollo_profile}\n" +
"\n" +
"ctrip:\n" +
" appid: 100003172\n" +
" \n" +
"server:\n" +
" port: 8090\n" +
"\n" +
"logging:\n" +
" file:\n" +
" name: /opt/logs/100003172/apollo-adminservice.log\n" +
"\n" +
"eureka:\n" +
" instance:\n" +
" hostname: ${hostname:localhost}\n" +
" preferIpAddress: true\n" +
" status-page-url-path: /info\n" +
" health-check-url-path: /health\n" +
" client:\n" +
" serviceUrl:\n" +
" # This setting will be overridden by eureka.service.url setting from ApolloConfigDB.ServerConfig or System Property\n" +
" # see com.ctrip.framework.apollo.biz.eureka.ApolloEurekaClientConfig\n" +
" defaultZone: http://${eureka.instance.hostname}:8080/eureka/\n" +
" healthcheck:\n" +
" enabled: true\n" +
" eurekaServiceUrlPollIntervalSeconds: 60\n" +
"\n" +
"management:\n" +
" health:\n" +
" status:\n" +
" order: DOWN, OUT_OF_SERVICE, UNKNOWN, UP\n");
itemDto.setDataChangeCreatedBy("apollo");
client.createOrUpdateItem("test-demo", "DEV", "register", "yaml.yaml", itemDto);
}
}
注意,可能汇报 403 访问拒绝,此时不要慌,进入管理的项目的相应 namespace 点一下授权!!!