SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

IBM Bluemix User Group(BMXUG)リレー寄稿

IBM Cloud Tools for Swiftをつかって、KituraでWebAPIを作ろう

IBM Bluemix User Group(BMXUG)リレー寄稿 第1回

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・ビックデーターなど)が予定されています。

 インフラエンジニアも、開発エンジニアも、営業の方も、そうでない方も、クラウドを活用した、最新のサービスやテクノロジーに興味のある方ならどなたでも参加していただけます。イベント開催の二日間、今「旬」のテクノロジーやビジネスをお楽しみください。

次のページ
Object Strageデータを操作するメソッドを作成

この記事は参考になりましたか?

IBM Bluemix User Group(BMXUG)リレー寄稿連載記事一覧

もっと読む

この記事の著者

佐藤 剛士(Bluemix User Group)(サトウ タケシ)

「Personal Factory」という屋号でフリーランスとして働く。iOSのエンジニア。アプリ設計、UIデザイン、開発を通して、よりよいアプリの作成を目指す。2011年から2014年独立系のSIerにて保守運用業務。その後有限会社カイカイにてプロダクト企画、iOSアプリの開発、Web開発に携わる。渋谷で毎週iOSエンジニアのための朝活Swiftプログラミング勉強会を2015年から運営。技術ブログPersonal Factoryを運営。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/9622 2016/09/07 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー