Cómo utilizar REST y SOAP API en Zimbra OSE

Como casi cualquier servicio web moderno, Zimbra OSE tiene interfaces de intercambio de datos que le permiten acceder a varias funciones del servidor y datos almacenados en él. Las API se utilizan para desarrollar varias aplicaciones y para integrar Zimbra con otros sistemas corporativos. Zimbra OSE es compatible con REST API y SOAP API. En este artículo, analizaremos las diferencias, alcances y ejemplos de uso de SOAP y REST API en Zimbra OSE.



imagen



API de SOAP y REST: ¿cuáles son las diferencias?



Aunque la API SOAP y la API REST en realidad realizan la misma función, existen más diferencias que similitudes entre ellas, y esas diferencias comienzan con la definición. Entonces, si SOAP es un protocolo diseñado para estandarizar el intercambio de datos entre servicios web, independientemente del idioma en el que estén escritos, entonces REST es un estilo arquitectónico de un servicio web, lo que implica una serie de restricciones según las cuales se crea un servicio web ...



Específicamente, Zimbra REST API y SOAP API difieren en alcance. La API REST se usa aquí solo para operaciones CRUD, es decir, para crear, leer, actualizar y eliminar objetos en el servidor. Por tanto, la API REST se utiliza principalmente para crear integraciones sencillas con sistemas de terceros, ya que permite descargar datos de Zimbra en varios formatos, como xml, json, rss, html, zip, tar, tgz, ics, ifb , csv y otros, y también importar datos a Zimbra. La API SOAP se puede utilizar para otras operaciones además de administrar los datos del buzón. Otra diferencia significativa es que REST es menos seguro que SOAP.



La API se diferencia de la línea de comandos, que en Zimbra OSE tiene aún más funcionalidad y admite la formación de scripts bash, en que su operación no requiere acceso a la cuenta del sistema Zimbra en el servidor de correo.



API REST La API



REST está representada en Zimbra OSE mediante un conjunto de métodos para trabajar con correo, calendarios, tareas y contactos. Entre ellos:



  • Obtener carpeta: exporta el contenido de una carpeta de correo
  • Importar mensaje: importar un mensaje a una carpeta de correo
  • Obtener contactos: exportar contactos
  • Importar contactos: importar contactos
  • Obtener calendario: exportar calendario
  • Obtener FreeBusy - Exportar datos de disponibilidad libre
  • Importar citas: importar datos de reuniones
  • Obtener tareas: exportar tareas
  • Obtener artículo: exportar artículo


Todos los métodos anteriores requieren autenticación de usuario. Se puede hacer agregando datos de autenticación a la cadena de consulta, además de haber recibido un token de autenticación, utilícelo para iniciar sesión en el servidor. Puede obtener un token ingresando los datos de autenticación del administrador del servidor, así como ingresando los datos de autenticación del usuario para quien se emite el token:



curl --user 'admin:p@$$w0rD' -k 'https://example.ru/home/user@example.ru/Inbox/?fmt=sync&auth=sc' -c '~/token.txt'
curl --user 'user:qwerty123' -k 'https://example.ru/home/user@example.ru/Inbox/?fmt=sync&auth=sc' -c '~/token.txt'
      
      





El resultado de este comando será la creación de un archivo token.txt en la carpeta de inicio del usuario que contendrá el token de autenticación. Tenga en cuenta que este token tiene una fecha de vencimiento limitada y, después de este período, deberá emitir un nuevo token para acceder al buzón de correo de Zimbra a través de solicitudes REST. El token en sí es una cadena de 313 caracteres que comienza con '0_'.







Después de haber copiado este token, puede usarlo para acceder a los datos del buzón a través de la API REST. Por ejemplo, puede obtener el contenido de la bandeja de entrada del usuario de Zimbra usando un comando como curl -k 'https://example.ru/home/user@example.ru/Inbox/?fmt=rss&auth=qp&zauthtoken=0_xxx'> ~ / bandeja de entrada xml, donde 0_xxx es el token de autenticación, auth = qp es el método de autenticación del token, fmt = rss es el formato de salida y ~ / inbox xml es el archivo al que se exportará el contenido de la Bandeja de entrada.



Al agregar varios argumentos a la solicitud REST, puede exportar parcialmente datos desde la Bandeja de entrada. Por ejemplo:



  • example.ru : 7070/home/user@example.ru/inbox? fmt = xml & query = acuerdo : este enlace en la solicitud REST le permitirá recibir en forma de un archivo xml todas las cartas de los usuarios de la carpeta Bandeja de entrada que contiene la palabra "Acuerdo"
  • example.ru : 7070/home/user@example.ru/inbox? fmt = xml & query = subject: acuerdo - le permite recibir en forma de un archivo xml todas las cartas de los usuarios de la carpeta Bandeja de entrada, cuyo asunto contiene la palabra "Acuerdo"
  • example.ru:7070/home/user@example.ru/inbox?fmt=xml&query=is:unread — xml- «»


Para exportar los contactos del usuario, use el enlace a su carpeta de contactos curl -k 'https://example.ru:7070/home/user@example.ru/contacts?fmt=csv&auth=qp&zauthtoken=0_xxx'> ~ / contactos .csv CURL



también se utiliza para importar contactos. Por ejemplo, usando el comando curl -k --upload-file ~ / contacts.csv 'https://example.ru:7070/home/user@example.ru/contacts?fmt=csv&auth=qp&zauthtoken=0_xxx puede importar Archivo CSV con contactos.



