Visão Geral sobre a API GraphQL¶
O NetBox fornece uma API GraphQL de leitura (read-only) para complementar a API REST. A API é fornecida pela biblioteca Graphene e Graphene-Django.
Buscas (Queries)¶
O GraphQL permite que o cliente especifique uma lista aninhada arbitrária de campos para serem inclusos na resposta. Todas as queries são feitas para o endpoint root da API /graphql
. Por exemplo, para retornar o ID do circuito e o nome do fornecedor (provider) de cada circuito com um status active (ativo), você pode utilizar uma requisição como a abaixo:
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}}}"}'
A resposta incluirá os dados requisitados formatados em JSON:
{
"data": {
"circuits": [
{
"cid": "1002840283",
"provider": {
"name": "CenturyLink"
}
},
{
"cid": "1002840457",
"provider": {
"name": "CenturyLink"
}
}
]
}
}
Note
É recomendado passar os dados retornados através de um parser JSON como o jq
para uma melhor leitura.
O NetBox fornece tanto uma query singular ou plural de campos para cada tipo de objeto:
$OBJECT
: Retorna um objeto único. Deve especificar o ID único do objeto como(id: 123)
.$OBJECT_list
: Retorna uma lista de objetos, opcionalmente filtrados pelos parâmetros fornecidos.
Por exemplo, utilize device(id:123)
para obter um dispositivo específico (identificado pelo seu ID único, e busque por device_list
(com um grupo de filtros opcionais) para obter todos os dispositivos.
Para mais detalhes sobre a construção de queries GraphQL, veja a documentação do Graphene, assim como a documentação de queries do GraphQL.
Filtrando¶
A API do GraphQL utiliza a mesma lógica de filtros como a interface web (UI) e a API REST. Filtros podem especificados por pares de chave-valor (key-value) dentro de parênteses imediatamente seguido do nome da busca (query name). Por exemplo, o exemplo abaixo irá retornar somente os sites dentro da região North Carolina com o status de active:
{"query": "query {site_list(region:\"north-carolina\", status:\"active\") {name}}"}
Além disso, filtros podem ser feitos em uma lista de objetos relacionados como mostrado na query abaixo:
{
device_list {
id
name
interfaces(enabled: true) {
name
}
}
}
Múltiplos Tipos de Retorno (Return Types)¶
Certas queries podem retornar múltiplos tipos de objetos, por exemplo, a terminação de cabos podem retornar a terminação de circuitos, portas console e muitas outras. Elas podem ser buscadas utilizando inline fragments como mostrado abaixo:
{
cable_list {
id
a_terminations {
... on CircuitTerminationType {
id
class_type
}
... on ConsolePortType {
id
class_type
}
... on ConsoleServerPortType {
id
class_type
}
}
}
}
O campo "class_type" é uma maneira fácil de distinguir qual tipo de objeto está sendo utilizado ao visualizar os dados retornados, ou quando estiver filtrando. Contém o nome da classe, por exemplo "CircuitTermination" ou "ConsoleServerPort".
Autenticação (Authentication)¶
A API do GraphQL utiliza os mesmos tokens de autenticação que a API REST. Tokens de autenticação são incluidos dentro da requisição ao colocar o cabeçalho HTTP Authorization
dentro do formulário a seguir:
Authorization: Token $TOKEN
Desabilitando a API GraphQL¶
Se não necessária, a API do GraphQL pode ser desabilitada ao configurar o parâmetro de configuração GRAPHQL_ENABLED
para False
e reiniciar o NetBox.