客户端API
客户端API
注意
Nacos 3.X 版本将不再兼容1.X版本的OpenAPI,同时不再兼容2.X版本的HTTP OpenAPI,请使用Nacos 3.X版本的OpenAPI进行替换。
Nacos 3.X 的 HTTP OpenAPI 主要面向不支持 gRPC 的编程语言开发客户端使用 ,其设计目的是为普通应用、微服务应用 ,以及其他 非管控类 和 非网关类 应用提供配置获取、服务注册与发现的功能支持。
该接口仅提供单服务或单配置级别的数据操作能力(例如对单个服务或配置项的增删改查),不支持范围型聚合操作(如查询全部服务列表、配置列表等批量数据接口)。
如有管控类和网关类的应用需求,需要使用范围型数据操作接口,请使用Admin API。
0. 客户端API 相关说明
0.1. 统一路径格式
Nacos的客户端API,使用统一的Path格式进行的规范。格式为[/$nacos.server.contextPath]/v3/client/[module]/[subPath]..., 其中
$nacos.server.contextPath:客户端API的根路径,默认为/nacos,可以通过nacos.server.contextPath配置项进行修改。module:客户端API模块名称,例如server、cs、ns、core等。subPath:客户端API的子路径,例如state、namespace、config等, 可能有多层子路径。
下列列出的客户端API,采用默认$nacos.server.contextPath的情况进行展示,若已修改部署环境中的$nacos.server.contextPath 配置项,请自行修改调用API时的请求URL。
同时下列列出的客户端API样例中,均采用默认Nacos Web Server的端口进行展示,若已修改部署环境中的$nacos.server.main.port 配置项,请自行修改调用API时的请求URL。
0.2. Swagger 类型文档
Nacos 3.X 的客户端 Open API 也提供了Swagger风格的文档,您可以通过访问Nacos Swagger HTTP 客户端 API查看。
1. 配置管理
注意
Nacos 3.X 的HTTP OpenAPI 不提供配置的发布和删除接口,普通应用、微服务应用,以及其他 非管控类 和 非网关类 应用 应该 为配置的使用方而非发布方;若需要进行配置发布和删除操作,请使用运维 API。
另外,由于Nacos 3.X 即将移除配置长轮询监听相关的功能,仅保留通过长连接进行配置监听,因此Nacos 3.X 的HTTP OpenAPI 不提供配置的监听接口。您可以通过轮询获取配置,比对前后的md5来判断是否需要更新配置。
1.1. 获取配置
接口描述
获取指定配置
请求方式
GET
请求URL
/nacos/v3/client/cs/config
请求头
| 参数名 | 参数类型 | 是否必填 | 描述说明 |
|---|---|---|---|
User-Agent |
String |
否 | 用户代理,默认为空,通常为Nacos-${program-language}-Client<div></div>${version}</td></tr><tr><td><code dir="auto">Client-Version</code></td><td><code dir="auto">String</code></td><td>否</td><td>客户端版本,默认为空,通常为Nacos-${program-language}-Client${version} |
请求参数
| 参数名 | 类型 | 必填 | 参数描述 |
|---|---|---|---|
namespaceId |
String |
否 | 命名空间,默认为public与 ‘’相同 |
groupName |
String |
是 | 配置分组名 |
dataId |
String |
是 | 配置名 |
返回数据
返回体遵循Nacos open API 统一返回体格式,下表只阐述data字段中的返回参数。
| 参数名 | 参数类型 | 描述 |
|---|---|---|
content |
String |
配置内容 |
encryptedDataKey |
String |
配置的加解密密钥,仅在使用配置加解密插件时有此值 |
contentType |
String |
配置的类型,如TEXT,JSON等 |
md5 |
String |
配置的md5值 |
lastModified |
String |
配置的最后修改时间 |
beta |
boolean |
配置是否有灰度配置 |
其他字段为预留字段,暂时无用,忽略即可。
示例
- 请求示例
Terminal window
curl -X GET '127.0.0.1:8848/nacos/v3/client/cs/config?dataId=test&groupName=test'
- 返回示例
{
"code": 0,
"message": "success",
"data": {
"resultCode": 200,
"errorCode": 0,
"message": null,
"requestId": null,
"content": "test",
"encryptedDataKey": null,
"contentType": "text",
"md5": "098f6bcd4621d373cade4e832627b4f6",
"lastModified": 1743151634823,
"tag": null,
"beta": false,
"success": true
}
}
2. 服务发现
注意
Nacos 3.X 的HTTP OpenAPI 不提供查询所有服务列表等接口,普通应用、微服务应用,以及其他 非管控类 和 非网关类 应用 应该 仅需要注册为某一服务的实例,或从某一服务中注销自身,亦或获取已知的下游服务的实例列表进行实际的业务调用,不应该获取所有注册中心中的服务列表。
若需要获取所有服务列表,请使用运维 API。
2.1. 注册实例/续约实例
接口描述
注册或续约一个实例
注意
当通过HTTP OpenAPI注册的实例为临时实例 时,需要定期对实例进行续约,在Nacos3.X的HTTP OpenAPI中,续约此实例的API和注册实例的API进行了合并,通过参数heartBeat进行区分。
当为续约请求时, Nacos不会对请求中的元数据等内容进行解析,即续约请求将会忽略传入的healthy,weight,enabled,metadata 字段。 当续约请求返回的错误码为21003 时,说明该实例已过期被移除,需要重新进行注册,此时客户端应带上完整的信息,同时设置heartBeat=false进行重新注册,重新注册成功后再进行续约请求。
若连续调用注册请求,也可以起到续约实例的作用,但是是通过更新实例的方式进行续约,会耗费更多的性能,因此请在注册成功后进行续约操作而非继续进行注册更新。
请求方式
POST
Content-Type:application/x-www-form-urlencoded
请求URL
/nacos/v3/client/ns/instance
请求头
| 参数名 | 参数类型 | 是否必填 | 描述说明 |
|---|---|---|---|
User-Agent |
String |
否 | 用户代理,默认为空,通常为Nacos-${program-language}-Client<div></div>${version}</td></tr><tr><td><code dir="auto">Client-Version</code></td><td><code dir="auto">String</code></td><td>否</td><td>客户端版本,默认为空,通常为Nacos-${program-language}-Client${version} |
请求Body
| 参数名 | 参数类型 | 是否必填 | 描述说明 |
|---|---|---|---|
namespaceId |
String |
否 | 命名空间Id,默认为public |
groupName |
String |
否 | 分组名,默认为DEFAULT_GROUP |
serviceName |
String |
是 | 服务名 |
ip |
String |
是 | IP地址 |
port |
int |
是 | 端口号 |
clusterName |
String |
否 | 集群名称,默认为DEFAULT |
healthy |
boolean |
否 | 是否只查找健康实例,默认为true |
weight |
double |
否 | 实例权重,默认为1.0 |
enabled |
boolean |
否 | 是否可用,默认为true |
metadata |
JSON格式String |
否 | 实例元数据 |
ephemeral |
boolean |
否 | 是否为临时实例 |
heartBeat |
boolean |
否 | 是否为续约请求,默认为false |
返回数据
返回体遵循Nacos open API 统一返回体格式,下表只阐述data字段中的返回参数。
| 参数名 | 参数类型 | 描述 |
|---|---|---|
data |
String |
是否注册、续约成功,成功时返回ok,失败时返回失败原因。 |
示例
- 请求示例
Terminal window
## 注册实例
curl -X POST "127.0.0.1:8848/nacos/v3/client/ns/instance" -d "serviceName=test1&ip=127.0.0.1&port=3306"
## 续约实例
curl -X POST "127.0.0.1:8848/nacos/v3/client/ns/instance" -d "serviceName=test1&ip=127.0.0.1&port=3306&heartBeat=true"
- 返回示例
{
"code": 0,
"message": "success",
"data": "ok"
}
2.2. 注销实例
接口描述
注销指定实例
请求方式
DELETE
Content-Type:application/x-www-form-urlencoded
请求URL
/nacos/v3/client/ns/instance
请求头
| 参数名 | 参数类型 | 是否必填 | 描述说明 |
|---|---|---|---|
User-Agent |
String |
否 | 用户代理,默认为空,通常为Nacos-${program-language}-Client<div></div>${version}</td></tr><tr><td><code dir="auto">Client-Version</code></td><td><code dir="auto">String</code></td><td>否</td><td>客户端版本,默认为空,通常为Nacos-${program-language}-Client${version} |
请求Body
| 参数名 | 参数类型 | 是否必填 | 描述说明 |
|---|---|---|---|
namespaceId |
String |
否 | 命名空间Id,默认为public |
groupName |
String |
否 | 分组名,默认为DEFAULT_GROUP |
serviceName |
String |
是 | 服务名 |
ip |
String |
是 | IP地址 |
port |
int |
是 | 端口号 |
clusterName |
String |
否 | 集群名称,默认为DEFAULT |
ephemeral |
boolean |
否 | 是否为临时实例 |
返回数据
返回体遵循Nacos open API 统一返回体格式,下表只阐述data字段中的返回参数。
| 参数名 | 参数类型 | 描述 |
|---|---|---|
data |
String |
是否注销成功,成功时返回ok,失败时返回失败原因。 |
示例
- 请求示例
Terminal window
curl -X DELETE "127.0.0.1:8848/nacos/v3/client/ns/instance?serviceName=test1&ip=127.0.0.1&port=3306"
- 返回示例
{
"code": 0,
"message": "success",
"data": "ok"
}
2.3. 查询指定服务的实例列表
接口描述
查询指定服务下的实例详情信息列表
注意
由于Nacos3.X即将移除UDP类型的推送支持,因此对于不支持Grpc长连接推送的客户端,需要定期进行一次实例列表的拉取,以保证客户端能及时感知到实例列表的变化,以实现订阅服务的功能。
请求方式
GET
请求URL
/nacos/v3/client/ns/instance/list
请求头
| 参数名 | 参数类型 | 是否必填 | 描述说明 |
|---|---|---|---|
User-Agent |
String |
否 | 用户代理,默认为空,通常为Nacos-${program-language}-Client<div></div>${version}</td></tr><tr><td><code dir="auto">Client-Version</code></td><td><code dir="auto">String</code></td><td>否</td><td>客户端版本,默认为空,通常为Nacos-${program-language}-Client${version} |
请求参数
| 参数名 | 参数类型 | 是否必填 | 描述说明 |
|---|---|---|---|
namespaceId |
String |
否 | 命名空间Id,默认为public |
groupName |
String |
否 | 分组名,默认为DEFAULT_GROUP |
serviceName |
String |
是 | 服务名 |
clusterName |
String |
否 | 集群名称,默认为DEFAULT |
healthyOnly |
boolean |
否 | 是否只获取健康实例,默认为false |
返回数据
返回体遵循Nacos open API 统一返回体格式,下表只阐述data字段中的返回参数。
| 参数名 | 参数类型 | 描述说明 |
|---|---|---|
data |
Object[] |
实例列表 |
data.[i].ip |
String |
实例IP |
data.[i].port |
int |
实例端口号 |
data.[i].weight |
double |
实例权重 |
data.[i].healthy |
boolean |
实例是否健康 |
data.[i].enabled |
boolean |
实例是否可用 |
data.[i].ephemeral |
boolean |
是否为临时实例 |
data.[i].clusterName |
String |
实例所在的集群名称 |
data.[i].serviceName |
String |
服务名 |
data.[i].metadata |
map |
实例元数据 |
data.[i].instanceHeartBeatTimeOut |
int |
实例心跳超时时间 |
data.[i].ipDeleteTimeout |
int |
实例删除超时时间 |
data.[i].instanceHeartBeatInterval |
int |
实例心跳间隔 |
示例
- 请求示例
Terminal window
curl -X GET '127.0.0.1:8848/nacos/v3/client/ns/instance/list?serviceName=test1'
- 返回示例
{
"code": 0,
"message": "success",
"data": [
{
"ip": "127.0.0.1",
"port": 3306,
"weight": 1.0,
"healthy": true,
"enabled": true,
"ephemeral": true,
"clusterName": "DEFAULT",
"serviceName": "DEFAULT_GROUP@@test1",
"metadata": {},
"ipDeleteTimeout": 30000,
"instanceIdGenerator": "simple",
"instanceHeartBeatInterval": 5000,
"instanceHeartBeatTimeOut": 15000
}
]
}