El principal valor de la API REST es que todas las operaciones que se llevan a cabo con ella se prestan bien a la automatización utilizando scripts bash ordinarios. Por ejemplo, si obtiene la lista completa de usuarios con el comando zmprov -l gaa>users.txt, luego puede usar el archivo resultante para la ejecución secuencial de operaciones de rutina. Por ejemplo, para importar contactos a la libreta de direcciones, exportar correos electrónicos, etc. Por lo tanto, la API REST se puede utilizar para escribir las aplicaciones CRUB más simples y sencillas para la sincronización de datos entre varios sistemas de información en las empresas. Para crear programas basados ​​en la API REST, recomendamos utilizar el programa gratuito SoapUI , que le permite crear visualmente solicitudes SOAP y REST y ver las respuestas a ellas.



API SOAP



La API SOAP es mucho más compleja de trabajar que la API REST, pero tiene muchas más funciones. Además de administrar los datos almacenados en el servidor, SOAP API le permite administrar cuentas, dominios, de hecho, brindando acceso a toda la funcionalidad de Zimbra. Es por eso que la API SOAP se utiliza para escribir aplicaciones cliente más complejas. Por ejemplo, para cambiar la configuración de la cuenta y, por tanto, se utiliza para crear aplicaciones más avanzadas. Por ejemplo, el cliente web Zimbra OSE se comunica con el servidor mediante la API SOAP.



Como se mencionó anteriormente, SOAP es un protocolo para el intercambio de mensajes xml rígidamente estructurados, en el que una aplicación puede transmitir datos a otra. El transporte para transmitir mensajes SOAP suele ser HTTP.



La API SOAP en Zimbra OSE se divide en varias partes constituyentes. Entre ellos:



  • zimbraAccount : un conjunto de métodos SOAP responsables de interactuar con las cuentas de usuario
  • zimbraAdmin : un conjunto de métodos SOAP responsables de realizar acciones administrativas
  • ZimbraMail es un conjunto de métodos SOAP responsables de administrar los datos en el servidor.


Para trabajar correctamente con la API SOAP, necesita los archivos WSDL: xml, que describen los métodos SOAP disponibles para Zimbra. Puede descargarlos directamente desde su servidor utilizando los enlaces:





También necesitará archivos xsd con descripciones de las distintas secciones de la API SOAP. También puede descargarlos de su servidor utilizando los siguientes enlaces:





Después de importar WSDL a SoapUI, aparece una barra de herramientas con métodos para Zimbra OSE y puede componer varias aplicaciones a partir de ellos. Teniendo en cuenta las amplias capacidades proporcionadas por la API SOAP, es posible crear aplicaciones no solo para automatizar tareas para administrar el contenido del usuario, sino también para automatizar la edición de varias configuraciones, crear, eliminar y cambiar dominios, usuarios y clases de servicio.



La mayoría de las solicitudes SOAP requieren autenticación. Hay métodos de autenticación SOAP en zimbraAdmin y zimbraAccount para esto. Un ejemplo de solicitud de autenticación SOAP se vería así



<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:zimbra" xmlns:urn1="urn:zimbraAccount">
   <soapenv:Header>
      <urn:context xmlns:urn="urn:zimbra"/>
   </soapenv:Header>
   <soapenv:Body>
      <urn1:AuthRequest xmlns:urn1="urn:zimbraAccount">
         <urn1:account by="name">user@example.ru</urn1:account>
         <urn1:password>qwerty123</urn1:password>
      </urn1:AuthRequest>
   </soapenv:Body>
</soapenv:Envelope>
      
      





En este ejemplo, user@example.ru es el nombre de usuario y qwerty123 es su contraseña. Además, en la barra de direcciones de la solicitud, no olvide especificar https como método de conexión, de lo contrario, puede encontrar una desconexión del lado de Zimbra. La respuesta del servidor se verá así:



<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
   <soap:Header>
      <context xmlns="urn:zimbra">
         <change token="5489"/>
      </context>
   </soap:Header>
   <soap:Body>
      <AuthResponse xmlns="urn:zimbraAccount">
         <authToken>0_xxx</authToken>
         <lifetime>172799986</lifetime>
         <skin>zextras</skin>
      </AuthResponse>
   </soap:Body>
</soap:Envelope>
      
      





Contiene el token de autenticación en el campo, la fecha de vencimiento de este token (vida útil) en milisegundos y el nombre de la máscara utilizada.







Por ejemplo, creemos una solicitud para enviar un correo electrónico a Zimbra OSE. Un ejemplo de una solicitud SOAP correspondiente se vería así:



<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:zimbra" xmlns:urn1="urn:zimbraMail">
   <soapenv:Header>
      <context xmlns="urn:zimbra">
         <authToken>0_xxx</authToken>
      </context>
   </soapenv:Header>
   <soapenv:Body>
      <SendMsgRequest xmlns="urn:zimbraMail">
         <m su="">
            <content></content>
            <e a="admin@example.ru" t="f" p="admin" />
            <e a="ivanov@example.ru.com" t="t" p="Ivanov" />
         </m>
      </SendMsgRequest>
   </soapenv:Body>
</soapenv:Envelope>
      
      





Aquí, en el campo authToken, debe especificar el token de autenticación recibido anteriormente, en el campo SendMsgRequest, especificar el asunto y el texto de la carta, así como las cuentas y los nombres del remitente y el destinatario.



En este caso, hemos compilado manualmente varias solicitudes SOAP y REST para Zimbra. Sin embargo, su formación se puede automatizar creando scripts en varios lenguajes de programación. Sobre esto en uno de nuestros próximos artículos.



All Articles