参考官网:https://www.apolloconfig.com/#/zh/usage/apollo-open-api-platform

公共接口访问密钥配置(开发平台授权管理)

Apollo管理员在 http://{portal_address}/open/manage.html 页面给token赋权。赋权之后,第三方应用就可以通过Apollo提供的Http REST接口来管理已授权的Namespace的配置了。

对应数据库表:consumer*

image.png
token: f74469cfc811af4d66f43b4d5a230a04b195ddeb

普通http访问rest,设置 header

任何语言的第三方应用都可以调用Apollo的Open API,在调用接口时,需要设置注意以下两点:

  • Http Header中增加一个Authorization字段,字段值为申请的token
  • Http Header的Content-Type字段需要设置成application/json;charset=UTF-8

    公共接口调用client 端

    引入apollo-openapi依赖:
    1. <dependency>
    2. <groupId>com.ctrip.framework.apollo</groupId>
    3. <artifactId>apollo-openapi</artifactId>
    4. <version>1.7.0</version>
    5. </dependency>
    点击复制错误复制成功
    在程序中构造ApolloOpenApiClient:
    1. String portalUrl = "http://localhost:8070"; // portal url
    2. String token = "e16e5cd903fd0c97a116c873b448544b9d086de9"; // 申请的token
    3. ApolloOpenApiClient client = ApolloOpenApiClient.newBuilder()
    4. .withPortalUrl(portalUrl)
    5. .withToken(token)
    6. .build();

公共接口

详情 Apollo开放平台接入指南

参数说明

参数名 参数说明 参数名
env 所管理的配置环境 env
appId 所管理的配置AppId appId
clusterName 所管理的配置集群名, 一般情况下传入 default 即可。如果是特殊集群,传入相应集群的名称即可 clusterName
namespaceName 所管理的Namespace的名称,如果是非properties格式,需要加上后缀名,如sample.yml namespaceName

客户端 apiclient 使用小例

  1. package com.hbte.sharp.demo.apollo;
  2. import com.ctrip.framework.apollo.openapi.client.ApolloOpenApiClient;
  3. import com.ctrip.framework.apollo.openapi.dto.OpenItemDTO;
  4. /**
  5. * 测试api
  6. *
  7. * @author Bruce
  8. * @date 2021/5/27 17:30
  9. */
  10. public class TestClientApi {
  11. public static void main(String[] args) {
  12. setConfig();
  13. }
  14. public static void setConfig() {
  15. String portalUrl = "http://localhost:8070"; // portal url
  16. String token = "f74469cfc811af4d66f43b4d5a230a04b195ddeb"; // 申请的token
  17. ApolloOpenApiClient client = ApolloOpenApiClient.newBuilder()
  18. .withPortalUrl(portalUrl)
  19. .withToken(token)
  20. .build();
  21. OpenItemDTO itemDto = new OpenItemDTO();
  22. itemDto.setComment("后端api发布");
  23. itemDto.setKey("content");
  24. itemDto.setValue("spring:\n" +
  25. " application:\n" +
  26. " name: apollo-adminservice\n" +
  27. " profiles:\n" +
  28. " active: ${apollo_profile}\n" +
  29. "\n" +
  30. "ctrip:\n" +
  31. " appid: 100003172\n" +
  32. " \n" +
  33. "server:\n" +
  34. " port: 8090\n" +
  35. "\n" +
  36. "logging:\n" +
  37. " file:\n" +
  38. " name: /opt/logs/100003172/apollo-adminservice.log\n" +
  39. "\n" +
  40. "eureka:\n" +
  41. " instance:\n" +
  42. " hostname: ${hostname:localhost}\n" +
  43. " preferIpAddress: true\n" +
  44. " status-page-url-path: /info\n" +
  45. " health-check-url-path: /health\n" +
  46. " client:\n" +
  47. " serviceUrl:\n" +
  48. " # This setting will be overridden by eureka.service.url setting from ApolloConfigDB.ServerConfig or System Property\n" +
  49. " # see com.ctrip.framework.apollo.biz.eureka.ApolloEurekaClientConfig\n" +
  50. " defaultZone: http://${eureka.instance.hostname}:8080/eureka/\n" +
  51. " healthcheck:\n" +
  52. " enabled: true\n" +
  53. " eurekaServiceUrlPollIntervalSeconds: 60\n" +
  54. "\n" +
  55. "management:\n" +
  56. " health:\n" +
  57. " status:\n" +
  58. " order: DOWN, OUT_OF_SERVICE, UNKNOWN, UP\n");
  59. itemDto.setDataChangeCreatedBy("apollo");
  60. client.createOrUpdateItem("test-demo", "DEV", "register", "yaml.yaml", itemDto);
  61. }
  62. }

注意,可能汇报 403 访问拒绝,此时不要慌,进入管理的项目的相应 namespace 点一下授权!!!
image.png
image.png