GraphQL es un lenguaje de consulta y un entorno de ejecución para APIs (Interfaces de Programación de Aplicaciones). Está diseñado para permitir que los clientes soliciten exactamente los datos que necesitan, ni más ni menos, lo que lo hace más eficiente y flexible en comparación con las APIs REST tradicionales.

Despúes de la introdución al lenguaje, vamos a explorar las funcionalidades que nos ofrece, si accedes a tu IIS (Internet Information Services) donde está tu WinCC Unified SCADA, verás graphql


Si exploramos la web, esto es lo que te vas a encontrar 🙂


Vamos a probar a conectarnos y comprobar el valor de nuestro tag TagOpenPipe y lo vamos a hacer con PowerShell y el metodo POST


# Paso 1: Obtener el token de autenticación
$loginMutation = @"
mutation {
  login(username: "PHS", password: "Contraseñña") {
    token
    user {
      id
      fullName
    }
    error {
      code
      description
    }
  }
}
"@

$headers = @{
    "Content-Type" = "application/json"
}

$body = @{
    query = $loginMutation
} | ConvertTo-Json

$response = Invoke-RestMethod -Uri "https://192.168.1.201/graphql/" -Method Post -Headers $headers -Body $body
$token = $response.data.login.token

# Paso 2: Ejecutar la consulta para obtener el valor del tag
$query = @"
query {
  tagValues(names: ["TagOpenPipe"]) {
    name
    value {
      value
      timestamp
      quality {
        quality
        subStatus
      }
    }
    error {
      code
      description
    }
  }
}
"@

$headers = @{
    "Content-Type" = "application/json"
    "Authorization" = "Bearer $token"
}

$body = @{
    query = $query
} | ConvertTo-Json

$response = Invoke-RestMethod -Uri "https://192.168.1.201/graphql/" -Method Post -Headers $headers -Body $body
$response | ConvertTo-Json -Depth 10


Siguiente herramienta con la que vamos a comprobar su funcionamiento: Postman
Una vez iniciado, esta claro que vamos a seleccionar:


Introduciendo la URL, ya podemos observar el Schema de la API GraphQL. Este esquema es una representación de las capacidades y funcionalidades que ofrece la API. La primera que vamos a utilizar es Login, para obtener nuestro token

  • (Query) Las consultas que se pueden realizar.
  • (Mutation) Las mutaciones que permiten modificar datos.
  • (Subscription) Las suscripciones para recibir actualizaciones en tiempo real.


Una vez ejecutada la siguiente query

mutation Login {
    login(username: "PHS", password: "Contraseñña") {
        token
        expires
    }
}


Ya tenemos nuestro token que vamos a utilizar para seguir realizando querys y testeando…
En la pestaña de Authorization, seleccionas Bearer Token y copiamos el token que hemos obtenido:


Ya que podemos empezar a realizar querys, vamos a comprobar cuantos tags tiene nuestro proyecto:

query Browse {
    browse(nameFilters: "*") {
        name
        displayName
        objectType
        dataType
    }
}



El problema con Postman es que las subscripciones por WebSocket no me funcionan correctamente… pues cambiamos de herramienta y según la documentación de SIEMENS vamos a utilizar apollographql para terminar las pruebas preliminares 😉
Volvemos a ejecutar un login, para obtener nuestro token y en Authorization lo asignamos como se muestra


Y si quieres ver como funcionan las subscripciones mira unos segundos de video 😉