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

[APIC]본격적으로 살펴보는 IBM API Connect 05 - 커스텀 포탈 활용 by REST API

by freeman98 2016. 8. 22.

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

IBM API Connect 에서는 Open CMS 기반의 Drupal 을 통해서 개발자들을 위한 개발자 포탈을 제공하며 해당 개발자 포탈은 블록기반으로 미리 만들어진 컴포넌트를 쉽게 등록/삭제 가능하여 원하는 형태의 포탈 커스터마이징이 가능합니다.
(참고 : 실운영중인 해외 APIC 포탈 사이트 : https://bian-api.developer.eu.apim.ibmcloud.com/ , https://developer.psa-peugeot-citroen.com/ )


이에 추가하여 포탈에서 표시되는 데이터에 대해서 REST API 로 외부에서 연계가능하므로 APIC의 데이터를 가지고 화면을 변경하는 커스텀 포탈을 쉽게 만들수 있게 지원 가능합니다.


REST API Reference - IBM API Connect 5.0 온라인 메뉴얼
https://www.ibm.com/support/knowledgecenter/en/SSMNED_5.0.0/com.ibm.apic.apirest.doc/rest_apis.html


이번 강좌에서는 IBM API Connect 에서 제공하는 REST API 를 활용해서 커스텀 포탈을 만든다는 가정으로 제공되는 REST API 를 활용해서 가능한 작업들을 한번 살펴보도록 하겠습니다.
(잘 아시겠지만 IBM API Connect 에서 제공하는 포탈을 그대로 사용하는 것이 아니라 아예 밑단부터 새롭게 포탈을 만들 경우나 기존 가지고 있는 전사 포탈에 일부로 개발자 포탈이 필요한 경우에 커스텀 포탈을 활용해 볼 수 있지 않을까 합니다.)


그럼 백문이 불여일타! 커스텀 포탈 활용 by REST API 에 대한 강좌를 진행하도록 하겠습니다.



1) 커스텀 포탈 설정 및 REST API 로 사용자 등록/활성화 하기


IBM API Connect 에서 커스텀 포탈을 사용하기 위한 설정 작업은 아주 단순합니다. 하단에 보이시는 것과 같이 API Manager 의 설정에서 포탈 구성을 클릭하여 기타에 실제 커스텀 포탈로 사용할 URL 만 등록해주면 됩니다.


여 기서는 별도의 LDAP 을 사용하지는 않고 API Manager 에 있는 로컬 사용자 레지스트리를 그대로 사용해서 사용자 관리를 수행하는 형태로 작업을 작업을 진행하도록 하겠습니다. (당연한 이야기지만 하단의 그림처럼 다양한 형태의 다른 사용자 레지스트리를 등록해서 사용 가능합니다.)


다 음으로 REST API 를 사용하기 위한 가장 기본적인 정보인 조직 이름과 카탈로그 이름을 확인하기 위해서 CMC 콘솔에서 조직(예: apic3)을 확인해보고 API Manager 에서 지금 사용하는 카탈로그의 이름(예: sb)을 하단과 같이 확인하고 기억해둡니다.


기본 정보를 확인하였다면 하단의 REST API 로 포탈 설정 정보를 바로 가지고 올 수 있습니다. 결과를 확인해보시면 아시겠지만 여기서는 orgID, envID 와 같은 다양한 포탈의 정보가 확인 가능합니다.

Get Portal Configuration
https://www.ibm.com/support/knowledgecenter/en/SSMNED_5.0.0/com.ibm.apic.apirest.doc/portal_config.html

curl -k -v -X GET -H "X-IBM-APIManagement-Context: apic3.sb"  "https://192.168.225.100/v1/portal/config?originURL=https://portal2.ibm.com"


다음으로 해당 포탈의 사용자 정보를 조회해 봅니다. (지금은 처음이라 아무런 사용자도 반환되지 않습니다.)

Get users lists
https://www.ibm.com/support/knowledgecenter/en/SSMNED_5.0.0/com.ibm.apic.apirest.doc/rest_op_portal_orgs__orgID__membersGET.html

curl -v -k -u "apim/admin3@localhost.com:Passw0rd!" -H "X-IBM-APIManagement-Context: apic3.sb" -H "Content-Type: application/json" "https://192.168.225.100/v1/portal/users"


다음으로 커스텀 포탈에 사용자 등록을 위한 REST API 를 호출합니다. 호출에 필요한 파라미터는 하단의 링크를 참고하시기 바라겠습니다.

Sign-Up to the portal
https://www.ibm.com/support/knowledgecenter/en/SSMNED_5.0.0/com.ibm.apic.apirest.doc/rest_op_portal_users_registerPOST.html

