レンダリング
Ginは、JSON、XML、YAML、ProtoBuf、HTMLなど、複数のフォーマットでのレスポンスレンダリングをサポートしています。すべてのレンダリングメソッドは同じパターンに従います:*gin.ContextのメソッドにHTTPステータスコードとシリアライズするデータを渡して呼び出します。Ginはコンテンツタイプヘッダー、シリアライズ、レスポンスの書き込みを自動的に処理します。
// すべてのレンダリングメソッドはこのパターンに従います:c.JSON(http.StatusOK, data) // application/jsonc.XML(http.StatusOK, data) // application/xmlc.YAML(http.StatusOK, data) // application/x-yamlc.TOML(http.StatusOK, data) // application/tomlc.ProtoBuf(http.StatusOK, data) // application/x-protobufAcceptヘッダーやクエリパラメータを使用して、単一のハンドラから同じデータを複数のフォーマットで提供できます:
package main
import ( "net/http"
"github.com/gin-gonic/gin")
func main() { router := gin.Default()
router.GET("/user", func(c *gin.Context) { user := gin.H{"name": "Lena", "role": "admin"}
switch c.Query("format") { case "xml": c.XML(http.StatusOK, user) case "yaml": c.YAML(http.StatusOK, user) default: c.JSON(http.StatusOK, user) } })
router.Run(":8080")}このセクションの内容
- XML/JSON/YAML/ProtoBufレンダリング — 自動コンテンツタイプ処理で複数のフォーマットでレスポンスをレンダリング
- SecureJSON — レガシーブラウザでのJSONハイジャック攻撃を防止
- JSONP — CORSなしでレガシークライアントからのクロスドメインリクエストをサポート
- AsciiJSON — 安全な転送のために非ASCII文字をエスケープ
- PureJSON — HTML文字をエスケープせずにJSONをレンダリング
- 静的ファイルの配信 — 静的アセットのディレクトリを配信
- ファイルからのデータ配信 — 個別のファイル、添付ファイル、ダウンロードを配信
- リーダーからのデータ配信 — 任意の
io.Readerからレスポンスにデータをストリーミング - HTMLレンダリング — 動的データでHTMLテンプレートをレンダリング
- マルチテンプレート — 単一のアプリケーションで複数のテンプレートセットを使用
- テンプレートを単一バイナリにバインド — テンプレートをコンパイル済みバイナリに埋め込む