PHP

SoftLayer는 수작업으로 진행되던 SOAP 또는 XML-RPC 호출에서 복잡한 단계를 제거한 PHP 기반 API 클라이언트를 제공합니다. PHP 기반 API 클라이언트를 사용하려면 다음과 같은 시스템 요구사항을 충족해야 합니다.

  • PHP 5.2.3 이상
  • 다음 PHP 확장 중 하나:

SoftLayer GitHub 프로파일에 있는 프로젝트 페이지에서 SoftLayer PHP API 클라이언트를 다운로드합니다. 다운로드되었으면 PHP 프로젝트의 로컬 디렉토리에 또는 PHP 설치의 include_path에 PHP API 클라이언트의 압축을 풉니다.
SoftLayer API PHP 클라이언트 다운로드

SOAP 호출 작성

API 클라이언트를 다운로드하고 설치했으면 먼저 스크립트에 SoapClient.class.php 파일을 포함해야 합니다. 이 파일에 따라 SoftLayer의 클라이언트 오브젝트가 정의됩니다.

require_once('/path/to/SoftLayer/SoapClient.class.php');

그런 다음, 사용할 SoftLayer API 서비스의 클라이언트 오브젝트를 작성합니다. SoftLayer_SoapClient::getClient() 가 이 작업을 자동으로 처리하는데, 이때 네 개의 매개변수가 사용됩니다.

  • 호출하려는 서비스의 이름.
  • 사용하려는 특정 오브젝트의 선택적 id 번호. SoftLayer_Account 서비스를 사용하고 있거나 특정 서버, 지원 티켓, 송장 또는 그 외 오브젝트를 사용하지 않는 경우, null 값을 전달합니다. 이 id가 API 호출에서 초기화 매개변수를 작성합니다.
  • API 사용자 이름.
  • API 키.

아래의 코드 조각은 위에 나온 매개변수를 이용하여 SOAP 호출을 작성하는 예제를 제공합니다.

require_once('/path/to/SoftLayer/SoapClient.class.php');
 
$apiUsername = 'set me';
$apiKey = 'set me';
 
/**
 * Create a client to the SoftLayer_Account API service.
 */
$client = SoftLayer_SoapClient::getClient('SoftLayer_Account', null, $apiUsername, $apiKey);
 
/**
 * Work directly with the SoftLayer_Hardware_Server record with the hardware id 
 * 1234.
 */
$serverId = 1234;
$client = SoftLayer_SoapClient::getClient('SoftLayer_Hardware_Server', $serverId, $apiUsername, $apiKey);

API 클라이언트 오브젝트가 준비되었으면, 사용자 클라이언트 오브젝트의 로컬에 있는 것처럼 SoftLayer API 메소드를 호출합니다. API 호출 결과를 변수에 지정하면 호출 결과가 확인됩니다. 복합 유형 오브젝트는 PHP stdClass 오브젝트로 리턴됩니다. 또한, 복합 유형 매개변수를 API 호출에 전달해야 하는 경우 stdClass 오브젝트를 사용합니다. 예:

require_once('/path/to/SoftLayer/SoapClient.class.php');
 
$apiUsername = 'set me';
$apiKey = 'set me';
$domainId = 1234;
 
$client = SoftLayer_SoapClient::getClient('SoftLayer_Dns_Domain', $domainId, $apiUsername, $apiKey);
 
/**
 * Create a new A record in a domain.
 */
$newRecord = $client->createARecord('myhost', '127.0.0.1', 86400);
 
echo 'New A record id: ' . $newRecord->id;
 
/**
 * Create a new domain record. 
 * 
 * This requires an API client with a null id, and use a stdClass object to model 
 *our new domain.
 */
$client = SoftLayer_SoapClient::getClient('SoftLayer_Dns_Domain', null, $apiUsername, $apiKey);
 
$domain = new stdClass();
$domain->name = 'example.org';
$domain->resourceRecords = array();
$domain->resourceRecords[0] = new stdClass();
$domain->resourceRecords[0]->host = '@';
$domain->resourceRecords[0]->data = '127.0.0.1';
$domain->resourceRecords[0]->type = 'a';
 
$newDomain = $client->createObject($domain);
 
echo 'New domain id: ' . $newDomain->id;

XML-RPC 사용

