04-Use REST API To Access ThingWorx
04-Use REST API To Access ThingWorx
ThingWorx
Aproveche la API REST para crear objetos, modificar propiedades,
ejecutar servicios y mucho más.
GUÍA DE CONCEPTO
Este proyecto le introducirá a la API REST utilizada por la plataforma
ThingWorx.
En ThingWorx, los siguientes son tres encabezados que son críticos para las
solicitudes de la API REST:
Formato JSON
El cuerpo de las peticiones contiene cualquier parámetro de entrada que el servicio
que está ejecutando requiera. Estos parámetros deben enviarse en formato JSON.
Tipo de Entidad
/Server es una URL de inicio especial. Si la URL no tiene un servidor, debe ser un
tipo de entidad, como Things, Thing Templates, Application Keys, Resources o Users.
El servidor devolverá una lista de todas las entidades de ese tipo que tienes acceso
a ver.
Nombre de la entidad
Después de especificar el tipo de entidad, puede especificar la entidad concreta.
Este recuperará detalles sobre esa entidad hasta las características específicas de
esa entidad, como las definiciones de propiedades y las definiciones de servicio.
Tipo de característica
La siguiente parte de la URL es el tipo de característica. Se trata de clasificaciones
de capacidades para la entidad, como propiedades o servicios.
En este nivel, no todo es navegable. Dado que usted está utilizando un navegador
web, cada solicitud que envía a ThingWorx es una petición GET, peticiones Get para
recuperar información y así poder ver las definiciones de los servicios.
Sin embargo, para ejecutar un servicio, es necesario hacer una petición POST.
Cuando intentamos acceder a un servicio directamente utilizando una solicitud GET,
el servidor responde que el método GET no puede acceder a esta funcionalidad.
Nombre del tipo de característica
La última parte de la URL accede a la característica específica por su nombre. Este
puede ser una propiedad, un servicio, un evento o otra capacidad con nombre.
content optional
Solicitudes
La API REST de ThingWorx utiliza verbos de solicitud HTTP de forma común a
muchas API REST:
Para descubrir y utilizar los servicios es necesario utilizar una URL específica. Para
listar los servicios disponibles y ver sus definiciones, emita un GET a
<servidor_ip:puerto>/Thingworx/Things/<nombre de la Thing>/ServiceDefinitions
Accept headers
Si la solicitud envía una cabecera Accept no válida, o no se suministra ninguna
cabecera Accept, la respuesta por defecto será en formato text/html.
Value Syntax
JSON application/json
XML text/xml
CSV text/csv
Value Syntax
JSON application/json
XML text/xml
Paso 2: Cliente REST
Para realizar llamadas a cualquier API REST se necesita un software cliente. Se
puede utilizar un navegador web para hacer algunas llamadas GET, pero hay que
instalar extensiones para modificar las cabeceras o para hacer llamadas POST o
PUT.
Instalación de Postman
1.- Descarga e instale el software gratuito desde la página web
https://www.postman.com/downloads/
2.- Cree una cuenta Postman e ingrese.
Finalizado el paso anterior puede escoger programar la aplicación API desde el
navegador o desde el software de escritorio.
Un dispositivo debe ser autentificado para enviar o recibir datos de ThingWorx. Uno
de los métodos de autenticación más comunes utilizados con ThingWorx es el uso
de un token de seguridad llamado Application Key o appKey. Estos tokens están
asociados a un usuario en particular y tienen los mismos permisos que ese usuario.
Parámetros necesarios
● AppKey creada por su servidor ThingWorx
● Un nombre para el nuevo Thing
● El nombre de un ThingTemplate válido que se utilizará para crear el nuevo
Thing
Solicitud
Una solicitud HTTP POST a ThingWorx se ensambla a partir de 3 componentes:
● una URL
● Un cuerpo POST
● Credenciales de autenticación.
Una solicitud a ThingWorx puede realizarse sólo después de que estos 3
componentes estén correctamente configurados.
Construir la URL.
1.- Cree un nuevo Thing haciendo un HTTP POST al endpoint
<server_ip:port>/Thingworx/Resources/EntityServices/Services/CreateThing
Ej:
http://10.10.200.200:8080/Thingworx/Resources/EntityServices/Services/CreateThing
Envíe el nombre del Thing y el nombre del ThingTemplate que definirá el nuevo
thing en el cuerpo del POST como un objeto JSON. Por ejemplo, el objeto JSON de
abajo creará una nueva Thing llamada APIThing_XX usando la plantilla del sistema
GenericThing. Selecciona POST y en la casilla de la izquierda pega la url que
construimos en el paso anterior. Selecciona Body para agregar el contenido de la
llamada API REST y verifica que tenga formato raw y JSON.
{
"name": "APIThing_XX",
"thingTemplateName": "GenericThing"
}
SUGERENCIA: Al crear Things que se utilizarán con la API REST, utilice el
GenericThing ThingTemplate o un GenericThing basado en ThingTemplate.
Un RemoteThing sólo debe usarse con dispositivos que hacen una conexión
AlwaysOn™ a un servidor ThingWorx usando el Edge MicroServer o uno de los
SDKs AlwaysOn™.
Content-Type application/json
Accept text/csv
4.- Respuesta
Una llamada exitosa al servicio CreateThing no devuelve ningún contenido en el
cuerpo de la respuesta, sólo se devuelve un HTTP 200. Para verificar que la Thing
fue creada correctamente navega en Thingworx Composer>Browse>Thing. Si el
status en Postman es 200 OK deberías tener ver en la lista de Thing a
APIThing_XX.
Validar
El Thing que acaba de crear está ahora disponible en el Compositor de ThingWorx,
sin embargo, antes de que se pueda hacer algo más con su nuevo Thing a través de
la API REST, debe ser habilitado e iniciado. Siga estos pasos para validar que el
nuevo Thing ha sido creado y habilitado.
1.- En la página de inicio de Composer, haz clic en Things, selecciona el nombre del
Thing que acabas de crear y luego haz clic en General Information.
NOTA: Verá que la casilla Activo no está marcada, lo que indica que esta
Thing no está habilitada.
Obtendrá lo siguiente:
Obtendrá lo siguiente:
Paso 5: Añadir una propiedad a un
objeto
Los valores de las propiedades se asocian a una thing específica, y se utilizan para
almacenar datos que cambian con el tiempo.
Parámetros requeridos:
● AppKey creada por su servidor ThingWorx
● Nombre de la thing a la que se añadirá la propiedad
● Nombre de la nueva Propiedad y tipo de datos del valor de la Propiedad
Solicitud
1.- Construya la URL.
Se puede añadir una nueva propiedad a un objeto existente haciendo un POST
HTTP a este punto final. Sustituya <nombre de la Thing> por el nombre real de la
Thing que existe en el servidor de ThingWorx a la que se añadirá la propiedad.
Duplique la pestaña creada en el paso anterior y sustituya la url por la siguiente:
<server_ip:port>/Thingworx/Things/<name of Thing>/Services/AddPropertyDefinition
{
"name" : "SomeNumber",
"type" : "NUMBER"
}
Respuesta
Una llamada exitosa al servicio AddPropertyDefinitions no devuelve ningún
contenido en el cuerpo de la respuesta. Sólo se devuelve un HTTP 200.
Obtendrá lo siguiente.
Validar
1.- Ver nueva propiedad en el servidor.
La propiedad que acaba de añadir está ahora disponible en el ThingWorx Composer.
Antes de que se pueda hacer algo más con su nueva Propiedad a través de la API
REST, el Thing debe ser reiniciado. Para confirmar que su Propiedad fue agregada a
su Thing, abra Composer y haga clic en Things, seleccione el nombre de la Thing
que acaba de crear, luego haga clic en Propiedades y Alertas. Verá la nueva
propiedad en la lista. Es posible que tenga que actualizar para ver los cambios.
<server_ip:port>/Thingworx/Things/<name of Thing>/Services/RestartThing
Parámetros requeridos:
● AppKey creada por su servidor de Foundation
● Nombre de la Thing válida y nombre de la Propiedad
● Nuevo valor de la propiedad
Solicitud
1.- Construya la URL.
Un valor de Propiedad puede ser establecido haciendo una llamada HTTP PUT a
este endpoint:
<server_ip:port>/Thingworx/Things/<name of Thing>/Properties/<name of
Property>
Sustituya <nombre de la Thing> por el nombre real de una Thing que existe en el
servidor ThingWorx y <nombre de la Propiedad> por el nombre de una Propiedad
que se ha añadido a la Thing.
Respuesta
Una llamada exitosa para establecer una propiedad no devuelve ningún contenido
en el cuerpo de la respuesta. Sólo se devuelve un HTTP 200.
Validar
Para confirmar que la propiedad fue cambiada para su Thing, vaya a Composer y
haga clic en Things. Seleccione el nombre de la Thing que acaba de crear y haga clic
en la pestaña Propiedades y Alertas. Haz clic en la flecha circular Actualizar para ver
el valor de la propiedad actualizada.
Paso 7: Obtener el último valor de la
propiedad
Puede recuperar los valores de las propiedades de una Thing específica con la API
REST utilizando el verbo GET.
Parámetros requeridos:
● AppKey creada por su servidor ThingWorx
● Nombre de la Thing y nombre de la propiedad
Solicitud
1.- Construya la URL.
Para obtener el valor actual de una propiedad, haga una petición GET a este
endpoint:
<server_ip:port>/Thingworx/Things/<name of Thing>/Properties/<name of
property>
Sustituya <nombre de la Thing> por el nombre real de una Thing que existe en el
servidor ThingWorx y <nombre de la Propiedad> por el nombre de una Propiedad
que se ha añadido a la Thing.
Respuesta
El contenido puede ser devuelto en cuatro formatos diferentes enviando una
cabecera Accept con la solicitud.
Desired Response Type Accept Header Values
JSON application/json
XML text/xml
CSV text/csv
Obtendrá lo siguiente:
Paso 8: Llamar a un servicio
personalizado
Para ejecutar un Servicio de una Thing específica con la API REST, puede utilizar el
verbo POST.
Parámetros requeridos:
● AppKey creada por su servidor ThingWorx
● Nombre de la Thing que implementa un Servicio personalizado
● Nombre del Servicio personalizado
● Nombres de las entradas, si las hay, requeridas por el Servicio
Crear Servicio
Desafio: Cree un servicio que entregue como resultado la suma de dos números y
que cambie el valor a 10 de la propiedad antes creada.
Ayuda:
Solicitud
1.- Construya la URL.
Para llamar a un Servicio personalizado de una Thing existente, haga un POST HTTP
a este punto final:
<server_ip:port>/Thingworx/Things/<name of Thing>/Services/<name of
Service>
Sustituya <nombre de la Thing> por el nombre real de una Thing que exista en el
servidor ThingWorx, y <nombre del Servicio> por un Servicio existente.
{
"firstNumber": "35",
"secondNumber": "711"
}
{
"result": 746.0
}
500 - Internal Server Error Content-Type request header is not set for a
service execution POST, required even
without a POST body