スキップしてメイン コンテンツに移動

goa -Golang Web Application Framework-

 Webアプリケーションフレームワーク goa


goaとは、GolangでWebアプリケーションを構築していくフレームワークです。

今流行りのマイクロサービスやAPIサーバを早急に構築できます。(HTMLを返すWebサーバももちろん、実装可能です)

早急といった言葉を使ったのは、Webアプリケーションを構築する際の

  • ルーティング
  • リクエストパラメータの定義
  • レスポンスパラメータの定義
  • パラメータのバリデーション
  • コントローラの定義

といった、ビジネスロジック以外の土台部分を自動で生成してくれて、
ビジネスロジックの実装に専念できるからです。

自動生成といっても、思い描いたものが勝手にできる訳ではなく、
goa独自のDSLを記述してアプリケーションの仕様を定義する(デザインする)必要があります。

goaではアプリケーションの枠組みを、design.go(デザインファイル)というAPIの定義書を作って生成していきます。

DSLを覚える学習コストはありますが、それに見合った以上の働きをしてくれます。

Webアプリケーションのフレームワークとして有名なRuby on Railsも、
お作法を知らないと、レールから外れた実装をする事になり複雑な実装になってしまいます。

が、Railsは世界中で使われてる有名なフレームワークとなっています。
その学習コスト以上に見合った以上の働きがあるからでしょう。

goaは、ビジネスロジックに没頭できる点において、Railsに匹敵できるほどポテンシャルを持っていると思います。
もちろん、RubyではなくGo言語なので、言語仕様上の違いがあり単純に比較はできません。

このブログでは、自分の学習結果のアウトプットとして、goaについての紹介を連載していきたいと思います。

コメント

このブログの人気の投稿

Goa Hello World この章では、goaを使って Hello World! と表示させるAPIのサンプルを作ってみます。 何となくgoaとはどういうものか、感覚が掴めると思います。 セットアップ サンプルを作る土台作りをしましょう。 gvm golang 1.7.5 goa の3つをインストールします。 ※既にインストールしている場合は読み飛ばしてください gvmをインストール サンプルはGoのバージョン 1.7.5 を使って作っていきます。  それではまず、Goのバージョン管理ツールである gvm をインストールしましょう。 $ bash < <(curl -s -S -L https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer) $ source ~/.gvm/scripts/gvm $ gvm version これで、gvmのバージョンが表示されたら成功です。 Goをインストール gvmを使ってGoをインストールします。 通常、gvmを使ってGoをインストールする場合は $ gvm install go1.7.5 で良いのですが、Mac OSが Sierra以上 だと、コンパイルが失敗します。 ※ このブログを執筆している時点での話なので、そのうち解消しているかも知れません なので -B オプションを付けて、バイナリのみをインストールします。 $ gvm install go1.7.5 -B $ gvm use go1.7.5 $ go vesion Goのバージョンが表示されたら成功 です。 goaのインストール $ go get -u github.com/goadesign/goa/... $ goagen version goagenのバージョンが表示されたら成功 です。 実装 セットアップが完了したところで、goaを使ってアプリケーションのデザインをしていきます。  作業ディレクトリは goasample としましょう。 $ cd $GOPATH/src $ mkdir goasample $ c...

goa request parameters

Request この章では、APIリクエストのデザインについて説明していきます。 リクエストには、主に 3種類 、データの渡し方があります。 URLのPathに含まれる、リソースを識別するものとしてのパラメータ Queryパラメータ(GETで良く使われる、?に続く文字列ですね) リクエストボディ 他にも HTTPリクエスト という点では、HTTPヘッダも存在しますが、 HTTPヘッダはリクエストパラメータというより、 リクエストの形式や認証などに使われる、メタデータ的な意味合いがあるため この章では扱いません。 それでは、それぞれの詳細を見ていきましょう。 Pathパラメータ RESTFulなAPIを扱うとき、良く出てくる /user/ :id -> /user/ 100 /product/ :category/ :product_id -> /product/book /300 のような、URLに含まれるパラメータですね。 正式名称は何というのでしょうか。 このパラメータは、 Resource を識別するために使われます。 Queryパラメータで識別しても良いのですが、Queryパラメータはどちらかというと、 APIの振る舞い・挙動を変える意味合いがあります。 この辺の考えは、RESTfulというアーキテクチャの話になってくるため、ここでは割愛します。 それでは実装してみましょう。 先ほどまでのソースコードを一旦、コミットします。 $ git add . $ git commit -m "first commit" そして、デザインファイルにResourceを追加します。 var _ = Resource( "products" , func() { Action( "show" , func() { Routing(GET( "products/:category_id/:product_id" )) Params (func() { Param( "category_id" , Integer , "カテゴリID...