SoftLayer API PHP 클라이언트는 SOAP 및 XML-RPC 프로토콜을 지원하며, 서로 바꿔서 사용 가능합니다. SOAP가 아닌 XML-RPC를 사용하려면 두 가지를 변경해야 합니다.

  • SoapClient.class.php 대신 XmlrpcClient.class.php를 포함합니다.
  • SoftLayer_SoapClient::getClient() 대신 SoftLayer_XmlrpcClient::getClient()를 사용하여 API 클라이언트를 작성합니다.
    예:
require_once('/path/to/SoftLayer/XmlrpcClient.class.php');
 
$apiUsername = 'set me';
$apiKey = 'set me';
 
$client = SoftLayer_XmlrpcClient::getClient('SoftLayer_Account' null, $apiUsername, $apiKey);

오브젝트 마스크 사용

먼저 새로운 SoftLayer_ObjectMask 오브젝트를 선언하여 API 호출에서 오브젝트 마스크를 작성합니다. 새로운 마스크 오브젝트에서 로컬 특성으로 검색할 관계형 특성을 정의합니다. 마지막으로, setObjectMask() 메소드를 사용하여 API 클라이언트에 이 항목을 바인드합니다. 이 예제에서는 다음 정보를 검색합니다.

  • 계정의 물리적 하드웨어
  • 하드웨어의 운영 체제 레코드
  • 운영 체제 비밀번호
  • 네트워크 구성요소
  • 하드웨어가 있는 데이터 센터
  • 각 하드웨어에 장착된 프로세서의 수
require_once('/path/to/SoftLayer/SoapClient.class.php');
 
$apiUsername = 'set me';
$apiKey = 'set me';
 
$client = SoftLayer_SoapClient::getClient('SoftLayer_Account', null, $apiUsername, $apiKey);
 
/**
 * Retrieve items related to hardware.
 *
 * Operating system, operating system passwords, all network components, the
 * datacenter the server is located in, and the number of processors in each 
 * server.
 */
$objectMask = new SoftLayer_ObjectMask();
$objectMask->hardware->operatingSystem->passwords;
$objectMask->hardware->networkComponents;
$objectMask->hardware->datacenter;
$objectMask->hardware->processorCount;
$client->setObjectMask($objectMask);
 
$hardware = $client->getHardware();

결과 제한 사용

데이터, 특히 대형 그룹에서 정보 조각을 가져오는 쿼리를 호출할 때 결과 제한을 사용하면 리턴 대기 시간이 대폭 줄어듭니다.
클라이언트 오브젝트의 setResultLimit() 메소드를 사용하여 API 호출에서 결과의 수를 제한합니다. 이 메소드에는 두 개의 매개변수가 사용됩니다.

  • 호출에서 제한되는 결과의 수.
  • 결과 세트를 시작하는 선택적 오프셋.
    아래 예제에서는 필수 정보를 통합하여 결과 제한을 설정합니다.
require_once('/path/to/SoftLayer/SoapClient.class.php');
 
$apiUsername = 'set me';
$apiKey = 'set me';
 
$client = SoftLayer_SoapClient::getClient('SoftLayer_Account', null, $apiUsername, $apiKey);
 
/**
 * Retrieve our first two open support tickets.
 */
$client->setResultLimit(2);
 
$tickets = $client->getOpenTickets();

오류 처리

PHP 클라이언트에서는 SoftLayer API 호출 오류가 예외로 발생합니다. 올바른 처리를 위해 SoftLayer API에 대한 호출을 try/catch 블록 안에 배치합니다. SoftLayer API에서 리턴된 오류를 액세스하려면 PHP 예외 클래스의 getMessage() 메소드를 사용합니다. 다음 스크립트에 이러한 오류의 예제가 나와 있습니다.

require_once('/path/to/SoftLayer/SoapClient.class.php');
 
$apiUsername = 'set me!';
$apiKey = 'an incorrect API key';
 
$client = new SoftLayer_SoapClient('SoftLayer_Account', null, $apiUsername, $apiKey);
 
/**
 * Exit the script with the message:
 * "Unable to retrieve account information: Invalid API key"
 */
try {
    $account = $client->getObject();
} catch (Exception $e) {
    die('Unable to retrieve account information: ' . $e->getMessage());
}

참조된 API 구성요소

서비스

데이터 유형

메소드