ホームページ  >  記事  >  バックエンド開発  >  GopherLight を使用して Go でプロのように API を作成する方法

GopherLight を使用して Go でプロのように API を作成する方法

Linda Hamilton
Linda Hamiltonオリジナル
2024-10-30 16:56:03973ブラウズ

How to Write APIs Like a Pro in Go with GopherLight

ドキュメント

ゴーファーライト

皆さん、まず私たちのプロジェクトを利用することを選んでいただきありがとうございます。小さい体ですが、とても熱心にやっていただきました!使用を開始するには、まず 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.Get(パス, ハンドラー)

何も変更せずにデータを取得します。
例: アイテムのリストの取得またはユーザーの詳細の読み取り。

役職

  • 使用法: app.Post(パス、ハンドラー)

データを送信して新しいリソースを作成します。
例: フォームの送信またはリストへの新しい項目の追加。

置く

使用法: app.Put(パス、ハンドラー)

リソースを更新または置換します。これは「上書き」アクションです。
例: 完全なユーザー プロファイルを更新します。

消去

使用法: app.Delete(パス、ハンドラー)

リソースを削除します。
例: ユーザーの削除または投稿の削除

パッチ

使用法: app.Patch(パス、ハンドラー)

リソースをすべて置き換えずに部分的に更新します。
例: ユーザー プロファイルの電子メールのみを更新します。

オプション

使用法: app.Options(パス、ハンドラー)

主に CORS プリフライト リクエストに対して、URL に対して許可された HTTP メソッドを返します。

使用法: app.Head(パス、ハンドラー)

GET と似ていますが、応答本文はありません。リソースが存在するかどうかを確認するために使用します。

接続して追跡

使用法: app.Connect(パス、ハンドラー)、app.Trace(パス、ハンドラー)

高度な方法: CONNECT はトンネル (SSL 用) を設定し、TRACE はデバッグ用であり、リクエストをエコーバックします。

req.Request と req.Response の操作

ルートを確認したところで、受信したリクエストを処理し、レスポンスを送信するための頼りになるヘルパーである、Request オブジェクトと Response オブジェクトについて話しましょう。

リクエスト

各リクエスト ハンドラーは、受信リクエストに関する情報がロードされた Request オブジェクトを取得します。これでできることは次のとおりです:

  • クエリパラメータ: .QueryParam("key") を使用してクエリパラメータを取得します。
  • ヘッダー: .Header("key") を使用してヘッダーにアクセスします。
  • Body as String: .BodyAsString() を使用してリクエストの本文を取得します。

例:

go get github.com/BrunoCiccarino/GopherLight/router
go get github.com/BrunoCiccarino/GopherLight/req

応答

Response オブジェクトは、クライアントに応答を送り返すのに役立ちます。できることは次のとおりです:

  • テキストの送信: .Send(data string) はプレーン テキストを書き戻します。
  • ステータスの設定: .Status(code) は HTTP ステータスを設定します。
  • JSON の送信: .JSON(data) は Go オブジェクトを JSON にシリアル化して送信します。
  • エラーの処理: .JSONError(message) は、JSON 形式のエラー応答を送信します。

例:

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")
}

ミドルウェア

Go Web アプリに本格的な機能を追加できるように、一連のミドルウェアが用意されています。これらのミドルウェアはそれぞれ、セキュリティ、ロギング、タイムアウトなど、独自の魔法をもたらします。一つずつ分解してみましょう。 ?

認証ミドルウェア(JWT)

当社の AuthMiddleware は、JSON Web Token (JWT) を使用してルートを保護するのに役立ちます。柔軟性があり、秘密キー、エラー処理、トークン抽出方法をカスタマイズできます。

セットアップ
まず、JWTConfig:

を使用して JWT 設定を構成します。
  • SecretKey: JWT に署名するための秘密鍵。
  • SigningMethod: JWT 署名アルゴリズム。
  • ErrorHandler: 認証エラーを処理するためのカスタム エラー ハンドラー (オプション)。
  • TokenExtractor: リクエスト ヘッダーからトークンを抽出します (オプション)。

app.Get("/greet", func(r *req.Request, w *req.Response) {
    name := r.QueryParam("name")
    if name == "" {
        name = "stranger"
    }
    w.Send("Hello, " + name + "!")
})

CORSミドルウェア

クロスオリジンリクエストを許可する必要がありますか?問題ない! CORSMiddleware は、クロスオリジン リソース共有 (CORS) 設定を構成して、他のドメインから API にアクセスできるようにします。

