サンプルコード

サンプルコード

このサンプルは認証・リクエストの署名で示した署名(Signature)の生成方法とAPIの呼出方法を紹介するためのものです。以下二つの処理を実行します。

サンプルプログラムでは、bash・OpenSSL、その他UNIX commandを使用しています。

サンプルコード(p2pub.sh)

#!/bin/bash

HOSTNAME="p2pub.api.iij.jp"
APIVERSION="20151130"

apicall() {
    local METHOD=$1
    local URI=$2
    local PARAM=$3
    local STRING_TO_SIGN
    local CONTENT_TYPE
    local OUTPUT=/tmp/_gio.$$
    local HTTP_STATUS

    if [ "${METHOD}" != "GET" ]; then
        CONTENT_TYPE="application/json"
    else
        CONTENT_TYPE=""
    fi

    STRING_TO_SIGN="${METHOD}\n"
    STRING_TO_SIGN="${STRING_TO_SIGN}\n${CONTENT_TYPE}"
    STRING_TO_SIGN="${STRING_TO_SIGN}\nx-iijapi-expire:${IIJAPI_EXPIRE}"
    STRING_TO_SIGN="${STRING_TO_SIGN}\nx-iijapi-signaturemethod:HmacSHA256"
    STRING_TO_SIGN="${STRING_TO_SIGN}\nx-iijapi-signatureversion:2"
    STRING_TO_SIGN="${STRING_TO_SIGN}\n`echo -n ${URI} | sed -e 's/\?.*//'`"
    SIGNATURE=`echo -en ${STRING_TO_SIGN} | openssl dgst -sha256 -binary -hmac "$IIJAPI_SECRET_KEY" | base64`

    if [ "${METHOD}" = "GET" ]; then
        HTTP_STATUS=`curl -s -o ${OUTPUT} -w '%{http_code}' \
           -H "x-iijapi-Expire:$IIJAPI_EXPIRE" \
           -H "x-iijapi-SignatureMethod:HmacSHA256" \
           -H "x-iijapi-SignatureVersion:2" \
           -H "Authorization:IIJAPI $IIJAPI_ACCESS_KEY:$SIGNATURE" \
           https://${HOSTNAME}${URI}`
    else
        HTTP_STATUS=`curl -s -o ${OUTPUT} -w '%{http_code}' \
           -H "Content-Type: $CONTENT_TYPE" \
           -H "x-iijapi-Expire:$IIJAPI_EXPIRE" \
           -H "x-iijapi-SignatureMethod:HmacSHA256" \
           -H "x-iijapi-SignatureVersion:2" \
           -H "Authorization:IIJAPI $IIJAPI_ACCESS_KEY:$SIGNATURE" \
           -X ${METHOD} \
           -d "${PARAM}" \
           https://${HOSTNAME}${URI}`
    fi

    echo HTTP_STATUS: $HTTP_STATUS
    cat ${OUTPUT} | python -mjson.tool && rm ${OUTPUT}

    return 0
}

apicall "GET" "/r/${APIVERSION}/gises/${SERVICECODE}.json"
apicall "PUT" "/r/${APIVERSION}/${SERVICECODE}/virtual-servers/${VM_SERVICECODE}/label.json" "{ \"Name\" : \"SAMPLE\" }"

exit 0

実行例

AccessKeyなどは環境変数で与えます。

※このスクリプトはあくまでサンプルです。環境変数、ShellのhistoryからAccessKey, SecretKeyが漏洩しないように十分に注意して下さい。

$ export IIJAPI_ACCESS_KEY='アクセスキー'
$ export IIJAPI_SECRET_KEY='シークレットキー'
$ export IIJAPI_EXPIRE=`date -u -d '1 hours' +'%Y-%m-%dT%H:%M:%SZ'`
$ export SERVICECODE="gisで始まるサービスコード"
$ export VM_SERVICECODE="ivmで始まるサービスコード"
$ ./p2pub.sh