BackEnd

GoのWeb Application Framework

投稿日:2018年10月15日 更新日:

はじめに

Go言語の連載4回目です。今回はGoのWeb Application Frameworkについて紹介します。

代表的なGoのWAF

皆さんはWAFがどのようなものかご存知だとは思いますが、改めて簡単に説明します。WAFは動的なウェブサイトなどの開発をサポートするアプリケーションフレームワークです。WAFが提供する代表的な機能としては、ORM、テンプレートエンジン、セッション管理などが挙げられます。本ブログでよく取り上げるRailsもWAFの一種です。

GoにおけるWAFは大きく2つに分けられます。1つは軽量なWAF、もう一つはフルスタックなWAFです。Goでは大きくて多機能なアプリケーションを作るのではなく、小さくてシンプルなアプリケーションを組み合わせて使うことが良いとされています。そのため、軽量なWAFが主流なようです。

軽量なWAF

代表的なWAFとして「Echo」と「Gin」を紹介します。

Echoは2015年に登場した新しいWAFです。RESTful APIをつくるのに向いているようです。Echoの設定に関してはこちらが参考になります。

GinはMartiniというGoの初期からあるWAFを参考に、より高速に動作するように実装されたWAFです。Martiniと比べて40倍ほど高速なようです。

フルスタックなWAF

代表的なWAFとして「Beego」と「Revel」を紹介します。

Beegoは主に中華圏で人気のあるWAFです。専用のCLIツールがある、LiveReloadされる等の特徴があります。くわしくはこちらをご覧ください。

RevelはRailsやPlay Frameworkから影響を受けたWAFです。他の言語でMVCフレームワークを使用した経験があるかたには親しみやすい作りになっているようです。Revelの設定に関してはこちらが参考になります。

Ginを使ってみる

それでは、実際にGinを使ってみます。事前準備としてGinをインストールします。

クエリパラメータ+ポストパラメータ

クエリパラメータおよびポストパラメータへのアクセスは下記のように行います。

ポストパラメータは PostForm か DefaultPostForm で取得できます。同様に、クエリパラメータは Query か DefaultQuery で取得できます。

ファイルアップロード

ファイルのアップロードは下記のように行います。

アップロードしたファイルは SaveUploadedFile で保存することができます。

URLのグループ化

下記のようにURLをグループ化することができます。

上記の例では /v1/login と /v2/login のようにURLをグループ化することができます。

ログ出力

ログ出力は下記のように行います。

このようにすると、 os.Create で指定したファイル名でログが出力されます。

JSONのバインド

JSONのバインドは下記のように行います。

User string `json:"user" binding:"required"` のようにJSONのキーを指定します。binding:”required” を指定した場合、バリューが空の場合にエラーが返ります。

HTMLのレンダリング

HTMLのレンダリングは下記のように行います。

そして、templates/posts/index.tmpl と templates/users/index.tmpl を以下のように作成します。

{{.title}} の部分には main で渡している title の値が表示されます。

リダイレクト

リダイレクトは下記のように行います。

localhost:8080/test にアクセスすると http://www.google.com/ にリダレクトされます。

GinのMiddlewareの紹介

Ginにはミドルウェアを追加することで様々な機能を追加することができます。ここでは、Session、Secure、Zapを紹介します。

Session

Sessionはセッション管理のミドルウェアです。Cookie、Redisの他にMongoDBなどにも対応しています。Sessionを使ったサンプルコードは下記のとおりです。

localhost:8080/incr にアクセスすると、レスポンスのcountが1、2、3と増加していきます。

Secure

SecureはSSL通信のためのミドルウェアです。サンプルコードは下記のとおりです。

Zap

Zap高速で低アロケーションなロギングライブラリです。サンプルコードは下記のとおりです。

さいごに

GoのWeb Application Frameworkをいくつか紹介し、その中の一つであるGinの基本的な使い方とミドルウェアを紹介しました。今後はORMなどについて調べていこうと思います。

Go記事の連載などは、こちらをご覧ください。

おすすめ書籍

スターティングGo言語 Goプログラミング実践入門 標準ライブラリでゼロからWebアプリを作る impress top gearシリーズ みんなのGo言語[現場で使える実践テクニック] Go言語でつくるインタプリタ

blog-page_footer_336




blog-page_footer_336




-BackEnd
-,

執筆者:

免責事項

このブログは、記事上部に記載のある投稿日時点の一般的な情報を提供するものであり、投資等の勧誘・法的・税務上の助言を提供するものではありません。仮想通貨の投資・損益計算は複雑であり、個々の取引状況や法律の変更によって異なる可能性があります。ブログに記載された情報は参考程度のものであり、特定の状況に基づいた行動の決定には専門家の助言を求めることをお勧めします。当ブログの情報に基づいた行動に関連して生じた損失やリスクについて、筆者は責任を負いかねます。最新の法律や税務情報を確認し、必要に応じて専門家に相談することをお勧めします。


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


関連記事

Go言語

GoフレームワークGinでミドルウェアを使ってログインAPIを実装

1 はじめに2 ログインAPIの作成3 ログインのセッション管理4 ミドルウェア4.1 gin.Default()4.2 Logger4.3 Recovery4.4 sessions5 独自ミドルウェ ...

新時代のPythonプロジェクト・パッケージ管理ツール「Rye」使ってみた

1 はじめに2 Ryeとは?3 Ryeを使ってみる3.1 Ryeのセットアップ3.2 仮想環境に入る3.3 依存パッケージの追加4 VSCodeから使ってみる5 さいごに6 おすすめ書籍 はじめに P ...

Laravelの開発環境をdocker-composeで一から構築してみる

1 はじめに2 nginxでwebサーバを立てる2.1 default.conf作成2.2 index.html作成2.3 nginxコンテナ起動3 nginxでPHP-FPMを動作させる3.1 do ...

rails

Ruby2.4でCookieを手動で復号する際に発生したエラーの対処

1 はじめに1.1 前提条件2 発生したエラー2.1 実際のコード2.2 エラー詳細2.3 原因3 どう対処したか3.1 修正後のコード はじめに こんにちは、onoです。 現在開発中のアプリケーショ ...

crypto

公開鍵暗号の概要、用語と使用例

1 はじめに1.1 前提条件2 暗号化と復号2.1 暗号化とは2.2 復号とは3 暗号化方式3.1 共通鍵暗号3.2 公開鍵暗号4 署名と検証4.1 署名とは4.2 検証とは5 RSA暗号とは5.1 ...

フォロー

blog-page_side_responsive

2018年10月
 123456
78910111213
14151617181920
21222324252627
28293031  

アプリ情報

私たちは無料アプリもリリースしています、ぜひご覧ください。 下記のアイコンから無料でダウンロードできます。