GraphQL API 概述
NetBox提供了一个只读的GraphQL API,以补充其REST API。该API由Graphene库和Graphene-Django驱动。
查询
GraphQL允许客户端指定要包含在响应中的任意嵌套字段列表。所有查询都发送到根目录的/graphql
API端点。例如,要返回每个具有活动状态的电路的电路ID和供应商名称,可以发出如下请求:
curl -H "Authorization: Token $TOKEN" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
http://netbox/graphql/ \
--data '{"query": "query {circuit_list(status:\"active\") {cid provider {name}}}"}'
响应将包括请求的数据,以JSON格式呈现:
{
"data": {
"circuits": [
{
"cid": "1002840283",
"provider": {
"name": "CenturyLink"
}
},
{
"cid": "1002840457",
"provider": {
"name": "CenturyLink"
}
}
]
}
}
注意
建议将返回的数据通过JSON解析器(如jq
)进行更好的可读性处理。
NetBox为每种对象类型提供了单数和复数查询字段:
$OBJECT
:返回单个对象。必须指定对象的唯一ID,如(id: 123)
。$OBJECT_list
:返回对象列表,可以选择使用给定的参数进行筛选。
例如,使用查询device(id:123)
来获取特定设备(通过其唯一ID标识),使用查询device_list
(带有可选的筛选条件)来获取所有设备。
有关构建GraphQL查询的详细信息,请参阅Graphene文档以及GraphQL查询文档。
筛选
GraphQL API使用与UI和REST API相同的筛选逻辑。筛选可以在紧随查询名称后的括号内指定为键值对。例如,以下内容将仅返回状态为活动的North Carolina地区的站点:
{"query": "query {site_list(region:\"north-carolina\", status:\"active\") {name}}"}
{
device_list {
id
name
interfaces(enabled: true) {
name
}
}
}
多个返回类型
某些查询可以返回多种类型的对象,例如电缆端子可以返回电路端子、控制台端口和许多其他对象。可以使用内联片段进行查询,如下所示:
{
cable_list {
id
a_terminations {
... on CircuitTerminationType {
id
class_type
}
... on ConsolePortType {
id
class_type
}
... on ConsoleServerPortType {
id
class_type
}
}
}
}
认证
NetBox的GraphQL API使用与其REST API相同的API身份验证令牌。通过在请求中附加Authorization
HTTP标头,将身份验证令牌附加到请求中,格式如下:
Authorization: Token $TOKEN
禁用GraphQL API
如果不需要,可以通过将GRAPHQL_ENABLED
配置参数设置为False并重新启动NetBox来禁用GraphQL API。