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 😉