第一句子网 - 唯美句子、句子迷、好句子大全
第一句子网 > Apollo开放平台(openapi)

Apollo开放平台(openapi)

时间:2024-06-22 09:49:49

相关推荐

Apollo开放平台(openapi)

一、 什么是开放平台?

Apollo提供了一套的Http REST接口,使第三方应用能够自己管理配置。虽然Apollo系统本身提供了Portal来管理配置,但是在有些情景下,应用需要通过程序去管理配置。

二、 第三方应用接入Apollo开放平台

2.1 注册第三方应用

第三方应用负责人需要向Apollo管理员提供一些第三方应用基本信息。

基本信息如下:

第三方应用的AppId、应用名、部门第三方应用负责人

Apollo管理员在 http://{portal_address}/open/manage.html 创建第三方应用,创建之前最好先查询此AppId是否已经创建。创建成功之后会生成一个token,如下图所示:

2.2 给已注册的第三方应用授权

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

2.3 第三方应用调用Apollo Open API

2.3.1 调用Http REST接口

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

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

2.3.2 Java应用通过apollo-openapi调用Apollo Open API

从1.1.0版本开始,Apollo提供了apollo-openapi客户端,所以Java语言的第三方应用可以更方便地调用Apollo Open API。

首先引入apollo-openapi依赖:

<dependency><groupId>com.ctrip.framework.apollo</groupId><artifactId>apollo-openapi</artifactId><version>1.1.0</version></dependency>

在程序中构造ApolloOpenApiClient

String portalUrl = "http://localhost:8070"; // portal urlString token = "e16e5cd903fd0c97a116c873b448544b9d086de9"; // 申请的tokenApolloOpenApiClient client = ApolloOpenApiClient.newBuilder().withPortalUrl(portalUrl).withToken(token).build();

后续就可以通过ApolloOpenApiClient的接口直接操作Apollo Open API了,接口说明参见下面的Rest接口文档。

2.3.3 .Net core应用调用Apollo Open API

.Net core也提供了open api的客户端,详见/ctripcorp//pull/77

三、 接口文档

3.1 URL路径参数说明

3.2 API接口列表

3.2.1 获取App的环境,集群信息

URL: http://{portal_address}/openapi/v1/apps/{appId}/envclustersMethod: GETRequest Params: 无返回值Sample

