「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > GopherLight を使用して Go でプロのように API を作成する方法

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

2024 年 11 月 18 日に公開
ブラウズ:546

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().
  • でリクエスト本文を取得します。

例:

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

応答

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

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

例:

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

ミドルウェア

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

認証ミドルウェア(JWT)

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

設定
まず、JWTConfig:

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

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

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

CORSミドルウェア

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

設定オプション

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

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

CSRFミドルウェア

当社の 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)

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

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

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

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 メソッドは、次のように指定することでプラグインに新しいルートを定義できるルート関数を受け入れます:

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

プラグインの例

ユーザーに挨拶するために /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 メソッド、パス、ハンドラーを使用して、プラグインの機能を自由に形作ります。

リリースステートメント この記事は次の場所に転載されています: https://dev.to/gopherlight/how-to-write-apis-like-a-pro-in-go-with-gopherlight-3b97?1 侵害がある場合は、study_golang にご連絡ください。 @163.com 削除
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3