본문 바로가기
IBM - old/IBM APIC

[APIC]기존의 SOAP 서비스를 IBM API Connect 사용해서 REST 서비스로 변환하기

by freeman98 2017. 1. 9.

안녕하세요 이정운 입니다.

Microservice architecture 를 위한 API Gateway 구축을 하게 되면 가장 빈번한 시나리오중의 하나는 기존 ESB 에서 처리되고 있던 SOAP 서비스를 REST 형태로 변환하는 작업이 아닐까 합니다.
(당연히 microservice architecture 를 수립할 때 기존의 SOAP 서비스를 REST 로 미리 변환해두는 것이 제일 좋지만...이게 마음대로 되지 않을때도 많아서...)

이를 위해서 IBM API Connect 는 WSDL 을 서비스로 등록하여 바로 Assemble 을 위한 정책을 만들어서 변환할 수 있는 손쉬운 방법을 제공하고 있습니다.

해당 부분에 대한 테스트를 통해서 어떻게 IBM API Connect 가 기존 SOAP 서비스를 REST API 로 변환하는지에 대한 부분을 정리해서 공유드리오니 참고하시기 바라겠습니다.

사전 참고 자료:

Creating a REST API definition that invokes an existing SOAP service(메뉴얼)
https://www.ibm.com/support/knowledgecenter/en/SSMNED_5.0.0/com.ibm.apic.apionprem.doc/tutorial_apionprem_expose_SOAP.html

Create a REST API to SOA Service(동영상)
https://www.youtube.com/watch?v=XfmMSRhZw1U&feature=youtu.be


#1) IBM API Connect 의 관리 콘솔에서 REST 호출을 위한 새로운 API 를 하나 생성합니다.



#2) 새로운 API 의 이름과 경로, 버전등을 넣고 API 를 생성합니다.(간단한 테스트 목적이라 실제 서비스로 올리기 위한 제품(Product)도 바로 같이 생성합니다.)



#3) API 를 생성하면 하단과 같이 정의가 비어있는 것을 확인할 수 있으며 우선 SOAP 서비스 연동을 위해서 Services 메뉴에서 추가를 위한 '+' 아이콘을 클릭합니다.



#4) SOAP 서비스를 추가하기 위해서 WSDL 이 필요하며 각 환경에서 불러오기 편한 방법을 선택하여 WSDL 을 가지고 옵니다.



#5) 예를 들어 URL 에서 WSDL 을 직접 가져오게 한다면 하단과 같이 해주면 됩니다.




#6) 그러면 하단과 같이 WSDL 을 이용해서 자동으로 SOAP services 가 추가된 것을 확인 가능합니다.



#7) 이제 REST 로 변환하기 위해서 input/output 에 사용될 변수를 사전에 정의합니다.




#8) 실제 REST API 호출을 위한 경로(path)를 추가하고 input 에 사용될 파라미터를 선언합니다.



#9) 이제 실제 호출 부분을 작성하기 위해서 Assemble 탭에 들어간 후 기 정의되어 있는 invoke 정책을 삭제하고 서비스의 WSDL 추가에 따른 Web Service Operation 이 왼쪽 정책 리스트 메뉴에 추가된 것을 확인합니다.




#10) 호출하고자 하는 SOAP 서비스를 선택해서 드래그&드랍하면 하단과 같이 자동으로 "Map->Invoke->Map" 정책이 만들어지는 것을 확인 가능합니다.
(실제로 REST 로 들어오는 input 을 앞단의 Map 을 이용해서 SOAP 서비스를 위한 input 으로 매핑하고, Invoke 를 통해서 SOAP 서비스를 호출하고, 이에 대한 결과를 뒷단의 Map 을 이용해서 다시 SOAP 에서 REST 를 위한 output 으로 변환)



#11) REST input 을 SOAP 서비스를 위한 input 으로 매핑하기 위해 Map 정책에서 Input 을 하단과 같이 추가한 후 완료를 클릭합니다. (Context variable : request.parameters, Definition : 미리 만들어둔 REST input 정의)



#12) 그러면 Map 정책에 Input 값이 추가되며 마우스를 이용하여 하단과 같이 선을 연결하여 REST 의 input 을 SOAP 의 input(여기서는 Output 이라고 표시)으로 변환시킵니다.



#13) 마찬가지로 뒷단의 Map 정책도 output 을 클릭하여 하단과 같이 추가합니다.(Deginition: 미리 정의한 REST 의 output 정의)



#14) 다시 SOAP 서비스의 결과를 정의한 REST 의 output 정의에 연결하여 변환시킵니다.



이렇게 한후 저장하면 기존 ESB 에서 처리되고 있던 SOAP 서비스를 REST 형태로 변환하는 작업에 대한 모든 설정 준비가 완료되었습니다. (당연히 테스트나 서비스를 위해서는 해당 제품을 배포해야 합니다.)

#15) Assemble 탭의 상단에 위치한 ▶ 아이콘을 클릭하면 개발중에 바로 테스트 가능합니다. 실행 아이콘을 클릭한 후 테스트하고자 하는 카탈로그 제품, API 등을 선택한후 미리 정의된 input 값을 테스트로 추가한 후 Invoke 를 호출합니다.



#16) 정상이라면 하단과 같이 200 OK 코드 값과 함께 정상적으로 REST 서비스로 input 을 받아서 실제 SOAP 서비스를 호출한 후 그 결과를 다시 REST 형태로 반환하는 것을 하단과 같이 확인 가능합니다.



여기까지 잘 따라오셨다면 문제없이 테스트를 성공적으로 수행한 것입니다.

그럼 이만..


댓글