[{"env":"FAT","clusters":[ //集群列表"default","FAT381"]},{"env":"UAT","clusters":["default"]},{"env":"PRO","clusters":["default","SHAOY","SHAJQ"]}]

3.2.2 获取App信息

URL: http://{portal_address}/openapi/v1/appsMethod: GETRequest Params:返回值Sample

[{"name":"first_app","appId":"100003171","orgId":"development","orgName":"研发部","ownerName":"apollo","ownerEmail":"test@","dataChangeCreatedBy":"apollo","dataChangeLastModifiedBy":"apollo","dataChangeCreatedTime":"-05-08T09:13:31.000+0800","dataChangeLastModifiedTime":"-05-08T09:13:31.000+0800"},{"name":"apollo-demo","appId":"100004458","orgId":"development","orgName":"产品研发部","ownerName":"apollo","ownerEmail":"apollo@","dataChangeCreatedBy":"apollo","dataChangeLastModifiedBy":"apollo","dataChangeCreatedTime":"-12-23T12:35:16.000+0800","dataChangeLastModifiedTime":"-04-08T13:58:36.000+0800"}]

3.2.3 获取集群接口

URL: http://{portal_address}/openapi/v1/envs/{env}/apps/{appId}/clusters/{clusterName}Method: GETRequest Params:无返回值Sample

{"name":"default","appId":"100004458","dataChangeCreatedBy":"apollo","dataChangeLastModifiedBy":"apollo","dataChangeCreatedTime":"-12-23T12:35:16.000+0800","dataChangeLastModifiedTime":"-12-23T12:35:16.000+0800"}

3.2.4 创建集群接口

可以通过此接口创建集群,调用此接口需要授予第三方APP对目标APP的管理权限。

URL: http://{portal_address}/openapi/v1/envs/{env}/apps/{appId}/clustersMethod: POSTRequest Params:无请求内容(Request Body, JSON格式)返回值 Sample

{"name":"someClusterName","appId":"100004458","dataChangeCreatedBy":"apollo","dataChangeLastModifiedBy":"apollo","dataChangeCreatedTime":"-12-23T12:35:16.000+0800","dataChangeLastModifiedTime":"-12-23T12:35:16.000+0800"}

3.2.5 获取集群下所有Namespace信息接口

URL: http://{portal_address}/openapi/v1/envs/{env}/apps/{appId}/clusters/{clusterName}/namespacesMethod: GETRequest Params: 无返回值Sample:

[{"appId": "100003171","clusterName": "default","namespaceName": "application","comment": "default app namespace","format": "properties", //Namespace格式可能取值为:properties、xml、json、yml、yaml"isPublic": false, //是否为公共的Namespace"items": [ // Namespace下所有的配置集合{"key": "batch","value": "100","dataChangeCreatedBy": "song_s","dataChangeLastModifiedBy": "song_s","dataChangeCreatedTime": "-07-21T16:03:43.000+0800","dataChangeLastModifiedTime": "-07-21T16:03:43.000+0800"}],"dataChangeCreatedBy": "song_s","dataChangeLastModifiedBy": "song_s","dataChangeCreatedTime": "-07-20T14:05:58.000+0800","dataChangeLastModifiedTime": "-07-20T14:05:58.000+0800"},{"appId": "100003171","clusterName": "default","namespaceName": "FX.apollo","comment": "apollo public namespace","format": "properties","isPublic": true,"items": [{"key": "request.timeout","value": "3000","comment": "","dataChangeCreatedBy": "song_s","dataChangeLastModifiedBy": "song_s","dataChangeCreatedTime": "-07-20T14:08:30.000+0800","dataChangeLastModifiedTime": "-08-01T13:56:25.000+0800"},{"id": 1116,"key": "batch","value": "3000","comment": "","dataChangeCreatedBy": "song_s","dataChangeLastModifiedBy": "song_s","dataChangeCreatedTime": "-07-28T15:13:42.000+0800","dataChangeLastModifiedTime": "-08-01T13:51:00.000+0800"}],"dataChangeCreatedBy": "song_s","dataChangeLastModifiedBy": "song_s","dataChangeCreatedTime": "-07-20T14:08:13.000+0800","dataChangeLastModifiedTime": "-07-20T14:08:13.000+0800"}]

3.2.6 获取某个Namespace信息接口

URL: http://{portal_address}/openapi/v1/envs/{env}/apps/{appId}/clusters/{clusterName}/namespaces/{namespaceName}Method: GETRequest Params:无返回值Sample

{"appId": "100003171","clusterName": "default","namespaceName": "application","comment": "default app namespace","format": "properties", //Namespace格式可能取值为:properties、xml、json、yml、yaml"isPublic": false, //是否为公共的Namespace"items": [ // Namespace下所有的配置集合{"key": "batch","value": "100","dataChangeCreatedBy": "song_s","dataChangeLastModifiedBy": "song_s","dataChangeCreatedTime": "-07-21T16:03:43.000+0800","dataChangeLastModifiedTime": "-07-21T16:03:43.000+0800"}],"dataChangeCreatedBy": "song_s","dataChangeLastModifiedBy": "song_s","dataChangeCreatedTime": "-07-20T14:05:58.000+0800","dataChangeLastModifiedTime": "-07-20T14:05:58.000+0800"}

3.2.7 创建Namespace

可以通过此接口创建Namespace,调用此接口需要授予第三方APP对目标APP的管理权限。

URL: http://{portal_address}/openapi/v1/apps/{appId}/appnamespacesMethod: POSTRequest Params:无请求内容(Request Body, JSON格式)返回值 Sample

{"name": "FX.public-0420-11","appId": "100003173","format": "properties","isPublic": true,"comment": "test","dataChangeCreatedBy": "zhanglea","dataChangeLastModifiedBy": "zhanglea","dataChangeCreatedTime": "-04-20T18:25:49.033+0800","dataChangeLastModifiedTime": "-04-20T18:25:49.033+0800"}

返回值说明

如果是properties文件,name = ${appId所属的部门}.${传入的name值} ,例如调用接口传入的name=xy-z, format=properties,应用的部门为框架(FX),那么name=FX.xy-z

如果不是properties文件 name = ${appId所属的部门}.${传入的name值}.${format},例如调用接口传入的name=xy-z, format=json,应用的部门为框架(FX),那么name=FX.xy-z.json

3.2.8 获取某个Namespace当前编辑人接口

Apollo在生产环境(PRO)有限制规则:每次发布只能有一个人编辑配置,且该次发布的人不能是该次发布的编辑人。 也就是说如果一个用户A修改了某个namespace的配置,那么在这个namespace发布前,只能由A修改,其它用户无法修改。同时,该用户A无法发布自己修改的配置,必须找另一个有发布权限的人操作。 这个接口就是用来获取当前namespace是否有人锁定的接口。在非生产环境(FAT、UAT),该接口始终返回没有人锁定。

URL: http://{portal_address}/openapi/v1/envs/{env}/apps/{appId}/clusters/{clusterName}/namespaces/{namespaceName}/lockMethod: GETRequest Params:无返回值 Sample(未锁定)

{"namespaceName": "application","isLocked": false}

返回值Sample(被锁定)

{"namespaceName": "application","isLocked": true,"lockedBy": "song_s" //锁owner}

3.2.9 读取配置接口

URL: http://{portal_address}/openapi/v1/envs/{env}/apps/{appId}/clusters/{clusterName}/namespaces/{namespaceName}/items/{key}Method: GETRequest Params:无返回值Sample

{"key": "timeout","value": "3000","comment": "超时时间","dataChangeCreatedBy": "zhanglea","dataChangeLastModifiedBy": "zhanglea","dataChangeCreatedTime": "-08-11T12:06:41.818+0800","dataChangeLastModifiedTime": "-08-11T12:06:41.818+0800"}

3.2.10 新增配置接口

URL: http://{portal_address}/openapi/v1/envs/{env}/apps/{appId}/clusters/{clusterName}/namespaces/{namespaceName}/itemsMethod: POSTRequest Params:无请求内容(Request Body, JSON格式)Request body sample:

{"key":"timeout","value":"3000","comment":"超时时间","dataChangeCreatedBy":"zhanglea"}

返回值Sample

{"key": "timeout","value": "3000","comment": "超时时间","dataChangeCreatedBy": "zhanglea","dataChangeLastModifiedBy": "zhanglea","dataChangeCreatedTime": "-08-11T12:06:41.818+0800","dataChangeLastModifiedTime": "-08-11T12:06:41.818+0800"}

3.2.11 修改配置接口

URL: http://{portal_address}/openapi/v1/envs/{env}/apps/{appId}/clusters/{clusterName}/namespaces/{namespaceName}/items/{key}Method: PUTRequest Params请求内容(Request Body, JSON格式)Request body sample:

{"key":"timeout","value":"3000","comment":"超时时间","dataChangeLastModifiedBy":"zhanglea"}

返回值:无

3.2.12 删除配置接口

URL: http://{portal_address}/openapi/v1/envs/{env}/apps/{appId}/clusters/{clusterName}/namespaces/{namespaceName}/items/{key}?operator={operator}Method: DELETERequest Params返回值: 无

3.2.11 发布配置接口

URL: http://{portal_address}/openapi/v1/envs/{env}/apps/{appId}/clusters/{clusterName}/namespaces/{namespaceName}/releasesMethod: POSTRequest Params:无Request BodyRequest Body example

{"releaseTitle":"-08-11","releaseComment":"修改timeout值","releasedBy":"zhanglea"}

返回值Sample

{"appId": "test-0620-01","clusterName": "test","namespaceName": "application","name": "-08-11","configurations": {"timeout": "3000",},"comment": "修改timeout值","dataChangeCreatedBy": "zhanglea","dataChangeLastModifiedBy": "zhanglea","dataChangeCreatedTime": "-08-11T14:03:46.232+0800","dataChangeLastModifiedTime": "-08-11T14:03:46.235+0800"}

3.2.12 获取某个Namespace当前生效的已发布配置接口

URL: http://{portal_address}/openapi/v1/envs/{env}/apps/{appId}/clusters/{clusterName}/namespaces/{namespaceName}/releases/latestMethod: GETRequest Params:无返回值Sample

{"appId": "test-0620-01","clusterName": "test","namespaceName": "application","name": "-08-11","configurations": {"timeout": "3000",},"comment": "修改timeout值","dataChangeCreatedBy": "zhanglea","dataChangeLastModifiedBy": "zhanglea","dataChangeCreatedTime": "-08-11T14:03:46.232+0800","dataChangeLastModifiedTime": "-08-11T14:03:46.235+0800"}

3.2.13 回滚已发布配置接口

URL: http://{portal_address}/openapi/v1/envs/{env}/releases/{releaseId}/rollbackMethod: PUTRequest Params返回值: 无

四、错误码说明

正常情况下,接口返回的Http状态码是200,下面列举了Apollo会返回的非200错误码说明。

4.1 400 - Bad Request

客户端传入参数的错误,如操作人不存在,namespace不存在等等,客户端需要根据提示信息检查对应的参数是否正确。

4.2 401 - Unauthorized

接口传入的token非法或者已过期,客户端需要检查token是否传入正确。

4.3 403 - Forbidden

接口要访问的资源未得到授权,比如只授权了对A应用下Namespace的管理权限,但是却尝试管理B应用下的配置。

4.3 404 - Not Found

接口要访问的资源不存在,一般是URL或URL的参数错误。

4.4 405 - Method Not Allowed

接口访问的Method不正确,比如应该使用POST的接口使用了GET访问等,客户端需要检查接口访问方式是否正确。

4.4 500 - Internal Server Error

其它类型的错误默认都会返回500,对这类错误如果应用无法根据提示信息找到原因的话,可以找Apollo研发团队一起排查问题。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。