B-C-ME2SR3

{OPEN} PHP 언어를 이용한 Open API 호출 가이드 #3

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

안녕하세요?

아카마이 코리아 노승헌입니다.

 

지난번 업데이트 이후 여러가지 사정(?)으로 이후 포스팅이 많이 늦어졌습니다.

지난 포스팅에서 PHP 를 이용한 개발 환경 구성까지 마쳤고 간단히 Composer 를 이용하여

필요한 라이브러리들을 Import 하여 사용할 준비를 마쳐봤습니다.

 

오늘은 준비된 개발 환경에서 어떤 항목들은 추가로 준비해야 하는지를 살펴보고

실제 PHP 코드에서 추가적으로 준비해야 하는 부분들을 확인해 보겠습니다.


먼저 준비된 코드에 인증 Credential 정보를 전달하는 코드를 추가해보겠습니다.

코드 내에서 직접 인증 정보를 포함하는 것은 좋은 방법이 아니기 때문에

별도로 ".edgerc" 파일을 만들어 필요한 정보를 전달해 보도록 하겠습니다.

 

[default]
client_secret = xxxxxxxxxxx
host = akab-******-******.luna.akamaiapis.net
access_token = akab-******-******
client_token = akab-******-******

 

위의 내용은 사용하려는 계약 조건, 사용하려는 API, 권한 등에 따라 달라지게 됩니다.

필요한 값을 생성하고 확인하기 위해서는 Luna Control Center 의 Manage API 메뉴를 이용하시면 됩니다.

지난 포스팅에 해당 내용을 정리해 놓았으니 아래의 링크를 참고하시면 되겠습니다!

 

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

 

접속을 위한 정보가 준비되었다면 코드에 아래와 같이 Client 클래스를 생성해 보도록 하겠습니다.

해당 파일내의 정보를 읽어들여 API 호출시 사용할 수 있도록 설정해 보겠습니다.

 

<?
     require 'vendor/autoload.php';
     $client  = \Akamai\Open\EdgeGrid\Client::createFromEdgeRcFile();
?>


혹시 edgerc 파일내에 여러개의 섹션을 넣고 상황에 따라 별도의 인증 조건이 필요하다면

createFromEdgeRcFile 함수를 호출할 때 파라메터로 섹션명을 전달해야 합니다.

참고를 위해서 해당 함수의 선언부를 아래에 붙여 넣어 두었습니다.

 

public static function createFromEdgeRcFile($section = 'default', $path = null, $options = [])

 

여기까지 준비가 되었으면 라이브러리의 참조가 잘 되고 있는지 한번 확인해 보겠습니다.

PHP 로 만들었기 때문에 터미널에서 php 로 직접 실행해도 되겠죠?

혹시 웹 서버를 경유하게 해두셨다면 브라우저로 에러가 발생하는지 확인하시면 됩니다.

 

스크린샷 2015-10-29 오후 3.20.18.png

 

여기까지 마무리가 되었다면 이제 실제 호출해야 하는 API 의 Endpoint Path 를 확인해야 합니다.

사용하고자 하는 API 종류에 따라 정확한 경로 및 파라메터를 전달해 주어야 하는데요

이번 포스팅에서는 간단하게 아무런 파라메터 없이 사용할 수 있는 Media Report API 의 Dimentions 목록을 요청하는 API 를 불러보겠습니다

파라메터를 던저야 하는 케이스는 다음 포스팅에서... 후훗.

 

Cursor_및_Media_Reports_API.png

 

화면이 좀 작기 때문에 클릭~ 해서 큰 화면으로 보시면 http://developer.akamai.com 웹 사이트에서

Media Reports API > Reference > Download Delivery Resources 쪽에서 확인한 Dimensions 섹션의 내용입니다.

DImensions 섹션의 샘플을 확인하고 필요한 부분(붉은 박스 부분)을 복사해서 아래와 같이 코드에 넣어 보았는데요

이때 이 API 는 GET 을 사용하는 API 라는 것도 눈여겨 보셔야겠습니다.

 

<?
     require 'vendor/autoload.php';
     $client  = \Akamai\Open\EdgeGrid\Client::createFromEdgeRcFile();
     $path = "/media-reports/v1/download-delivery/dimensions";
?>

 

$path 변수는 말 그대로 호출할 경로만 지정하는 것이니

이제 그 값을 이용하여 실제 API Endpoint 를 호출해 보도록 하겠습니다.

앞서 생성한 Client 의 객체인 $client 의 메소드들 중 GET 방식의 호출을 하기 위해 준비된 메소드를 사용하겠습니다.

 

<?
     require 'vendor/autoload.php';
     $client  = \Akamai\Open\EdgeGrid\Client::createFromEdgeRcFile();
     $path = "/media-reports/v1/download-delivery/dimensions";
     $response = $client->get($path);
?>


get 메소드는 호출할 경로를 파라메터로 전달받게 되어 있습니다.

전달 받은 파라메터를 .edgerc 파일에 지정된 host 값의 도메인과 결합하여 호출하게 되며

인증 파라메터들을 이용해서 계산된 헤더를 요청에 자동으로 포함시켜줍니다. (당...당연한 이야기일지도...)

 

get 메소드는 HTTP 응답 객체를 (정확히는 Guzzle 의 객체입니다만..) 리턴하게 되며

실제 정보가 전달되는 HTTP Body 의 내용 확인을 위해서 아래와 같이 응답 객체의 getBody 메소드를 이용해 보겠습니다.

 

<?
  require 'vendor/autoload.php';
  $client  = \Akamai\Open\EdgeGrid\Client::createFromEdgeRcFile();
  $path = "/media-reports/v1/download-delivery/dimensions";
  $response = $client->get($path);
  $response = $response->getBody();
  $response = json_decode($response, TRUE);

  var_dump($response);
?>

 

응답되는 객체가 JSON 형태이기 때문에 PHP 에서 이용하기 좋은 형태로 바꿔주는게 좋아 보입니다.

PHP 는 5.2.0 이후 버전에서부터 json_decode 라는 유용한 함수를 제공하고 있습니다.

JSON 포맷을 중첩 Array 형태로 바꾸어 주어 PHP 에서 쉽게 다룰 수 있게 해주니 참 고마운 녀석입니다!

 

자, 이제 결과를 한번 보겠습니다.

 

스크린샷 2015-10-29 오후 3.34.39.png

 

총 11개의 노드가 반환 되었고 각 노드에는 Media Report 에서 활용되고 있는

여러가지 Dimensiton 코드와 상세 설명이 잘 리턴되고 있는 것이 확인됩니다.

 

아카마이의 Open API 는 HTTP 표준을 준수하여 인증 등을 수행하고 있기 때문에

필요하신 경우 얼마든지 직접 필요한 인증 헤더 생성 로직등을 구성하고 만드실 수 있습니다.

 

하지만 공식 제공되는 라이브러리를 이용하면 단시간내에 빠르게 필요한 API 를 호출할 수 있도록 해드리기 때문에

가능한 공식 라이브러리를 이용하실 것을 권고 드리고 있습니다! (Community 를 통해서 나름 지원도 잘되는 편입니다!)

 

다음 포스팅에서는 파라메터를 전달받아야 하는 다소 복잡(?)한 케이스에 대하여

PHP 코드를 이용한 API 호출 예제를 같이 만들어 보도록 하겠습니다.

 

감사합니다.

 

{OPEN} PHP 언어를 이용한 Open API 호출 가이드 #2

{OPEN} PHP 언어를 이용한 Open API 호출 가이드 #1

Outcomes