curlで実行
では、URLを組み立てられたらcurlで実行してみましょう。「X-Auth-Token」ヘッダーに先ほど取得した認証トークンを設定します。HTTPメソッドはPUTを指定します。
curl -i \ -H "X-Auth-Token: <AUTHENTICATION_TOKEN>" \ -d 'sample text' \ https://dal.objectstorage.open.softlayer.com/v1/AUTH_<project ID>/container1/sample.json -X PUT ; echo
成功すれば以下のようなレスポンスが返ってきます
HTTP/1.1 201 Created Last-Modified: Fri, 05 Aug 2016 07:46:03 GMT Content-Length: 0 Etag: 70ee1738b6b21e2c8a43f3a5ab0eee71 Content-Type: text/html; charset=UTF-8 X-Trans-Id: tx8ed2e9dd4ab04647a666f-0057a4443a Date: Fri, 05 Aug 2016 07:46:02 GMT
オブジェクトの情報を取得してみましょう。先ほどのcurlコマンドを今度はGETリクエストで実行します。
curl -i \ -H "X-Auth-Token: <AUTHENTICATION_TOKEN>" \ -d 'sample text' \ https://dal.objectstorage.open.softlayer.com/v1/AUTH_<project ID>/container1/sample.json ; echo
成功すれば以下のようなレスポンスが返ってきます。
HTTP/1.1 200 OK Content-Length: 11 Accept-Ranges: bytes Last-Modified: Fri, 05 Aug 2016 07:49:33 GMT Etag: 70ee1738b6b21e2c8a43f3a5ab0eee71 X-Timestamp: 1470383372.29479 Content-Type: application/x-www-form-urlencoded X-Trans-Id: tx4d67fada9cff4322813b2-0057a44560 Date: Fri, 05 Aug 2016 07:50:56 GMT sample text
「sample text」という文字が取得できました。
念のためコンソールも見てみましょう。Object Strageの管理ページにアクセスします。「container1」コンテナに「sample.json」ファイルが追加されているかと思います。ダウンロードして内容が「sample text」になっているかを確認してみましょう。
このように、REST APIを使ってObject Strageに接続して、ファイルを作成することができます。次はこれをKituraでやってみたいと思います。
Object Storageトークンを取得するメソッドを作る
Kituraに戻ってSourcesフォルダ内にObjectStrage.swiftというファイルを作成しましょう。
$ touch PATH/TO/PROJECT/first-kitura-project/Sources/ObjectStrage.swift
必要なモジュールをインポートします。
import Foundation import Kitura import KituraSys import KituraNet import SwiftyJSON
ObjectStrageというクラスを定義します。認証情報を定数として定義していきます。
curlで操作したときと同じようにObject Strageのコンソールの「サービス資格情報」から取得したuserId,password,projectIdの値をそれぞれ、定数に指定します。
また、トークン情報を保持するプロパティ、xAuthTokenを変数として定義します。
class ObjectStrage {
//credentials
let authUrl = "identity.open.softlayer.com"
let userId = "<credentials_userId>"
let password = "<credentials_password>"
let projectId = "<credentials_projectId>"
let publicAccessPoint = "dal.objectstorage.open.softlayer.com"
let containerName = "container1"
let fileName = "sample.json"
//token
var xAuthToken: String = ""
}
トークンを取得するメソッドgetToken()を定義します。
//get token
func getToken(){
//create requestOption
var requestOptions: [ClientRequest.Options] = []
requestOptions.append(.schema("https://"))
requestOptions.append(.hostname(self.authUrl))
requestOptions.append(.path("/v3/auth/tokens"))
requestOptions.append(.method("POST"))
var headers = [String:String]()
headers["Accept"] = "application/json"
headers["Content-Type"] = "application/json"
requestOptions.append(.headers(headers))
let body = "{\"auth\":{\"identity\":{\"methods\":[\"password\"],\"password\":{\"user\":{\"id\":\"\(self.userId)\",\"password\":\"\(self.password)\"}}},\"scope\":{\"project\":{\"id\":\"\(self.projectId)\"}}}}"
let requestForToken = HTTP.request(requestOptions) { [weak self] response in
let tokenString = response?.headers["X-Subject-Token"]
if let token = tokenString {
//トークンの設定
self?.xAuthToken = token[0]
} else {
print("no header")
}
}
requestForToken.end(body)
}
Kituraで外部APIを実行する場合、Kitura-netモジュールのHTTPクラスで行います。HTTPリクエストのパラメーターはClientRequest.Optionsクラスで指定を行います。
//create requestOption
var requestOptions: [ClientRequest.Options] = []
requestOptions.append(.schema("https://"))
requestOptions.append(.hostname(self.authUrl))
requestOptions.append(.path("/v3/auth/tokens"))
requestOptions.append(.method("POST"))
var headers = [String:String]()
headers["Accept"] = "application/json"
headers["Content-Type"] = "application/json"
requestOptions.append(.headers(headers))
先ほどcurlで送った認証jsonデータをbody定数として定義します。
let body = "{\"auth\":{\"identity\":{\"methods\":[\"password\"],\"password\":{\"user\":{\"id\":\"\(self.userId)\",\"password\":\"\(self.password)\"}}},\"scope\":{\"project\":{\"id\":\"\(self.projectId)\"}}}}"
HTTPリクエストはHTTP.request(_:callback:)メソッドで作成ができます。レスポンスの処理をcallbackのクロージャーで操作することができます。
今回は返ってきたレスポンスのヘッダー「"X-Subject-Token"」の値をxAuthTokenプロパティに格納しています。
let requestForToken = HTTP.request(requestOptions) { [weak self] response in
let tokenString = response?.headers["X-Subject-Token"]
if let token = tokenString {
//トークンの設定
self?.xAuthToken = token[0]
} else {
print("no header")
}
}
HTTPリクエストの実行はendメソッドで行います。ここで初めて、HTTPリクエストが実行されます。
requestForToken.end(body)
今「旬」のテクノロジーや革新的なサービスを一挙紹介!
オープンイノベーションを支える国内外の最新事例を始め、最先端の技術を活用しサービスを展開している企業やコミュニティの皆さまより、全32セッション(クラウド・ロボティックス・IoT・DevOps・ビックデーターなど)が予定されています。
インフラエンジニアも、開発エンジニアも、営業の方も、そうでない方も、クラウドを活用した、最新のサービスやテクノロジーに興味のある方ならどなたでも参加していただけます。イベント開催の二日間、今「旬」のテクノロジーやビジネスをお楽しみください。
