Projeto 3 – Requisição REST
Vamos montar nossa próxima integração utilizando uma aplicação REST. Para tal vamos utilizar um BS que chamará o BP do nosso serviço demo (ver Primeira Integração). Vamos reaproveitar o serviço que então poderá ser chamado via SOAP ou REST. Teremos então dois BS que irão chamar o mesmo BP. A imagem abaixo ilustra essa arquitetura:
O primeiro passo vai ser criar um novo BS que não terá nenhum adaptador. Esse BS será chamado pela nossa aplicação REST que veremos mais a frente:
Class ws.rest.bs.Service Extends Ens.BusinessService
{
Parameter SERVICENAME = "entrada";
Method entrada(pInput As ws.demo.msg.Request) As ws.demo.msg.Response [ WebMethod ]
{
Set tSC=..SendRequestSync("bpEntrada",pInput,.tResponse)
Quit tResponse
}
}
Note que utilizamos o mesmo Request e Response do serviço que vimos na primeira integração, e chamamos o mesmo BP.
Agora vamos montar nossa aplicação REST e depois publica-la no IRIS:
Class ws.rest.api.Entrada Extends %CSP.REST
{
XData UrlMap
{
<Routes>
<Route Url="/entrada" Method="GET" Call="Entrada"/>
</Routes>
}
ClassMethod Entrada() As %Status
{
Set obj=##Class(ws.demo.msg.Request).%New()
Set obj.string1=%request.Get("string1")
Set obj.string2=%request.Get("string2")
Set tSC=##Class(Ens.Director).CreateBusinessService("ws.rest.bs.Service",.tService)
If tSC
{
Set resp=tService.entrada(obj)
} Else {
Set resp=##Class(ws.demo.msg.Response).%New()
Set resp.status=0
Set resp.mensagem=$SYSTEM.Status.GetErrorText(tSC)
}
Set saida = {}
Set saida.saida=resp.saida
Set saida.status=resp.status
Set saida.mensagem=resp.mensagem
Set saida.sessionId=resp.sessionId
Write saida.%ToJSON()
Quit $$$OK
}
}
Veja que usamos a chamada ENS.Director para acessar o BS ws.rest.bs.Service que colocamos na production.
Para maiores informações sobre a criação de aplicações REST veja o documento em https://docs.intersystems.com/irislatest/csp/docbook/DocBook.UI.Page.cls?KEY=GREST_csprest e quanto a Ens.Director veja em https://docs.intersystems.com/latest/csp/documatic/%25CSP.Documatic.cls?...
Agora que temos nossa aplicação REST desenvolvida vamos publica-la. Para isso vá no Portal de Administração no caminho Administração do Sistema->Segurança-Aplicações-Aplicações Web. Vamos criar uma nova aplicação Web de nome /api/entrada conforme a tela a seguir:
Salve a aplicação web que criamos. Note que você precisa apontar para o namespace onde você está montando seu código. No nosso exemplo é o namespace INTEGRA. Atente também para a marcação na caixa Habilitar REST e o preenchimento da caixa Expedir Classe com o nome da nossa classe REST.
Após salvar a aplicação web criada, vamos voltar a nossa production e incluir nela o nosso BS. Para isso clique no botão de incluir novo BS (sinal de mais ao lado do termo Services) e preencha a tela:
Pronto. Temos nosso BS configurado na nossa production, apontando para o BP da nossa primeira integração conforme vimos na tela no inicio deste texto que reproduzimos novamente abaixo:
Agora podemos utilizar uma ferramenta de teste para consumir o serviço. No nosso exemplo vamos usar o POSTMAN que foi baixado da internet e pode ser encontrado em https://www.postman.com/downloads/
Crie uma nova requisição REST e preencha conforme a tela a seguir:
O endereço do serviço é http://127.0.0.1/api/service/entrada onde /api/service é o nome da aplicação web que criamos anteriormente, e /entrada é a rota que queremos chamar. Passamos os parâmetros string1 e string2, enviamos a requisição e temos nossa resposta. Veja que recebemos o sessionID 2204, e com ele podemos consultar o que aconteceu:
Assim como na primeira integração podemos colocar o TCPTRACE para monitorar o tráfego da integração e verificar o que foi enviado e recebido em detalhes. Para isso ative o TCPTRACE e faça a configuração do mesmo para escutar na porta 8080 e repassar os dados recebidos para a porta 80 do nosso servidor:
Mude a configuração no POSTMAN para agora chamar o serviço na porta 8080, que é onde o TCPTRACE está esperando as chamadas. Reenvie a requisição e veja o resultado:
Agora, volte ao TCPTRACE e veja o que trafegou:
E temos o trace do integrador paea o sessionID 2208:
Neste artigo usamos o REST para receber uma requisição e reaproveitamos um serviço já desenvolvido para responder nossa requisição.
Assim fechamos nossa terceira integração. Utilizamos em nosso teste o IRIS 2024.1 que disponível para download na sua versão Community na internet.