B-C-ME2SR3

{OPEN} 닷넷 개발환경을 위한 Open API 호출 가이드 #4

Blog Post created by B-C-ME2SR3 Employee on Jun 29, 2015

글을 조금씩 나누어 쓰다보니 어느새 4번째 블로그 포스팅이 되었습니다.

앞선 세가지 포스팅을 아직 못보신 분이 계시다면 아래의 링크를 통해 어떤 내용들이 이야기 되었고

실제 API 호출을 위해 준비해야 할 사항들을 먼저 점검하시고 오시면 좋겠습니다!

 

{OPEN} 닷넷 개발환경을 위한 Open API 호출 가이드 #1 - C#용 EdgeGrid Signing 라이브러리 빌드하기

{OPEN} 닷넷 개발환경을 위한 Open API 호출 가이드 #2 - Visual Studio 에서 라이브러리 참조 및 네임스페이스 선언하기

{OPEN} 닷넷 개발환경을 위한 Open API 호출 가이드 #3 - Luna Control Center 에서 API 호출용 Credential 생성하기

 

지난번 포스팅의 말미에 Open API 호출을 위한 4가지 값을 모두 확인하셨을겁니다.

이 정보들은 함께 조합이 되어야 의미가 있는 정보이고 호출하려는 API 및 설정 상태에 따라

서로 다른 값을 가지게 되기 때문에 잘못된 정보를 이용하여 호출하지 않도록 주의하셔야 합니다.

 

닷넷에서 HTTP Request 를 호출하는 방법은 여러가지가 있습니다.

이 부분에 대해서는 개발하시는 분들의 개인취향(?)이기 때문에 어느것을 사용하셔도 무방합니다.

아래의 예제 코드는 닷넷 프레임워크 4.5 환경에서 System.Net.Http 를 이용했다는 점 참고로 알려드립니다.

 

아카마이 API 호출을 위해서는 개별 API 호출이 사전에 생성된 Credential 정보를 이용해서 Signing 되어야 합니다.

Signing 된 요청은 인증을 위한 특별한 헤더 정보를 포함하게 되고 아카마이 API Endpoint 는 헤더 정보로 합법적인 요청을 검증하게 됩니다.

 

// Luna > Manage API 에서 획득한 값 설정

// HTTP Request 객체 생성 코드

// Credential 생성 및 Signing 로직
var credentials = new ClientCredential(clientToken, accessToken, secret);
var signer = new EdgeGridV1Signer();
signer.Sign(req, credentials);

 

Akamai.EdgeGrid.Auth.dll 이 가지고 있는 여러가지 Function 중 Credential 정보는 ClientCredential 의 객체를 생성하여 사용하게 되고

실제 HTTP Request 를 Signing 하는 과정은 EdgeGridV1Signer 객체의 Sign 메소드가 담당하게 됩니다.

앞선 포스팅에서 봤던 4가지 정보들 중 ClientCredential 인스턴스를 만들떄는 Client Token, Access Token, Secret 의 세가지 값이 이용됩니다.

나머지 하나였던 Base URL 은 HTTP Request 인스턴스를 만들때 사용되게 됩니다.

 

여기서 주의할 점은 Base URL 자체는 HTTP Request 의 Host 정보로만 사용이 되고

실제 호출해야 하는 API 및 Method 에 따라 실제 End Point 의 URL 은 달라지게 된다는 점입니다.

Method 에 따른 실제 호출 End Point 는 developer.akamai.com 에서 API 명세를 확인후 사용하셔야 합니다.

 

// Luna > Manage API 에서 획득한 값 설정
string URL = "https://akab-This_have_to_be_changed_your_one.luna.akamaiapis.net/papi/v0/properties/prp_123456/versions/latest?contractId=ctr_C-123ABC&groupId=grp_12345&activatedOn=STAGING";
string clientToken = "akab-This_have_to_be_changed_your_one";
string accessToken = "akab-This_have_to_be_changed_your_one";
string secret = "This_have_to_be_changed_your_one";

// HTTP Request 객체 생성 코드

// Credential 생성 및 Signing 로직
var credentials = new ClientCredential(clientToken, accessToken, secret);
var signer = new EdgeGridV1Signer();
signer.Sign(req, credentials);

 

위의 예시는 Property API 를 이용하여 특정한 설정의 스테이징 Config 버전을 불러오는 Method 의 호출 예시입니다.

각 변수 값들은 실제 Luna > Manage API 를 통해 발급받은 값으로 대치를 하시면 됩니다.

이제 실제 HTTP Request 객체까지 채워넣어 보겠습니다.

 

// Luna > Manage API 에서 획득한 값 설정
string URL = "https://akab-This_have_to_be_changed_your_one.luna.akamaiapis.net/papi/v0/properties/prp_123456/versions/latest?contractId=ctr_C-123ABC&groupId=grp_12345&activatedOn=STAGING";
string clientToken = "akab-This_have_to_be_changed_your_one";
string accessToken = "akab-This_have_to_be_changed_your_one";
string secret = "This_have_to_be_changed_your_one";

// HTTP Request 객체 생성 코드
var req = (HttpWebRequest)WebRequest.Create(URL);
req.Method = "GET";
req.KeepAlive = true;
req.ContentType = "application/json";
req.Host = "akab-This_have_to_be_changed_your_one";
req.AllowAutoRedirect = false;

// Credential 생성 및 Signing 로직
var credentials = new ClientCredential(clientToken, accessToken, secret);
var signer = new EdgeGridV1Signer();
signer.Sign(req, credentials);

 

API 의 각 Method 를 호출할 때에는 Method 별로 가지고 있는 특징을 잘 이해해야 합니다.

예시로 든 Property API 의 Config Version 을 체크하는 Method 의 경우

리턴되는 값이 302 Redirect 응답을 하도록 되어 있기 때문에 AllowAutoRedirect 값을 false 로 설정하여

자동 Redirect 로 인해 Signing 값이 소실되어 에러 응답을 하는 경우에 대비한 모습도 보이실 겁니다.

 

결과 값은 JSON 형태로 리턴되는 것이 일반적이고

위의 예제의 리턴값은 정보보안 차원에서 본문에는 넣지 않았습니다 ^^;;;

 

--------------------

 

처음 Open API 를 이용해서 데이터를 추출 하시려다보면 많은 난관(?)을 만나시게 됩니다.

API 스펙에 따라 정상적으로 구현을 한 것 같은데 데이터가 잘 나오지 않는 경우에는

고민만 하지 마시고 언제든 Customer Care 티켓을 열어주시거나

전담 지원팀 컨택포인트가 있는 경우 메일 / 전화 연락 주시는 것이 가장 빠릅니다!

 

이상으로 4회에 걸친 닷넷 개발환경에서의 Open API 호출 가이드를 마치도록 하겠습니다.

감사합니다!

Outcomes