設定オプション

  • AllowOrigin: 任意のオリジンを許可するか、ドメイン (例: "http://example.com") を指定するには、「*」に設定します。
  • AllowMethods: どの HTTP メソッドが許可されますか?一般的な選択肢には、「GET」、「POST」などが含まれます。
  • AllowHeaders: クライアントが使用できるヘッダーを指定します。
  • AllowCredentials: Cookie または HTTP 認証を含める場合は true に設定します。
  • ExposeHeaders: クライアントに応答から特定のヘッダーを読み取らせます。
  • MaxAge: プリフライト リクエストのキャッシュ時間 (秒単位)。

app.Get("/user", func(r *req.Request, w *req.Response) {
    user := map[string]string{"name": "Gopher", "language": "Go"}
    w.JSON(user)
})

CSRFミドルウェア

当社の CSRFMiddleware は、各リクエストで送信された CSRF トークンを検証することにより、クロスサイト リクエスト フォージェリを防ぎます。 GenerateCSRFToken() を使用して安全なトークンを作成し、独自の isValidToken 関数で検証します。

import (
    "github.com/BrunoCiccarino/GopherLight/middleware"
)

config := middleware.JWTConfig{
    SecretKey: []byte("your_secret_key"),
}
app.Use(middleware.NewAuthMiddleware(config))

次のコマンドを使用してトークンを生成することを忘れないでください。

go get github.com/BrunoCiccarino/GopherLight/router
go get github.com/BrunoCiccarino/GopherLight/req

ロギングミドルウェア

サーバーで何が起こっているかを追跡したいですか? LoggingMiddleware は、メソッド、パス、所要時間を含む各リクエストをログに記録します。これは、アプリのパフォーマンスや異常なアクティビティに関する情報を入手できる優れた方法です。

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")
}

各リクエストは次のように記録されます:

  • 開始: リクエストの開始時間を記録します。
  • Completed: リクエストが終了したとき、期間を含めてログに記録します。

タイムアウトミドルウェア

TimeoutMiddleware を使用してリクエストの処理に時間制限を設定することで、こうした無限の待機を回避します。このミドルウェアは、時間内に完了しない場合はリクエストをキャンセルし、504 ゲートウェイ タイムアウト ステータスをクライアントに送信します。

app.Get("/greet", func(r *req.Request, w *req.Response) {
    name := r.QueryParam("name")
    if name == "" {
        name = "stranger"
    }
    w.Send("Hello, " + name + "!")
})

プラグインインターフェイス

プラグイン インターフェイスは非常にシンプルですが、非常に強力です。登録する方法は 1 つだけです。これにより、アプリのルーティング システムに接続して、新しい API エンドポイント、Webhook、その他想像できるあらゆるルートを追加できます。

登録方法
これがプラグイン インターフェースのすばらしい部分です:

app.Get("/user", func(r *req.Request, w *req.Response) {
    user := map[string]string{"name": "Gopher", "language": "Go"}
    w.JSON(user)
})

Register メソッドは、以下を指定することでプラグインに新しいルートを定義できるルート関数を受け入れます。

  • メソッド: HTTP メソッド (例: "GET"、"POST" など)
  • path: ルート パス (例: "/my-plugin-route")
  • handler: ルートがヒットしたときに実行する関数。この関数は以下を受け取ります。
    • req: クエリパラメータ、ヘッダー、本文にアクセスできるリクエストオブジェクト。
    • res: クライアントにデータを送り返すための応答オブジェクト。

プラグインの例

ユーザーに挨拶するために、/hello-plugin に単純なエンドポイントを追加するプラグインを作成するとします。プラグインは次のようになります:

import (
    "github.com/BrunoCiccarino/GopherLight/middleware"
)

config := middleware.JWTConfig{
    SecretKey: []byte("your_secret_key"),
}
app.Use(middleware.NewAuthMiddleware(config))

アプリにプラグインを追加する

プラグインをロードするには、インスタンスを作成し、メインのアプリ設定で Register を呼び出すだけです。

corsOptions := middleware.CORSOptions{
    AllowOrigin: "*",
    AllowMethods: []string{"GET", "POST"},
}
app.Use(middleware.CORSMiddleware(corsOptions))

プラグインのカスタマイズ

各プラグインは、必要なだけルートを追加できます。 Register 関数で Route を複数回呼び出すだけで、追加のエンドポイントを定義できます。さまざまな HTTP メソッド、パス、ハンドラーを使用して、プラグインの機能を自由に形作ります。

以上がGopherLight を使用して Go でプロのように API を作成する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。