ゴーファーライト
皆さん、まず私たちのプロジェクトを利用することを選んでいただきありがとうございます。小さい体ですが、とても熱心にやっていただきました!使用を開始するには、まず go をインストールする必要があります。すでにインストールされているものとします。次に、フレームワークのメインモジュールである req と router
をインストールします。
go get github.com/BrunoCiccarino/GopherLight/router go get github.com/BrunoCiccarino/GopherLight/req
もうダウンロードしましたか?ふう!これで、最初の Hello World を作成できます。
package main import ( "fmt" "github.com/BrunoCiccarino/GopherLight/router" "github.com/BrunoCiccarino/GopherLight/req" ) func main() { app := router.NewApp() // Define a route that responds to a GET request at "/hello". app.Get("/hello", func(r *req.Request, w *req.Response) { w.Send("Hello, World!") }) fmt.Println("Server listening on port 3333") app.Listen(":3333") }
とてもシンプルですね? GopherLight でできることはさらにたくさんあります。 HTTP メソッドとリクエストおよびレスポンス ツールの詳細については、引き続き読み続けてください。
サポートされている HTTP メソッド
router.App で使用できる HTTP メソッドのリストは次のとおりです。これらのそれぞれを使用して、さまざまな種類のリクエストを処理するルートを設定できます。さあ、飛び込みましょう!
何も変更せずにデータを取得します。
例: アイテムのリストの取得またはユーザーの詳細の読み取り。
データを送信して新しいリソースを作成します。
例: フォームの送信またはリストへの新しい項目の追加。
使用法: app.Put(パス、ハンドラー)
リソースを更新または置換します。これは「上書き」アクションです。
例: 完全なユーザー プロファイルを更新します。
使用法: app.Delete(パス、ハンドラー)
リソースを削除します。
例: ユーザーの削除または投稿の削除。
使用法: app.Patch(パス、ハンドラー)
リソースをすべて置き換えずに部分的に更新します。
例: ユーザー プロファイルの電子メールのみを更新します。
使用法: app.Options(パス、ハンドラー)
主に CORS プリフライト リクエストに対して、URL に対して許可された HTTP メソッドを返します。
使用法: app.Head(パス、ハンドラー)
GET と似ていますが、応答本文はありません。リソースが存在するかどうかを確認するために使用します。
使用法: app.Connect(パス、ハンドラー)、app.Trace(パス、ハンドラー)
高度な方法: CONNECT はトンネル (SSL 用) を設定し、TRACE はデバッグ用であり、リクエストをエコーバックします。
ルートを確認したところで、受信したリクエストを処理し、応答を送信するための頼りになるヘルパーである、Request オブジェクトと Response オブジェクトについて説明します。
各リクエスト ハンドラーは、受信リクエストに関する情報がロードされた Request オブジェクトを取得します。これでできることは次のとおりです:
app.Get("/greet", func(r *req.Request, w *req.Response) { name := r.QueryParam("name") if name == "" { name = "stranger" } w.Send("Hello, " name "!") })
Response オブジェクトは、クライアントに応答を送り返すのに役立ちます。できることは次のとおりです:
app.Get("/user", func(r *req.Request, w *req.Response) { user := map[string]string{"name": "Gopher", "language": "Go"} w.JSON(user) })
Go Web アプリに本格的な機能を追加できるように、一連のミドルウェアを用意しました。これらのミドルウェアはそれぞれ、セキュリティ、ロギング、タイムアウトなど、独自の魔法をもたらします。一つずつ分解してみましょう。 ?
当社の AuthMiddleware は、JSON Web Token (JWT) を使用してルートを保護するのに役立ちます。柔軟性が高く、秘密鍵、エラー処理、トークン抽出方法をカスタマイズできます。
設定
まず、JWTConfig:
import ( "github.com/BrunoCiccarino/GopherLight/middleware" ) config := middleware.JWTConfig{ SecretKey: []byte("your_secret_key"), } app.Use(middleware.NewAuthMiddleware(config))
クロスオリジンリクエストを許可する必要がありますか?問題ない! CORSMiddleware は、クロスオリジン リソース共有 (CORS) 設定を構成して、他のドメインから API にアクセスできるようにします。
設定オプション
corsOptions := middleware.CORSOptions{ AllowOrigin: "*", AllowMethods: []string{"GET", "POST"}, } app.Use(middleware.CORSMiddleware(corsOptions))
当社の CSRFミドルウェアは、各リクエストとともに送信されるCSRFトークンを検証することにより、クロスサイト リクエスト フォージェリを防ぎます。 GenerateCSRFToken() を使用して安全なトークンを作成し、それを独自の isValidToken 関数で検証します。
app.Use(middleware.CSRFMiddleware(func(token string) bool { return token == "your_valid_token" }))
次のようにトークンを生成することを忘れないでください:
csrfToken := middleware.GenerateCSRFToken()
サーバーで何が起こっているかを追跡したいですか? LoggingMiddleware は、メソッド、パス、所要時間を含む各リクエストをログに記録します。これは、アプリのパフォーマンスや異常なアクティビティに関する情報を入手するのに最適な方法です。
app.Use(middleware.LoggingMiddleware)
各リクエストは次のように記録されます:
TimeoutMiddleware を使用してリクエスト処理に時間制限を設定することで、無限の待機を回避します。このミドルウェアは、時間内に完了しない場合はリクエストをキャンセルし、504 ゲートウェイ タイムアウト ステータスをクライアントに送信します。
import ( "time" "github.com/BrunoCiccarino/GopherLight/middleware" ) timeout := 2 * time.Second app.Use(middleware.TimeoutMiddleware(timeout))
プラグイン インターフェイスは非常にシンプルですが、非常に強力です。登録する方法は 1 つだけです。これにより、アプリのルーティング システムに接続して、新しい API エンドポイント、Webhook、その他想像できるあらゆるものなど、必要なルートを追加できます。
登録方法
これがプラグイン インターフェースのすばらしい部分です:
type Plugin interface { Register(route func(method, path string, handler func(req *req.Request, res *req.Response))) }
Register メソッドは、次のように指定することでプラグインに新しいルートを定義できるルート関数を受け入れます:
ユーザーに挨拶するために /hello-plugin に単純なエンドポイントを追加するプラグインを作成するとします。プラグインは次のようになります:
package main import ( "github.com/BrunoCiccarino/GopherLight/plugins" "github.com/BrunoCiccarino/GopherLight/req" ) type HelloPlugin struct{} // Register adds a new route for the HelloPlugin. func (p *HelloPlugin) Register(route func(method, path string, handler func(req *req.Request, res *req.Response))) { route("GET", "/hello-plugin", func(req *req.Request, res *req.Response) { res.Send("Hello from the HelloPlugin!") }) }
プラグインをロードするには、インスタンスを作成し、メイン アプリのセットアップで Register を呼び出すだけです:
package main import ( "github.com/BrunoCiccarino/GopherLight/router" ) func main() { app := router.NewApp() helloPlugin := &HelloPlugin{} helloPlugin.Register(app.Route) app.Listen(":3333") }
各プラグインは、必要なだけルートを追加できます。 Register 関数で Route を複数回呼び出すだけで、追加のエンドポイントを定義できます。さまざまな HTTP メソッド、パス、ハンドラーを使用して、プラグインの機能を自由に形作ります。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3