Perl

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

  • Perl 5.6 이상
  • SOAP::Lite
  • XML::Hash::LX

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

SoftLayer API 클라이언트 다운로드

API 호출 작성

API 클라이언트를 다운로드하고 설치했으면 먼저 스크립트에 SoftLayer::API::SOAP 모듈을 포함해야 합니다. 이 파일에 따라 SoftLayer의 클라이언트 오브젝트가 정의됩니다. 모듈을 포함하기 전에 모듈의 상위 디렉토리를 @INC 경로에 추가해야 할 수 있습니다. 다음 코드를 사용하여 상위 디렉토리를 추가합니다.

use lib '/path/to/SoftLayer/';
use SoftLayer::API::SOAP;

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

  • 호출하려는 서비스의 이름.
  • 사용하려는 특정 오브젝트의 선택적 id 번호. SoftLayer_Account 서비스를 사용하고 있거나 특정 서버, 지원 티켓, 송장 또는 그 외 오브젝트를 사용하지 않는 경우, undef 값을 전달합니다. 이 id가 API 호출에서 초기화 매개변수를 작성합니다.
  • API 사용자 이름.
  • API 키.
    아래의 코드 조각은 위에 나온 매개변수를 이용하여 API 호출을 작성하는 예제를 제공합니다.
use lib '/path/to/SoftLayer/';
use SoftLayer::API::SOAP;
use strict;
 
my $api_username = 'set me';
my $api_key = 'set me';
 
# Create a client to the SoftLayer_Account API service.
my $client = SoftLayer::API::SOAP->new('SoftLayer_Account', undef, $api_username, $api_key);
 
 
# Work directly with the SoftLayer_Hardware_Server record with the hardware id 
# 1234.
#my $server_id = 1234;
#my $client = SoftLayer::API::SOAP->new('SoftLayer_Hardware_Server', $server_id, $api_username, $api_key);

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

use lib '/path/to/SoftLayer/';
use SoftLayer::API::SOAP;
use strict;
 
my $api_username = 'set me';
my $api_key = 'set me';
my $domain_id = 1234;
 
my $client = SoftLayer::API::SOAP->new('SoftLayer_Dns_Domain', $domain_id, $api_username, $api_key);
 
# Create a new A record in a domain.
my $new_record = $client->createARecord('myhost', '127.0.0.1', 86400);
 
print 'New A record id: ' . $new_record->{id}; 
 
# Create a new domain record. 
#
# This requires an API client with an undef id, and use a hash with an array to model 
# our new domain.
$client = SoftLayer::API::SOAP->new('SoftLayer_Dns_Domain', undef, $api_username, $api_key);
 
my $domain = {
    'name' => 'example.org',
    'resourceRecords' => [
        {
            'host' => '@',
            'data' => '127.0.0.1',
            'type' => 'a',
        }
    ]
};
 
my $new_domain = $client->createObject($domain);
 
print 'New domain id: ' . $new_domain->{id};
If you wish, you can declare your client object and make an API call on a single line.  The following code outlines this scenario:
use lib '/path/to/SoftLayer/';
use SoftLayer::API::SOAP;
use strict;
 
my $api_username = 'set me';
my $api_key = 'set me';
 
my $account = SoftLayer::API::SOAP->new('SoftLayer_Account', undef, $api_username, $api_key)->getObject();

오브젝트 마스크 사용

중첩 해시 변수를 사용하여 API 호출에 대해 오브젝트 마스크를 작성합니다. 해시 키로 검색할 관계형 특성을 정의합니다. 하위 특성을 검색하는 경우 하위 특성에 대한 중첩 해시를 정의하고, 그 밖의 경우에는 빈 해시를 키 값으로 정의합니다. the setObjectMask() 메소드를 사용하여 오브젝트 마스크를 API 클라이언트에 바인딩합니다. 이 예제에서는 하드웨어의 운영 체제 레코드, 운영 체제 비밀번호, 네트워크 구성요소, 하드웨어가 있는 데이터 센터, 각 하드웨어의 프로세서 수와 함께 계정의 물리적 하드웨어 레코드를 검색합니다.

use lib '/path/to/SoftLayer/';
use SoftLayer::API::SOAP;
use strict;
 
my $api_username = 'set me';
my $api_key = 'set me';
 
my $client = SoftLayer::API::SOAP->new('SoftLayer_Account', undef, $api_username, $api_key);
 
# 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.
my $object_mask = {
    'hardware' => {
        'operatingSystem' => {
            'passwords' => {},
        },
        'networkComponents' => {},
        'datacenter' => {},
        'processorCount' => {},
    }
};
 
$client->setObjectMask($object_mask);
 
my $hardware = $client->getHardware();

결과 제한 사용

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

  • 호출에서 제한되는 결과의 수.
  • 결과 세트를 시작하는 선택적 오프셋.

아래 코드는 API 호출에 결과 제한을 사용하는 예제를 제공합니다.

use lib '/path/to/SoftLayer/';
use SoftLayer::API::SOAP;
use strict;
 
my $api_username = 'set me';
my $api_key = 'set me';
 
my $client = SoftLayer::API::SOAP->new('SoftLayer_Account', undef, $api_username, $api_key);
 
# Retrieve our first two open support tickets.
$client->setResultLimit(2);
 
$tickets = $client->getOpenTickets();

오류 처리

SoftLayer API 호출에서 SOAP 결함이 발생하면 클라이언트 오브젝트에서 faultfaultstring 특성이 입력됩니다. 효과적인 오류 처리를 위해 API 호출을 작성한 후 fault 특성을 확인하십시오. 호출에 오류가 있으면 faultstring 특성에 SoftLayer API에서 리턴한 오류가 포함되어 있습니다. 다음 스크립트에 이러한 오류의 예제가 나와 있습니다.

use lib '/path/to/SoftLayer/';
use SoftLayer::API::SOAP;
use strict;
 
my $api_username = 'set me';
my $api_key = 'an incorrect key';
 
$client = SoftLayer::API::SOAP->new('SoftLayer_Account', null, $api_username, $api_key);
 
# Exit the script with the message:
# "Unable to retrieve account information: Invalid API key"
my $account = $client->getObject();
 
if ($account->fault) {
    die 'Unable to retrieve account information: ' . $account->faultstring;
}

참조된 API 구성요소

서비스

데이터 유형

메소드