SHOEISHA iD

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

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

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

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

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

  • X ポスト
  • このエントリーをはてなブックマークに追加

IBM Cloud Tools for Swiftの使い方

 「Project」画面には現在デプロイしているランタイムの概要が表示されます。

 プロジェクト名の下のURLは、現在デプロイされているURLが表示されます。クリックするとブラウザが起動して、そのURLの確認することができます。

 その下にはローカルに保存されているプロジェクトフォルダのパスが表示されます。これをクリックするとフォルダを開けます。

 その左下にはランタイムの状態が表示されています。現在正常にデプロイされているので緑色で「Running」と表示されています。

 その右のアイコン群でランタイムの操作ができます。

キャプチャの番号 名前 説明
View on Bluemix Bluemixのコンソール画面をブラウザで開く
Deploy ランタイムへソースをデプロイする
Stop ランタイムを停止する
Restart ランタイムを再起動する
Open URL ランタイムのURLを開く

Kituraの使い方

 プロジェクトが作成できたので、ここで簡単にKituraというフレームワークの使い方を見ていきたいと思います。

プロジェクトのディレクトリ構成

 プロジェクトが作成された直後は、以下のようなフォルダ構成になっています。

└── first-kitura-project
    ├── Kitura-Build
    ├── LICENSE.txt
    ├── Makefile
    ├── Package.swift
    ├── Procfile
    ├── README.md
    ├── Sources
    │   └── main.swift
    ├── docker-compose.yml
    ├── manifest.yml
    └── public
        └── index.html

ビルドをしてみる

 KituraプロジェクトはMakefileが整備されているので、コマンド一つでKituraサーバーをビルドすることができます。

 まず、Kituraサーバーがどういうものなのかを把握するために、ビルドしてみましょう。

 「first-kitura-project」直下に移動して、ビルドコマンドを実行します。

$ cd first-kitura-project
$ make run

 以下のようにコンソールにログがでてきたら成功です。

.
.
.
--- Invoking KituraSample executable
./.build/debug/Kitura-Starter-Bluemix
 INFO: Kitura_Starter_Bluemix main.swift line 60 - Server will be started on 'http://localhost:8090'. 
 VERBOSE: run() Kitura.swift line 44 - Staring Kitura framework... 
 VERBOSE: run() Kitura.swift line 46 - Starting an HTTP Server on port 8090... 
 INFO: listen(socket:port:) HTTPServer.swift line 132 - Listening on port 8090 

 これでサーバーが立ち上がった状態になりました。以下のURLにブラウザでアクセスしてみましょう。

 下記のようにKituraのページが表示されていれば成功です。

 Kitraでは、デフォルトでルートパスに、このページが表示されるようになっています。

 次に、以下のURLにアクセスしてみましょう。

 下記のような文字が表示されたかと思います。

Hello from Kitura-Starter-Bluemix!

 このURLはKituraのルーティングで表示している文字列になります。

main.swiftファイルをみてみる

 main.swiftがSwiftのメインファイルです。ビルド後、アプリは最初にこのファイルを実行します。

 ファイルを開いてみると、以下のようになっているかと思います。

import Foundation
import Kitura
import KituraSys
import KituraNet
import LoggerAPI
import HeliumLogger
import CloudFoundryEnv

// Disable all buffering of stdout
setbuf(stdout, nil)

// All web apps need a Router instance to define routes
let router = Router()

// Using the HeliumLogger implementation for Logger
Log.logger = HeliumLogger()

// Serve static content from "public"
router.all("/static", middleware: StaticFileServer())

// Basic GET request
router.get("/hello") { _, response, next in
  Log.debug("GET - /hello route handler...")
  response.headers["Content-Type"] = "text/plain; charset=utf-8"
  try response.status(.OK).send("Hello from Kitura-Starter-Bluemix!").end()
}

// Basic POST request
router.post("/hello") { request, response, next in
  Log.debug("POST - /hello route handler...")
  response.headers["Content-Type"] = "text/plain; charset=utf-8"
  if let name = try request.readString() {
    try response.status(.OK).send("Hello \(name), from Kitura-Starter-Bluemix!").end()
  } else {
    try response.status(.OK).send("Kitura-Starter-Bluemix received a POST request!").end()
  }
}