curl -v -k -u "apimanager/admin3@localhost.com:Passw0rd!" -X POST -d "{\"additionalFields\": { }, \"firstName\": \"dev31\", \"lastName\": \"dev31\", \"organization\": \"dev31\", \"password\": \"Passw0rd!\", \"username\": \"dev31@localhost.com\" }" "https://192.168.225.100/v1/portal/users/register" -H "X-IBM-APIManagement-Context:apic3.sb" -H "Content-Type:application/json"


이렇게 정상적으로 등록을 요청하면 API Manager 의 개발자 메뉴에 하단과 같이 개발자가 추가된 것을 확인할 수 있습니다.


다 만, 해당 개발자는 초대 메일이 발송되고 아직 활성화(Active)가 되지 않은 사용자 이므로 활성화하는 작업이 추가적으로 필요합니다. (참고적으로 이미 활성화된 사용자이거나 LDAP 을 사용해서 미리 등록을 해둔 상태라면 활성화 작업이 필요없이 바로 활성화까지 됩니다.)

추가된 개발자를 활성화시키기 위해서는 암호화되어 발송된 초대 메일을 활용해야 합니다. 기 등록된 메일을 보시면 하단과 같은 초대 메일이 있을 거며 이제 이를 활용하기 위해서 Base64 로 해당 메일을 decode 합니다.


https://portal2.ibm.com?activationToken=eyJ1cmwiOiJodHRwczovLzE5Mi4xNjguMjI1LjEwMC92MS9wb3J0YWwvdXNlcnMvNTdiYThlNGJlNGIwMTgyZGNkZjYxZjQ4L2FjdGl2YXRlIiwidXNlcm5hbWUiOiJkZXYzMUBsb2NhbGhvc3QuY29tIiwiYXV0aGVudGljYXRpb24iOnsidXNlcm5hbWUiOiI1N2JhODhmMmU0YjAxODJkY2RmNjFlNmEvNTdiYTg4ZjJlNGIwMTgyZGNkZjYxZTZiL0Q0c0szYkw2d0gxaEUyclU1Y0IwZVIwYlUzakQ1YUk4dFMycUQ0Zlg2dSIsInBhc3N3b3JkIjoiOHB5OXNHc0lQelJoWnZWUEc0Tmk2bXBTOGo0R0hzRUtMaXgwUmZWdk92In0sInByb3ZpZGVyQ29udGV4dCI6bnVsbH0


Base64 decoded - http://base64decode.net/


Base64 로 정상적으로 decode 되었다면 하단과 같이 초대 메일안에 포함된 username 과 password 를 확인가능합니다. 이제 해당 username 과 password 를 가지고 사용자에 대해서 활성화 요청을 REST API 로 호출합니다.

{"url":"https://192.168.225.100/v1/portal/users/57ba8e4be4b0182dcdf61f48/activate","username":"dev31@localhost.com","authentication":{"username":"57ba88f2e4b0182dcdf61e6a/57ba88f2e4b0182dcdf61e6b/D4sK3bL6wH1hE2rU5cB0eR0bU3jD5aI8tS2qD4fX6u","password":"8py9sGsIPzRhZvVPG4Ni6mpS8j4GHsEKLix0RfVvOv"},"providerContext":null}

Activate user
https://www.ibm.com/support/knowledgecenter/en/SSMNED_5.0.0/com.ibm.apic.apirest.doc/rest_op_portal_users__userID__activatePOST.html

curl -v -k -u "57ba88f2e4b0182dcdf61e6a/57ba88f2e4b0182dcdf61e6b/D4sK3bL6wH1hE2rU5cB0eR0bU3jD5aI8tS2qD4fX6u:8py9sGsIPzRhZvVPG4Ni6mpS8j4GHsEKLix0RfVvOv" -H "X-IBM-APIManagement-Context: apic3.sb" -H "Content-Type: application/json" -X POST -d "{}" "https://192.168.225.100/v1/portal/users/57ba8e4be4b0182dcdf61f48/activate"


등록한 개발자에 대한 활성화 작업이 정상적으로 완료되면 하단과 같이 API Manager 화면에서 정상적으로 이름과 이메일 확인이 가능하며 이제부터 해당 개발자는 API 를 구독하거나 사용이 가능합니다.


 
2) REST API 로 애플리케이션 생성/API 구독 하기


이전 파트까지 정상적으로 따라와서 등록된 개발자가 활성화 되었다면 해당 개발자 조직에 대한 Org ID 를 REST API 를 통해서 조회합니다.

get Organization
https://www.ibm.com/support/knowledgecenter/en/SSMNED_5.0.0/com.ibm.apic.apirest.doc/rest_op_portal_orgsGET.html

curl -v -k -u "dev31@localhost.com:Passw0rd!" -H "X-IBM-APIManagement-Context: apic3.sb" -H "Content-Type: application/json" -X GET "https://192.168.225.100/v1/portal/orgs"


해당 개발자 조직에 등록된 애플리케이션이 있는지 확인하기 위해서는 하단과 같이 REST API 호출을 수행하면 됩니다.

List applications
https://www.ibm.com/support/knowledgecenter/en/SSMNED_5.0.0/com.ibm.apic.apirest.doc/rest_op_portal_orgs__orgID__apisGET.html

curl -v -k -u "dev31@localhost.com:Passw0rd!" -H "X-IBM-APIManagement-Context: apic3.sb" -H "Content-Type: application/json" -X GET "https://192.168.225.100/v1/portal/orgs/57ba8e4ce4b0182dcdf61f49/apps"


실 제로 인증을 위해 필요한 client ID 와 client Secret 을 가진 등록된 애플리케이션이 없으므로 하단의 REST API 를 활용해서 애플리케이션을 하나 생성합니다. (참고로 이때 반환되는 Client ID 와 Client Secret 은 잘 아시겠지만 API 사용을 위한 인증 목적으로 사용되기 때문에 향후 API 호출을 위해서 기억해 두어야 합니다. 또는, client ID 는 API Manager 콘솔의 등록 메뉴에서 확인 가능합니다.)

Create applications
https://www.ibm.com/support/knowledgecenter/en/SSMNED_5.0.0/com.ibm.apic.apirest.doc/rest_op_portal_orgs__orgID__appsPOST.html

curl -v -k -u "dev31@localhost.com:Passw0rd!" -H "X-IBM-APIManagement-Context: apic3.sb" -H "Content-Type: application/json" -X POST -d "{ \"name\": \"TestApp01\", \"credentials\":  { \"clientID\":true, \"clientSecret\": true, \"description\": \"TestApp01\" }  ,  \"description\": \"\", \"oauthRedirectURI\": \"\", \"public\": true }" "https://192.168.225.100/v1/portal/orgs/57ba8e4ce4b0182dcdf61f49/apps"


해당 작업을 정상적으로 수행하면 API Manager 콘솔의 등록 메뉴에서 하단과 같이 애플리케이션이 추가된 것을 확인 가능합니다.


다음으로 해당 애플리케이션이 실제로 API 테스트를 수행하려면 API 사용을 할 수 있게 구독 요청을 수행해야 합니다. 이를 위해서 먼저 현재 API 의 리스트를 REST API 로 호출합니다.

List API
https://www.ibm.com/support/knowledgecenter/en/SSMNED_5.0.0/com.ibm.apic.apirest.doc/rest_op_portal_orgs__orgID__apisGET.html

curl -v -k -u "dev31@localhost.com:Passw0rd!" -H "X-IBM-APIManagement-Context: apic3.sb" -H "Content-Type: application/json" -X GET "https://192.168.225.100/v1/portal/orgs/57ba8e4ce4b0182dcdf61f49/apis"


List API 에서 등록하고자 하는 API 의 플랜과 제품 이름등을 확인한 후 등록을 위한 REST API 를 호출합니다.

Subscribe API
https://www.ibm.com/support/knowledgecenter/en/SSMNED_5.0.0/com.ibm.apic.apirest.doc/rest_op_portal_orgs__orgID__apps__appID__subscriptionsPOST.html

curl -v -k -u "dev31@localhost.com:Passw0rd!" -H "X-IBM-APIManagement-Context: apic3.sb" -H "Content-Type: application/json" -X POST -d "{ \"plan\": \"default\", \"product\": { \"name\": \"testpd\", \"version\": \"1.0.0\" } } " "https://192.168.225.100/v1/portal/orgs/57ba8e4ce4b0182dcdf61f49/apps/57ba909ee4b0182dcdf61fa5/subscriptions"


위의 작업이 정상적으로 수행되었다면 하단과 같이 API Manager 콘솔의 등록메뉴에서 지정된 애플리케이션에 플랜이 등록된 것을 하단과 같이 확인 가능합니다.


이렇게 REST API 만으로 사용자를 추가하고 애플리케이션을 생성한후 API 구독이 정상적으로 완료되었다면 하단과 같이 실제 API 호출해서 결과를 확인해 볼 수 있습니다.

curl -k -v -X GET "https://192.168.225.52/apic3/sb/testLoan/call?loanAmount=10000&annualInterestRate=0.9&termInMonths=52" -H "X-IBM-Client-Id: b45218e4-fca6-43d2-a305-4ed98f0a51cf"



9) 참고 자료
1.    IBM API Connect 5.0 온라인 메뉴얼(Knowledge Center) – 한글 제공
https://www.ibm.com/support/knowledgecenter/ko/SSMNED_5.0.0/mapfiles/ic_home.html

2.    REST APIs reference - IBM API Connect 5.0 온라인 메뉴얼
https://www.ibm.com/support/knowledgecenter/en/SSMNED_5.0.0/com.ibm.apic.apirest.doc/rest_apis.html

댓글