SOAP e REST API - quais são as diferenças?
Embora a API SOAP e a API REST realmente executem a mesma função, há mais diferenças do que semelhanças entre elas e essas diferenças começam com a definição. Portanto, se o SOAP é um protocolo projetado para padronizar a troca de dados entre os serviços da web, independentemente da linguagem em que são escritos, o REST é um estilo de arquitetura de um serviço da web, o que implica uma série de restrições de acordo com as quais um serviço da web é criado ...
Especificamente, Zimbra REST API e SOAP API diferem em escopo. A API REST é usada aqui apenas para operações CRUD, ou seja, para criar, ler, atualizar e excluir objetos no servidor. Portanto, a API REST é usada principalmente para criar integrações simples com sistemas de terceiros, pois permite baixar dados do Zimbra em vários formatos, como xml, json, rss, html, zip, tar, tgz, ics, ifb , csv e outros, e também importar dados para o Zimbra. A API SOAP pode ser usada para outras operações, além de gerenciar dados de caixa de correio. Outra diferença significativa é que REST é menos seguro que SOAP.
A API difere da linha de comando, que no Zimbra OSE tem ainda mais funcionalidade e suporta a formação de scripts bash, pois seu funcionamento não requer acesso à conta do sistema Zimbra no servidor de e-mail.
API REST A API
REST é representada no Zimbra OSE por um conjunto de métodos para trabalhar com correio, calendários, tarefas e contatos. Entre eles:
- Obter pasta - exportar o conteúdo de uma pasta de e-mail
- Importar mensagem - importar uma mensagem para uma pasta de e-mail
- Obter contatos - exportar contatos
- Importar contatos - importar contatos
- Obter calendário - exportar calendário
- Get FreeBusy - Exportar dados do Free Busy
- Importar compromissos - importar dados da reunião
- Obter tarefas - exportar tarefas
- Obter item - exportar item
Todos os métodos acima requerem autenticação do usuário. Isso pode ser feito adicionando dados de autenticação à string de consulta, bem como tendo recebido um token de autenticação, use-o para fazer login no servidor. Você pode obter um token inserindo os dados de autenticação do administrador do servidor, bem como inserindo os dados de autenticação do usuário para o qual o token foi emitido:
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'
O resultado desse comando será a criação de um arquivo token.txt na pasta pessoal do usuário que conterá o token de autenticação. Observe que este token tem uma data de expiração limitada e, após esse período, você precisará emitir um novo token para acessar a caixa de correio Zimbra por meio de solicitações REST. O token em si é uma string de 313 caracteres começando com '0_'.
Depois de copiar esse token, você pode usá-lo para acessar os dados da caixa de correio por meio da API REST. Por exemplo, você pode obter o conteúdo da caixa de entrada do usuário Zimbra usando um comando como curl -k 'https://example.ru/home/user@example.ru/Inbox/?fmt=rss&auth=qp&zauthtoken=0_xxx'> ~ / inbox xml, onde 0_xxx é o token de autenticação, auth = qp é o método de autenticação de token, fmt = rss é o formato de saída e ~ / inbox xml é o arquivo para o qual o conteúdo da caixa de entrada será exportado.
Ao adicionar vários argumentos à solicitação REST, você pode exportar dados parcialmente da caixa de entrada. Por exemplo:
- example.ru : 7070/home/user@example.ru/inbox? fmt = xml & query = agreement - este link na solicitação REST permitirá que você receba na forma de um arquivo xml todas as cartas do usuário da pasta Caixa de entrada contendo a palavra "Acordo"
- example.ru : 7070/home/user@example.ru/inbox? fmt = xml & query = subject: agreement - permite que você receba na forma de um arquivo xml todas as cartas do usuário da pasta Inbox, cujo assunto contém a palavra "Acordo"
- example.ru:7070/home/user@example.ru/inbox?fmt=xml&query=is:unread — xml- «»
Para exportar os contatos do usuário, use o link para sua pasta de contatos curl -k 'https://example.ru:7070/home/user@example.ru/contacts?fmt=csv&auth=qp&zauthtoken=0_xxx'> ~ / contatos .csv CURL
também é usado para importar contatos. Por exemplo, usando o comando curl -k --upload-file ~ / contacts.csv 'https://example.ru:7070/home/user@example.ru/contacts?fmt=csv&auth=qp&zauthtoken=0_xxx você pode importar CSV - arquivo com contatos.
O principal valor da API REST é que todas as operações realizadas por meio dela se prestam bem à automação por meio de scripts bash comuns. Por exemplo, se você obtiver a lista inteira de usuários com o comando zmprov -l gaa>users.txt, então você pode usar o arquivo resultante para execução sequencial de operações de rotina. Por exemplo, para importar contatos para o catálogo de endereços, exportar e-mails e assim por diante. Portanto, a API REST pode ser usada para escrever os aplicativos CRUB mais simples e simples para sincronização de dados entre vários sistemas de informação nas empresas. Para criar programas baseados na API REST, recomendamos o uso do programa SoapUI gratuito , que permite criar visualmente solicitações SOAP e REST e visualizar as respostas a elas.
API SOAP
A API SOAP é muito mais complexa de se trabalhar do que a API REST, mas tem muito mais recursos. Além de gerenciar os dados armazenados no servidor, a API SOAP permite gerenciar contas, domínios, de fato, proporcionando acesso a todas as funcionalidades do Zimbra. É por isso que a API SOAP é usada para escrever aplicativos de cliente mais complexos. Por exemplo, para alterar as configurações da conta e, portanto, é usado para criar aplicativos mais avançados. Por exemplo, o cliente Web Zimbra OSE se comunica com o servidor usando a API SOAP.
Conforme mencionado acima, SOAP é um protocolo para a troca de mensagens xml rigidamente estruturadas, em que um aplicativo pode transmitir dados para outro. O transporte para transmissão de mensagens SOAP geralmente é HTTP.
A API SOAP no Zimbra OSE é dividida em várias partes constituintes. Entre eles:
- zimbraAccount - um conjunto de métodos SOAP responsáveis por interagir com contas de usuário
- zimbraAdmin - um conjunto de métodos SOAP responsáveis por realizar ações administrativas
- ZimbraMail é um conjunto de métodos SOAP responsáveis pelo gerenciamento de dados no servidor.
Para funcionar corretamente com a API SOAP, você precisa dos arquivos WSDL: xml, que descrevem os métodos SOAP disponíveis para Zimbra. Você pode baixá-los diretamente de seu servidor usando os links:
- WSDL para zimbraAdmin - SEU SERVIDOR / service / wsdl / ZimbraAdminService.wsdl
- WSDL para zimbraAccount - SEU SERVIDOR / service / wsdl / ZimbraUserService.wsdl
- WSDL para todos os métodos da API SOAP - SEU SERVIDOR / service / wsdl / ZimbraService.wsdl
Você também precisará de arquivos xsd com descrições para as várias seções da API SOAP. Você também pode baixá-los de seu servidor usando os seguintes links:
- SEU SERVIDOR / service / wsdl / zimbra.xsd
- SEU SERVIDOR / service / wsdl / zimbraAdmin.xsd
- SEU SERVIDOR / service / wsdl / zimbraAdminExt.xsd
- SEU SERVIDOR / service / wsdl / zimbraMail.xsd
- SEU SERVIDOR / service / wsdl / zimbraRepl.xsd
- SEU SERVIDOR / service / wsdl / zimbraSync.xsd
- SEU SERVIDOR / service / wsdl / zimbraVoice.xsd
Depois de importar WSDL para SoapUI, uma barra de ferramentas aparece nela com métodos para Zimbra OSE e você pode compor vários aplicativos a partir deles. Considerando os extensos recursos fornecidos pela API SOAP, torna-se possível criar aplicativos não apenas para automatizar tarefas de gerenciamento de conteúdo do usuário, mas também para automatizar a edição de várias configurações, criar, excluir e alterar domínios, usuários e classes de serviço.
A maioria das solicitações SOAP requer autenticação. Existem métodos de autenticação SOAP no zimbraAdmin e no zimbraAccount para isso. Um exemplo de solicitação SOAP para autenticação seria semelhante a este
<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>
Neste exemplo, user@example.ru é o nome de usuário e qwerty123 é sua senha. Além disso, na barra de endereço da solicitação, não se esqueça de especificar https como o método de conexão, caso contrário, você pode encontrar uma desconexão do lado do Zimbra. A resposta do servidor será assim:
<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>
Ele contém o token de autenticação no campo, a data de expiração desse token (tempo de vida) em milissegundos e o nome do skin usado.
Por exemplo, vamos criar uma solicitação para enviar um e-mail para o Zimbra OSE. Um exemplo de solicitação SOAP correspondente seria assim:
<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>
Aqui, no campo authToken, você deve especificar o token de autenticação recebido anteriormente, no campo SendMsgRequest, especificar o assunto e o texto da carta, bem como as contas e nomes do remetente e do destinatário.
Neste caso, compilamos manualmente várias solicitações SOAP e REST para o Zimbra. No entanto, sua formação pode ser automatizada pela criação de scripts em várias linguagens de programação. Sobre isso em um de nossos próximos artigos.