// Start Kitura-Starter-Bluemix server
do {
  let appEnv = try CloudFoundryEnv.getAppEnv()
  let port: Int = appEnv.port
  Log.info("Server will be started on '\(appEnv.url)'.")
  Kitura.addHTTPServer(onPort: port, with: router)
  Kitura.run()
} catch CloudFoundryEnvError.InvalidValue {
  Log.error("Oops... something went wrong. Server did not start!")
}

 Kituraは、Node.jsのExpressのようなルーティング指定でサーバーへのアクセスを制御するのが特徴です。

 まず、基本的なKituraの使い方を見てみたいと思います。Kituraの使い方を簡単に2点に絞って説明します。

  • ルーティング指定
  • Kituraサーバーの作成

ルーティング指定

 アプリケーション・エンドポイントと、それのリクエストがあった場合の処理を行うためにはRouterクラスのインスタンスを作成する必要があります。

let router = Router()

 Routerクラスには各HTTPメソッドに対応するメソッドが用意されています。代表的なメソッドを列挙してみます。

HTTPメソッド Routerインスタンスメソッド
GET get(_:handler:), get(_:middleware:)
POST post(_:handler:), post(_:middleware:)
PUT put(_:handler:), put(_:middleware:)
DELETE delete(_:handler:), delete(_:middleware:)

 例えば、get(_:handler:)メソッドなら、第1引数にエンドポイントのパス、第2引数にレスポンス処理をクロージャーで指定することができます。

router.get("/hello") { _, response, next in
  Log.debug("GET - /hello route handler...")
  response.headers["Content-Type"] = "text/plain; charset=utf-8"
  try response.status(.OK).send("Hello from Kitura-Starter-Bluemix!").end()
}

 上記はエンドポイント"/hello"にGETリクエストがあった場合の処理です。

 レスポンスの処理を抜き出してみます。

response.headers["Content-Type"] = "text/plain; charset=utf-8"
try response.status(.OK).send("Hello from Kitura-Starter-Bluemix!").end()

 レスポンスヘッダー「Content-Type」に「text/plain; charset=utf-8」をセットしています。RouterResponseクラスのインスタンスresponseのstatus(_:)メソッドを実行します。「.OK」はステータスコード200の意味です。さらにsend(_:)メソッドでクライアントに文字列を送信し、end(_:)メソッドでレスポンス処理を終了させています。

Kituraサーバーの作成

do {
  let appEnv = try CloudFoundryEnv.getAppEnv()
  let port: Int = appEnv.port
  Log.info("Server will be started on '\(appEnv.url)'.")
  Kitura.addHTTPServer(onPort: port, with: router)
  Kitura.run()
} catch CloudFoundryEnvError.InvalidValue {
  Log.error("Oops... something went wrong. Server did not start!")
}

 最後にこの部分でKituraサーバーを起動しています。

 CloudFoundryEnv.getAppEnv()でアプリの情報を取得し、ポート情報を取得します。デフォルトでは8090になります。

Kitura.addHTTPServer(onPort: port, with: router)
Kitura.run()

で、Kituraサーバーを起動させています。

KituraとObject Strageを使ってデータを保存する

 さてKituraの基本をご紹介したところで、いよいよKituraでWeb APIを作っていきたいと思います。今回はBluemixのObject Strageを使って、Kituraからデータを送り、ファイルに保存します。

 Object Strageはファイルデータを保存できるサービスです。そしてREST APIで認証やファイルの追加や書き換えができます。

今「旬」のテクノロジーや革新的なサービスを一挙紹介!

 オープンイノベーションを支える国内外の最新事例を始め、最先端の技術を活用しサービスを展開している企業やコミュニティの皆さまより、全32セッション(クラウド・ロボティックス・IoT・DevOps・ビックデーターなど)が予定されています。

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

次のページ
BluemixでObject Storageサービスを追加する

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

  • X ポスト
  • このエントリーをはてなブックマークに追加
IBM Bluemix User Group(BMXUG)リレー寄稿連載記事一覧

もっと読む

この記事の著者

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

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

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

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

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/9622 2016/09/07 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング